
起動時に、差し込まれたサムドライブにあるスクリプトを実行する必要がある 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