シェルスクリプトで、タイムアウト付きで /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まだ利用できないため、私のスクリプトは失敗します。

このシェル スクリプトを変更して、デバイス上で while/wait を実行し、何も見つからない場合はタイムアウトするようにするにはどうすればよいですか。

疑似コード:

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

疑似コードをシェルに直接変換する

#!/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

関連情報