Таким образом, вы, вероятно, захотите, чтобы оператор 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 "$@"
Запустите нашу основную функцию. Мы используем $@
, чтобы все переменные, передаваемые в скрипт, также передавались в основную функцию.