Наконец превращенный перемещение в 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
Измените эту строку:
if [ $origin == unmount ]; then
к этому:
elif [ $origin == unmount ]; then
Вы получаете эту ошибку, потому что удар интерпретирует второе if
столь же вложенный, вместо как второе условие. Вот визуализация с отступами.
if [ $origin == mount ]; then
# Do some things.
if [ $origin == unmount ]; then
# Do some things.
fi
#fi
<час> Между прочим, необходимо также заключить переменные в кавычки для защиты от разделения слова и globbing:
if [ "$origin" == mount ]; then
...
mount -t ntfs /dev/"$device" "$location"
elif [ "$origin" == unmount ]; then
...
umount "$ulocation"
wjandrea, кажется, покрыл if
проблемы. Я предложил бы a 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
операторы для сопоставления с образцом по необычному сопоставлению с образцом удара с [[...]]
это case
POSIX и поэтому портативный.