Проблемы с сценарием - Неожиданный конец файла с использованием IF / THEN

Наконец, перешел в 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
1
задан 26 July 2016 в 01:51

1 ответ

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]

3
ответ дан 23 May 2018 в 07:47

Другие вопросы по тегам:

Похожие вопросы: