Preforma loperazione in bash solo se una variabile è minore di una seconda variabile [chiusa]

Chiusa. Questa domanda è fuori tema . Attualmente non accetta risposte.

Commenti

  • Hai un errore di battitura in entrambi gli script; valid=${#vaidCheck} – Dice vaidCheck; dovrebbe essere validCheck
  • Sembra che tu stia tentando di creare un chroot jail o container. Ci sono alcuni buoni strumenti per permetterti di farlo. Usare gli strumenti di basso livello è complicato e non necessario; dai unocchiata a uno strumento di alto livello come docker. Non ho ancora utilizzato docker, ma potrebbe essere quello che ti serve. Ho usato chroot jail tools e funzionano bene, ma ho fatto qualche ricerca sui problemi di sicurezza (per chroot e container). Ether funzionerà meglio di qualsiasi cosa possiamo fare da soli.

Answer

Per rispondere alla domanda posta nel titolo sinteticamente:

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

I test per i confronti di interi sono:

 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. 

Utilizzando e. g. < o > esegue un confronto dellordine ASCII, quindi [[ 0100 < 100 ]] sarà vero.

Commenti

  • Stephen Harris aveva ragione quando avevo inserito un errore di battitura, e avevi ragione che avevo usato una sintassi errata. Tuttavia, anche dopo aver corretto entrambi i problemi, nessuno dei due script funziona ancora. /:
  • Aggiungi set -x allinizio dello script ed eseguilo con quello in posizione. Questo ti mostrerà cosa sta effettivamente facendo lo script, in modo da poterlo confrontare con ciò che pensi sta facendo ' e modificare di conseguenza.

Risposta

Bene, ho corretto lerrore di battitura, che sicuramente stava rompendo il programma, e Ho corretto la sintassi delloperatore, interrompendola definitivamente. Tuttavia (e questo può sembrare ridicolo), una volta risolti questi problemi, ho eseguito manualmente loperazione valid=${#validCheck} per testare la lunghezza della stringa per ogni evenienza e ho scoperto che la lunghezza della directory in realtà era di 45 caratteri, non 46. In questo momento mi sento uno stupido, ma sono contento che il problema sia stato risolto e potrei passare a funzioni più urgenti. Grazie ad entrambi per le vostre correzioni ai miei errori di battitura e grazie richard per il vostro suggerimento sugli strumenti chroot jail.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *