Aguardando que /dev/sda1 fique disponível, com tempo limite, no shell script

Aguardando que /dev/sda1 fique disponível, com tempo limite, no shell script

Tenho uma imagem do Linux que, na inicialização, precisa executar um script que ficará localizado em um pendrive conectado. Aqui está o que eu tenho.

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 é adicionado posteriormente nos scripts sysvinit. Funciona com a maioria das unidades, no entanto, algumas unidades demoram um pouco para serem reconhecidas. Isso significa que meu script falhará porque /dev/sda1ainda não está disponível.

Como modifico este script de shell para executar um tempo/espera no dispositivo, com um tempo limite se nenhum for encontrado.

Pseudo-có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

Como faço algo assim em um script de shell?

Responder1

Traduzindo seu pseudocódigo diretamente para o 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, você pode alterar -e /dev/sda1para -b /dev/sda1para verificar o dispositivo de bloqueio.

informação relacionada