Voor de meeste programmeertalen bestaan er hulpmiddelen om fouten op te sporen (debug). Zo'n debugger start het te onderzoeken programma of script en volgt de werking van het script terwijl het zijn werk doet. Voor shell scripts bestaat er geen debugger, maar met behulp van enkele opties kunnen we toch fouten opsporen.
De -n optie (noexec) zorgt ervoor dat de shell de opdracht niet uitvoert. In plaats daarvan controleert de shell de schijfwijze (syntax). De -n optie voert dus een controle uit, vergelijkbaar met een spellings- en taalcontrole in een tekstverwerker. M.a.w. een veilige manier om scripts te testen op syntax fouten.
Een voorbeeld, het script syntax.sh
#!/bin/bash echo "Gebruiker: $USER echo "Persoonlijke map: $HOME" echo "Besturingssysteem: $OSTYPE"
Voer het script uit met de -n optie:
Bovenstaande uitvoer toont een syntax fout in regel vier. Op het einde van de eerste echo opdracht ontbreekt namelijk een aanhalingsteken.
De -v optie toont alle uit te voeren opdrachtregels, voor deze uitgevoerd worden. Dit is zeer handig bij het opsporen van fouten allerhande.
Een voorbeeld, het script gebruikers.sh:
#!/bin/bash cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt # Tijdelijk bestand opruimen. /bin/rm -f /tmp/users.txt
Voer het script uit met de -v optie:
dany@main:~> sh -v gebruikers.sh
#!/bin/bash
cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt
awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt
at Batch jobs daemon
bin bin
daemon Daemon
dany Dany Pinoy
ftp FTP account
games Games account
lp Printing daemon
man Manual pages viewer
news News system
nobody nobody
root root
sshd SSH daemon
uucp Unix-to-Unix CoPy system
# Tijdelijk bestand opruimen.
/bin/rm -f /tmp/users.txt
De uitvoer van het script bevat zowel de opdrachtregels als de uitvoer van de opdrachten. Je ziet nu tenminste waarmee het script bezig is.
De -x optie (xtrace of execution trace) toont na het uitvoeren van elke opdracht de gebruikte opdracht. Dit helpt bij het stellen van een diagnose bij een probleem.
In de meeste gevallen krijg je met de -x optie de meest waardevolle informatie, maar het kan uitgroeien tot een waanzinnige hoeveelheid uitvoer.
dany@main:~> sh -x gebruikers.sh
+ cut -d : -f1,5,7 /etc/passwd
+ grep -v sbin
+ grep sh
+ sort
+ awk -F: ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt
at Batch jobs daemon
bin bin
daemon Daemon
dany Dany Pinoy
ftp FTP account
games Games account
lp Printing daemon
man Manual pages viewer
news News system
nobody nobody
root root
sshd SSH daemon
uucp Unix-to-Unix CoPy system
+ /bin/rm -f /tmp/users.txt
In de uitvoer worden de uitgevoerde opdrachten voorafgegaan door een +-teken.