O wjandrea parece ter coberto os problemas de if
. Sugiro uma declaração case
:
#!/bin/bash
# Test script to auto mount hdd based in user input
while read -rp "Do you wish to mount or unmount? " origin
do
case "$origin" in
m*)
echo "Partitions : $(lsblk)"
read -rp "Please enter device name e.g. sda1: " device
read -rp "Please enter dir location e.g. /mnt: " location
mount "/dev/$device" "$location"
break
;;
u*)
echo "Mounts : $(mount)"
read -rp "Please enter mount location e.g. /mnt: " ulocation
umount "$ulocation"
break
;;
*)
echo "You typed nonsense. Please try again."
;;
esac
done
Isso permite que a pessoa solicite uma montagem digitando mount
ou mo
ou mesmo apenas m
. Da mesma forma, uma desmontagem pode ser solicitada com uma resposta tão curta quanto u
. (Você pode ser mais restritivo se quiser.) Além disso, se o usuário não responder com algo aceitável, ele é repreendido e perguntado novamente.
A menos que você deseje a divisão de palavras e a expansão do nome do caminho, todas as variáveis do shell devem ser, como mostrado acima, entre aspas duplas.
Além disso, para maior flexibilidade, deixei de fora a opção -t ntfs
. mount
geralmente pode selecionar automaticamente o tipo certo.
Uma vantagem de usar as declarações case
para correspondência de padrões sobre correspondência de padrões bash extravagante com [[...]]
é que case
é POSIX e, portanto, portátil.