errore durante l'utilizzo del ciclo while nello script bash


1

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:


2

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:

  1. 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.

  2. [ 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.

  3. 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.

  4. 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.


1
@gniourf_gniourf: non dovevano essere dichiarazioni complete, ma solo la parte contenente 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.
Nickie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.