Как заставить мое меню сценария выполнять мои подписки в Unix - PullRequest
1 голос
/ 21 февраля 2020

Извините заранее, так как я новичок в Unix кодировании. У меня есть Bash сценарий оболочки, который генерирует 2 других подписки. Основной скрипт реализует меню, которое дает пользователю выбор, в каком скрипте генерировать. У меня две проблемы. Первый - как сделать скрипт, который пользователь выбирает для выполнения при его выборе, а второй - как реализовать проверку ввода в моем меню, чтобы, когда пользователь вводит что-то отличное от 1 и 2, чтобы получить сообщение об ошибке. Это мой код:

#!/bin/bash
echo "Welcome to scriptGen."
echo "Please select a script to execute by choosing 1 or 2:"

scripts="bDir mMail"

select option in $scripts
do
        echo "You have selected script $option to execute."
done
cat > bDir.sh <<EOF1
#!/bin/bash
#code
EOF1
chmod +x bDir.sh

cat >mMail.sh <<EOF2
#!/bin/bash
#code
EOF2
chmod +x mMail.sh

Спасибо за ваше время!

1 Ответ

1 голос
/ 21 февраля 2020

Таким образом, вы, вероятно, захотите, чтобы оператор case выбрал свой ввод.

Кроме того, я не уверен, что вы делаете с написанием динамических c сценариев, но вам, вероятно, будет лучше с функциями в вашем коде.

Что-то вроде следующего:

#!/bin/bash

main () {
    echo "Welcome to scriptGen."
    echo
    echo "1: bDir"
    echo "2: mMail"
    echo -n "Please select a script to execute by choosing 1 or 2: "

    read user_input

    case $user_input in
        1)
            bdir
            ;;
        2)
            mmail
            ;;
        *)
            echo "Unrecognised option '$user_input'. Exiting..."
            exit 1
            ;;
    esac
}

bdir () {
    echo "Running bDir"
}

mmail () {
    echo "Running mmail"
}

main "$@"

Объяснение:

main () {
...
}

Создание функции с именем main. Это достаточно четкое имя, позволяющее пользователю узнать, какая функция будет вызываться первой.


echo -n "Please select a script to execute by choosing 1 or 2: "

-n удаляет новую строку в конце. Это дает более приятный пользовательский интерфейс, когда они запрашиваются.


read user_input

Прочитайте ввод пользователя и сохраните его в переменной user_input. Захват завершится sh, когда пользователь нажмет ввод. Однако это можно комбинировать с другими флагами, такими как -n 1, чтобы захватить только 1 символ и продолжить, не требуя от пользователя нажатия клавиши ввода.


case $user_input in
    1)
        bdir
        ;;
    2)
        mmail
        ;;
    *)
        echo "Unrecognised option '$user_input'. Exiting..."
        exit 1
        ;;
esac

Оператор case. Учитывая значение user_input, если оно равно 1, запустите функцию bdir. Если это 2, запустите функцию mmail. В противном случае выведите предупреждение и выйдите.


main "$@"

Запустите нашу основную функцию. Мы используем $@, чтобы все переменные, передаваемые в скрипт, также передавались в основную функцию.

...