Die ganzen $?-Abfragen kannst du dir sparen:
#!/bin/bash
# Script zum Herunterfahren von beer.tknet.lan
HOSTS="gin.tknet.lan vodka.tknet.lan whisky.tknet.lan "
timer=0 # Timer wird bei jeder zutreffenden Bedingung um 1 hochgezählt.
# Wenn Timer größer als 0 ist, dann wird der Vorgang abgebrochen.
if pgrep wget >/dev/null; then
let timer=timer+1
fi
for system in HOSTS # Wenn mindestens ein System noch pingbar ist, dann $TIMER=$TIMER+1
do
if ping -c2 $system > /dev/null; then
let timer=timer+1
fi
done
if [ $timer -eq 0 ]; then
shutdown -h 0
fi
Alles anzeigen
Variablen sollten grundsätzlich geschützt werden (als ${var} wenn sie in Kontext mit anderen Zeichen stehen und in Anführungszeichen, wenn sie Leerraum, der nicht als Token-Trenner dienen soll, enthalten können), das ist in diesem Falle aber für $timer nicht notwendig, da es sich um eine interne Integer-Variable handelt, die niemals Benutzereingaben enthält.
pgrep und pkill sind generell die effizientere Alternative zum manuellen Auseinandernehmen der Ausgabe von ps. Die korrekte Zeile wäre sonst:
ps ax | grep wget | grep -v grep
da das erste grep sich selber ("grep wget") in der Prozessliste finden würde. Vor allem sind sie im Gegensatz z. B. zu killall auch auf BSD verfügbar.