Ne préformez lopération en bash que si une variable est inférieure à une seconde variable [fermé]

Clôturé. Cette question est hors sujet . Il naccepte pas les réponses actuellement.

Commentaires

  • Vous avez une faute de frappe dans les deux scripts; valid=${#vaidCheck} – Cela dit vaidCheck; devrait être validCheck
  • On dirait que vous essayez de créer une chroot prison ou conteneur. Il existe de bons outils pour vous permettre de faire cela. Lutilisation des outils de bas niveau est délicate et inutile; jetez un œil à un outil de haut niveau comme docker. Je nai pas encore utilisé docker, mais pourrait être ce dont vous avez besoin. Jai utilisé des outils de prison chroot, et ils fonctionnent bien, mais faites quelques recherches sur les problèmes de sécurité (pour chroot et conteneurs). Ether fonctionnera mieux que tout ce que nous pouvons faire nous-mêmes.

Réponse

Pour répondre à la question posée dans le titre succinctement:

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

Les tests pour les comparaisons dentiers sont:

 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. 

En utilisant e. g. < ou > effectue une comparaison dordre ASCII, donc [[ 0100 < 100 ]] sera vrai.

Commentaires

  • Stephen Harris avait raison de dire que javais placé une faute de frappe, et vous aviez raison de dire que javais utilisé une syntaxe incorrecte. Cependant, même après avoir corrigé les deux problèmes, aucun script ne fonctionne encore. /:
  • Ajoutez set -x vers le haut de votre script et exécutez-le avec celui-ci en place. Cela vous montrera ce que fait réellement le script, afin que vous puissiez le comparer à ce que vous pensez qu’il fait ' et modifiez en conséquence.

Réponse

Eh bien, jai corrigé la faute de frappe, qui cassait certainement le programme, et Jai corrigé la syntaxe de lopérateur, la cassant également définitivement. Cependant (et cela peut sembler ridicule), une fois que jai corrigé ces problèmes, jai préformé lopération valid=${#validCheck} manuellement pour tester la longueur de la chaîne juste au cas où et jai trouvé que la longueur du répertoire était en fait 45 caractères, pas 46. Je me sens comme un dope en ce moment, mais je suis content que le problème ait été résolu et que je puisse passer à des fonctions plus urgentes. Merci à vous deux pour vos corrections apportées à mes fautes de frappe et merci à Richard pour votre suggestion doutils de prison chroot.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *