Bash
valkuilen
Zoeken…
Witruimte bij het toewijzen van variabelen
Witruimte is belangrijk bij het toewijzen van variabelen.
foo = 'bar' # incorrect foo= 'bar' # incorrect foo='bar' # correct
De eerste twee resulteren in syntaxisfouten (of erger, het uitvoeren van een onjuiste opdracht). In het laatste voorbeeld wordt de variabele $foo
correct ingesteld op de tekst "bar".
De laatste regel in een bestand ontbreekt
De C-standaard zegt dat bestanden moeten eindigen met een nieuwe regel, dus als EOF aan het einde van een regel komt, mag die regel door sommige opdrachten niet worden gemist. Als voorbeeld:
$ 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
Om ervoor te zorgen dat dit correct werkt voor in het bovenstaande voorbeeld, voegt u een test toe zodat de lus wordt voortgezet als de laatste regel niet leeg is.
$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt one two three
Mislukte opdrachten stoppen de uitvoering van het script niet
In de meeste scripttalen, als een functie-aanroep mislukt, kan dit een uitzondering veroorzaken en de uitvoering van het programma stoppen. Bash-opdrachten hebben geen uitzonderingen, maar ze hebben wel exitcodes. Een exitcode die niet nul is, geeft een storing aan, maar een exitcode die niet nul is, zal de uitvoering van het programma niet stoppen.
Dit kan leiden tot gevaarlijke (hoewel wel bedachte) situaties zoals deze:
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
Als het cd
-openen naar deze map mislukt, negeert Bash de fout en gaat naar de volgende opdracht, waarbij de map wordt gewist van waar u het script hebt uitgevoerd.
De beste manier om dit probleem op te lossen, is door gebruik te maken van de opdracht set :
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
set -e
vertelt Bash om het script onmiddellijk te verlaten als een opdracht een niet-nul status retourneert.