Ожидание доступности /dev/sda1 с тайм-аутом в скрипте оболочки

Ожидание доступности /dev/sda1 с тайм-аутом в скрипте оболочки

У меня есть образ 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, чтобы проверить наличие блочного устройства.

Связанный контент