
Tengo una imagen de Linux que, al arrancar, necesita ejecutar un script que se ubicará en una memoria USB conectada. Esto es lo que tengo.
mkdir /mnt/usb
mount /dev/sda1 /mnt/usb
cd /mnt/usb/DMS
cp script.sh /
chmod +x /script.sh
/bin/sh /script.sh
Este script se agrega más tarde en los scripts de sysvinit. Funciona con la mayoría de las unidades, sin embargo, algunas unidades tardan un poco en ser reconocidas. Eso significa que mi script fallará porque /dev/sda1
aún no está disponible.
¿Cómo modifico este script de shell para que realice un tiempo/espera en el dispositivo, con un tiempo de espera si nunca se encuentra ninguno?
Pseudocódigo:
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
¿Cómo realizo algo como esto en un script de shell?
Respuesta1
Traduciendo su pseudocódigo directamente al shell get
#!/bin/sh
counter=0
while [ ! -e /dev/sda1 ]; do
sleep 100
counter=$((counter + 1))
if [ $counter -ge 50 ]; then
exit
fi
done
Opcionalmente, puede cambiar -e /dev/sda1
a -b /dev/sda1
para verificar el dispositivo bloqueado.