Ricevo un errore 2: [: missing ]quando utilizzo il seguente whileloop:
#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
echo "please type something (bye quits) "
read INPUT_STRING
echo "you tuped : $INPUT_STRING "
done
Ricevo un errore 2: [: missing ]quando utilizzo il seguente whileloop:
#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
echo "please type something (bye quits) "
read INPUT_STRING
echo "you tuped : $INPUT_STRING "
done
Risposte:
Devi aggiungere spazi attorno whilealle condizioni:
while [ "$INPUT_STRING" != "bye" ]
Questo può sembrare un po 'strano per le persone con un background di programmazione, ma i motivi sono questi:
whilesi aspetta un elenco di comandi. Il flusso di controllo dipende dallo stato di uscita di questo comando: finché è zero, il corpo continua ad essere eseguito.
[ expression ]è una forma alternativa di test expression. Qui testè un comando che valuta l'espressione e restituisce il suo valore sotto forma dello stato di uscita del comando. Si assicura di restituire uno stato di uscita pari a zero se l'espressione (logicamente) restituisce un truevalore booleano, in modo che possa essere utilizzata nei comandi ife while.
In effetti, entrambi teste [sono file eseguibili in Linux (in genere si trovano in /usr/bin). Alcune shell, tuttavia, bashusano comandi interni con gli stessi nomi.
Come teste [sono comandi (tecnicamente) semplici, i loro argomenti dovrebbero essere separati dal nome del comando e tra loro con uno o più caratteri bianchi.
whilee la condizione. Li ho rimossi, poiché non hanno aggiunto qualcosa di importante alla risposta. Naturalmente hai ragione su cosa succede quando si omettono gli spazi intorno!=all'operatore.