У меня есть образ Linux, который при загрузке должен выполнить скрипт, который будет расположен на подключенном флэш-накопителе. Вот что у меня есть.
mkdir /mnt/usb
mount /dev/sda1 /mnt/usb
cd /mnt/usb/DMS
cp script.sh /
chmod +x /script.sh
/bin/sh /script.sh
Этот скрипт добавляется в конце скриптов sysvinit. Он работает с большинством дисков, однако, некоторые диски требуют времени для распознавания. Это означает, что мой скрипт не сработает, поскольку /dev/sda1
пока недоступен.
Как мне изменить этот скрипт оболочки, чтобы он выполнял некоторое время/ожидание на устройстве с тайм-аутом, если устройство не будет найдено?
Псевдокод:
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
Как выполнить что-то подобное в скрипте оболочки?
решение1
Перевод вашего псевдокода непосредственно в оболочку get
#!/bin/sh
counter=0
while [ ! -e /dev/sda1 ]; do
sleep 100
counter=$((counter + 1))
if [ $counter -ge 50 ]; then
exit
fi
done
При желании вы можете изменить -e /dev/sda1
значение на -b /dev/sda1
, чтобы проверить наличие блочного устройства.