Ricerca…
Spazio bianco durante l'assegnazione di variabili
Gli spazi bianchi sono importanti quando si assegnano le variabili.
foo = 'bar' # incorrect foo= 'bar' # incorrect foo='bar' # correct
I primi due provocheranno errori di sintassi (o, peggio, eseguendo un comando errato). L'ultimo esempio imposterà correttamente la variabile $foo
sul testo "bar".
Manca l'ultima riga in un file
Lo standard C dice che i file dovrebbero terminare con una nuova riga, quindi se EOF arriva alla fine di una linea, quella linea potrebbe non essere ignorata da alcuni comandi. Come esempio:
$ echo 'one\ntwo\nthree\c' > file.txt $ cat file.txt one two three $ while read line ; do echo "line $line" ; done < file.txt one two
Per assicurarti che funzioni correttamente nell'esempio precedente, aggiungi un test in modo che continui il ciclo se l'ultima riga non è vuota.
$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt one two three
I comandi non riusciti non fermano l'esecuzione dello script
Nella maggior parte dei linguaggi di scripting, se una chiamata di funzione fallisce, può generare un'eccezione e interrompere l'esecuzione del programma. I comandi di Bash non hanno eccezioni, ma hanno codici di uscita. Un codice di uscita diverso da zero segnala un errore, tuttavia un codice di uscita diverso da zero non arresta l'esecuzione del programma.
Questo può portare a situazioni pericolose (anche se certamente inventate) in questo modo:
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
Se cd
-ing su questa directory fallisce, Bash ignorerà l'errore e passerà al comando successivo, cancellando la directory da cui è stato eseguito lo script.
Il modo migliore per risolvere questo problema è utilizzare il comando set :
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
set -e
dice a Bash di uscire immediatamente dallo script se qualsiasi comando restituisce uno stato diverso da zero.