/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

関連情報