%20im%20Shell-Skript.png)
Ich habe ein Linux-Image, das beim Booten ein Skript ausführen muss, das sich auf einem angeschlossenen USB-Stick befindet. Hier ist, was ich habe.
mkdir /mnt/usb
mount /dev/sda1 /mnt/usb
cd /mnt/usb/DMS
cp script.sh /
chmod +x /script.sh
/bin/sh /script.sh
Dieses Skript wird spät zu den Sysvinit-Skripten hinzugefügt. Es funktioniert mit den meisten Laufwerken, allerdings dauert es bei manchen Laufwerken eine Weile, bis sie erkannt werden. Das bedeutet, dass mein Skript fehlschlagen wird, weil /dev/sda1
es noch nicht verfügbar ist.
Wie ändere ich dieses Shell-Skript, um eine Weile/Wartezeit auf dem Gerät auszuführen, mit einem Timeout, wenn nie etwas gefunden wird.
Pseudocode:
counter = 1
while /dev/sda1 not present
sleep 100
counter++
if counter is 50
exit # no drive ever found
endif
endwhile
# do stuff with plugged in drive, mount it, whatever
Wie führe ich so etwas in einem Shell-Skript aus?
Antwort1
Übersetzen Sie Ihren Pseudocode direkt in Shell get
#!/bin/sh
counter=0
while [ ! -e /dev/sda1 ]; do
sleep 100
counter=$((counter + 1))
if [ $counter -ge 50 ]; then
exit
fi
done
Optional können Sie -e /dev/sda1
dies ändern -b /dev/sda1
, um nach einem Blockgerät zu suchen.