Operação de pré-forma no bash somente se uma variável for menor que uma segunda variável [closed]

0

Estou construindo um sistema operacional para uma máquina virtual que fiz e, embora o progresso tenha sido fantástico, fiquei preso por várias horas sobre o que deveria ser um problema muito simples: estou projetando um método de navegação de diretórios e enquanto eu posso descer para um diretório filho, estou tendo algum problema retornando ao seu diretório pai. Eu preciso do script bash para permitir retornar ao diretório pai apenas se o número de caracteres no diretório for de pelo menos um determinado comprimento, para não permitir a navegação para fora do sistema de arquivos da VM no host FS ou diretórios do sistema da VM quando no modo de usuário, mas para permitir tanto quando no modo raiz (para gerenciar o que há um segundo script que está funcionando bem.).

Então, aqui está o que tentei até agora, sendo que ambos os scripts acabaram executando a mesma ação: somente retornando que "a raiz do sistema de arquivos não tem diretório pai", mesmo quando navegar por um diretório retornaria ao modo de usuário root em vez de ir para os diretórios raiz regulares.

#!/bin/bash
dir=$(cat '/system/framework/usrDirectory')
parentdir="$(dirname "$dir")"
echo $parentdir > '/system/framework/parentToCheck'
validCheck=$(cat "/system/framework/parentToCheck")
valid=${#vaidCheck}
validLength=46
if [[ $valid == $validLength ]]
  then
      echo $parentdir > '/system/framework/usrDirectory'
  else if [[ $valid < $validLength ]]
      then
          echo -e "\n\nFilesystem root does not have a parent directory!"
  fi
fi
Assim como:
#!/bin/bash
dir=$(cat '/system/framework/usrDirectory')
parentdir="$(dirname "$dir")"
echo $parentdir > '/system/framework/parentToCheck'
validCheck=$(cat "/system/framework/parentToCheck")
valid=${#vaidCheck}
validLength=46
if [[ $valid == $validLength ]]
  then
      echo -e "\n\nFilesystem root does not have a parent directory!"
  else
      echo $parentdir > '/system/framework/usrDirectory'
fi

OBSERVAÇÃO: Sim, ele diz que o valor da variável validLength é 46, e o diretório não tem muitos caracteres nesse script, é porque essa é uma VM privatizada e o modo de usuário foi projetado para bloquear com segurança acesso a tudo em seus diretórios pai, ponto final. Assim, eu não queria exibir o caminho completo para o diretório raiz do modo de usuário aqui. No entanto, o caminho para o diretório raiz do modo de usuário contém 46 caracteres, então não consigo pensar em nenhuma razão para isso não funcionar.

    
por Alison E.E. 22.07.2016 / 23:43

2 respostas

0

Bem, eu corrijo o erro de digitação, que certamente estava quebrando o programa, e consertei a sintaxe do operador, também definitivamente o quebrando. No entanto (e isso pode parecer ridículo), uma vez que eu corrigi esses problemas, eu pré-formarei a operação valid=${#validCheck} manualmente para testar o tamanho da string e descobri que o comprimento do diretório era 45 caracteres, não 46. Eu sinto que uma droga agora, mas estou feliz que o problema foi resolvido para que eu possa passar para funções mais urgentes. Obrigado a ambos por suas correções nos meus erros e obrigado Richard por sua sugestão de ferramentas de prisão chroot.

    
por 23.07.2016 / 03:22
3

Para responder à pergunta colocada no título de forma sucinta:

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 ordem ASCII, então [[ 0100 < 100 ]] será verdadeiro.

    
por 23.07.2016 / 00:00