Esperando a que /dev/sda1 esté disponible, con tiempo de espera, en el script de shell

Esperando a que /dev/sda1 esté disponible, con tiempo de espera, en el script de shell

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/sda1aú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/sda1a -b /dev/sda1para verificar el dispositivo bloqueado.

información relacionada