6. Scripting 103
Linux
HOGENT toegepaste informatica
Thomas Parmentier, Andy Van Maele, Bert Van Vreckem,
Jan Willem
2025-2026
Fouten opsporen (1)
- Begin met minimaal script, voer het zo snel mogelijk uit!
- Werk altijd stap voor stap
- Test voortdurend het resultaat van elke
wijziging
- Hou minstens 2 vensters open naast elkaar:
- Editor
- Terminal voor testen
Fouten opsporen (2)
- Syntax check:
bash -n script.sh
- ShellCheck:
shellcheck script.sh
- Gebruik editor-plugin waar mogelijk
- Druk veel info af (
printf
of echo
)
- Debug-mode:
bash -x script.sh
- In het script:
set -x
en set +x
Fouten voorkomen
Begin elk script met:
set -o errexit # abort on nonzero exitstatus
set -o nounset # abort on unbound variable
set -o pipefail # don't hide errors within pipes
Booleans in Bash
- In Bash bestaan geen booleaanse variabelen!
- Er bestaan wel gelijknamige commando’s
true
en
false
- Booleaanse waarden zijn gebaseerd op exit-status v/e proces
De commando’s true
en false
In Java zou je true
als volgt implementeren
public class True {
public static void main(String[] args) {
System.exit(0);
}
}
en false
:
public class False {
public static void main(String[] args) {
System.exit(1);
}
}
De echte implementatie vind
je hier
Logische operatoren
if COMMANDO; then
# A
else
# B
fi
A
-blok wordt uitgevoerd als exit-status van
COMMANDO
0 is (geslaagd, TRUE)
B
-blok wordt uitgevoerd als exit-status van
COMMANDO
verschillend is van 0 (gefaald, FALSE)
Toepassing
Maak gebruiker ${user}
aan als die nog niet bestaat
if ! getent passwd "${user}" > /dev/null 2>&1; then
echo "Adding user ${user}"
useradd "${user}"
else
echo "User ${user} already exists"
fi
Operatoren &&
en ||
command2
wordt enkel uitgevoerd als
command1
succesvol was (exit 0)
command2
wordt enkel uitgevoerd als
command1
niet succesvol was (exit ≠ 0)
Het commando test
- Evalueren van logische expressies
- Geeft geschikte exit-status
- Alias voor
test
is [
[
is een commando, geen “haakje” in de
traditionele betekenis
- spaties vóór en na!
# Fout:
if[$#-eq 0]; then
echo "Expected at least one argument"
fi
# Juist:
if [ "${#}" -eq "0" ]; then
echo "Expected at least one argument"
fi