In bash, voglio dire "se un file non contiene XYZ, quindi" fai un sacco di cose. Il modo più naturale per recepire questa in codice è qualcosa di simile:Bash condizionale al comando codice di uscita
if [ ! grep --quiet XYZ "$MyFile" ] ; then
... do things ...
fi
Ma, naturalmente, questo non è la sintassi Bash valido. Potrei usare i backtick, ma poi testerò l'output del file. Le due alternative mi viene in mente sono:
grep --quiet XYZ "$MyFile"
if [ $? -ne 0 ]; then
... do things ...
fi
E
grep --quiet XYZ "$MyFile" ||
( ... do things ...
)
I tipi di preferire il secondo, è più Lispy e || per il controllo del flusso non è così raro nei linguaggi di scripting. Posso vedere gli argomenti anche per il primo, sebbene quando la persona legge la prima riga, non sanno perché stai eseguendo grep, sembra che lo stai eseguendo per il suo effetto principale, piuttosto che solo per controlla un ramo nella sceneggiatura.
Esiste un terzo modo più diretto che utilizza un'istruzione if
e ha lo grep
nelle condizioni?
possibile duplicato del [incontro "operatore unario previsto" in script bash] (http://stackoverflow.com/questions/10586213/encounter-unary-operator-expected-in-bash-script) – tripleee