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