Наконец, перешел в Linux и решил, что лучшим способом обучения канатам было попробовать свои силы при написании сценариев.
Попытка сделать базовый (начатый действительно базовый и постоянно растущий) скрипт, который автоматически монтируется или размонтирует разделы на основе ввода пользователем. Думал, что я был на правильном пути, но не могу понять, что происходит не так. Извините заранее, если это просто что-то действительно немое.
#!/bin/bash
# Test script to auto mount hdd based in user input
echo "Do you wish to mount or unmount?"
read origin
if [ $origin == mount ]; then
echo "Partitions : $(lsblk)"
echo "Please enter device name e.g. sda1"
read device
echo "Please enter dir location e.g. /mnt"
read location
mount -t ntfs /dev/$device $location
if [ $origin == unmount ]; then
echo "Mounts : $(mount)"
echo "Please enter mount location e.g. /mnt"
read ulocation
umount $ulocation
fi
wjandrea, похоже, рассмотрел проблемы if. Я бы предложил инструкцию 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
Это позволяет человеку запросить монтирование, набрав mount или mo или даже просто m. Аналогично, запрос на отключение может быть запрошен с коротким ответом u. (Вы можете быть более ограничительным, если хотите.) Кроме того, если пользователь не отвечает с чем-то приемлемым, его ругают и снова спрашивают.
Если вы не хотите разделить слово и расширение пути, все переменные оболочки должны как показано выше, в двойных кавычках.
Кроме того, для большей гибкости я не использовал параметр -t ntfs. mount обычно может автоматически выбирать правильный тип.
Преимущество использования операторов case для сопоставления шаблонов по сравнению с сопоставлением fancy bash с [[...]] заключается в том, что case является POSIX и, следовательно, переносимым. [ ! d4]