Pré-formar a operação em bash apenas se uma variável for menor que uma segunda variável [fechado]

Fechada. Esta pergunta está fora do tópico . Atualmente não está aceitando respostas.

Comentários

  • Você cometeu um erro de digitação em ambos os scripts; valid=${#vaidCheck} – Isso diz vaidCheck; deve ser validCheck
  • Parece que você está tentando criar uma chroot prisão ou contêiner. Existem algumas boas ferramentas para permitir que você faça isso. Usar as ferramentas de baixo nível é complicado e desnecessário; dê uma olhada em uma ferramenta de alto nível como a janela de encaixe. Ainda não usei o docker, mas pode ser o que você precisa. Eu usei chroot ferramentas de prisão e elas funcionam bem, mas faço algumas pesquisas sobre os problemas de segurança (para chroot e contêineres). Ether funcionará melhor do que qualquer coisa que possamos fazer por nós mesmos.

Resposta

Para responder à pergunta colocada no título sucintamente:

if [[ "$foo" -lt "$bar" ]]; then echo "$foo is less than $bar" fi 

Os testes para comparações de inteiros são:

 n1 -eq n2 True if the integers n1 and n2 are algebraically equal. n1 -ne n2 True if the integers n1 and n2 are not algebraically equal. n1 -gt n2 True if the integer n1 is algebraically greater than the integer n2. n1 -ge n2 True if the integer n1 is algebraically greater than or equal to the integer n2. n1 -lt n2 True if the integer n1 is algebraically less than the inte- ger n2. n1 -le n2 True if the integer n1 is algebraically less than or equal to the integer n2. 

Usando e. g. < ou > faz uma comparação de pedido ASCII, então [[ 0100 < 100 ]] será verdadeiro.

Comentários

  • Stephen Harris estava certo ao dizer que eu havia cometido um erro de digitação, e você estava certo ao dizer que usei sintaxe incorreta. No entanto, mesmo depois de corrigir os dois problemas, nenhum dos scripts funciona ainda. /:
  • Adicione set -x na parte superior do seu script e execute-o com ele no lugar. Isso mostrará a você o que o script está realmente fazendo, para que você possa comparar com o que pensa que ele ' está fazendo e edite de acordo.

Resposta

Bem, eu corrigi o erro de digitação, que certamente estava quebrando o programa, e Eu consertei a sintaxe do operador, também definitivamente quebrando. No entanto (e isso pode parecer ridículo), depois de corrigir esses problemas, realizei a valid=${#validCheck} operação manualmente para testar o comprimento da string apenas no caso e descobri que o comprimento do diretório tinha na verdade 45 caracteres, não 46. Sinto-me um idiota agora, mas estou feliz que o problema tenha sido resolvido, pois posso passar para funções mais urgentes. Obrigado por suas correções aos meus erros de digitação e obrigado richard por sua sugestão de ferramentas chroot jail.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *