Как обновить переменную внутри оператора case на основе пользовательского ввода - PullRequest
0 голосов
/ 20 декабря 2018

Я создал скрипт bash, который по сути является мастером с несколькими вопросами, некоторые из которых имеют множественный выбор.Когда задается вопрос с несколькими вариантами ответа, я хочу, чтобы пользователь мог выбрать число, где каждое число соответствует отдельному ответу.Я хочу, чтобы этот ответ был переменной, которая может быть позже использована в скрипте.

Я понимаю, что для этого используется функция 'select', но у меня также есть требование, когда пользователь просто нажимает [ENTER] предполагается значение по умолчанию.Насколько я знаю, функция «select» принимает пустое значение «» при нажатии клавиши [ENTER] (недопустимая опция) и повторно запрашивает вопрос.

Приведенный ниже код я пытаюсьобновить переменную при нажатии числа.Например, когда нажата цифра «1», я хочу, чтобы переменная $ hash была обновлена ​​до «sha224».

Можно ли добиться этого с помощью оператора case без «select»?Если нет, каковы мои альтернативы?

echo
echo "Select a hashing algorithm"
echo "1 - sha224"
echo "2 - sha256"
echo "3 - sha384"
echo "4 - sha512"
while true; do 
read -p "Option: [sha256]:" -e hash
    case $hash in
        "") hash="sha256" break 2;;
        1) hash="sha224" break 2;;
        2) hash="sha256" break 2;;
        3) hash="sha384" break 2;;
        4) hash="sha512" break 2;;
        *) echo "Invalid Response: Please enter [1-4] and hit [ENTER] or hit [ENTER] to select 'sha256'";;
    esac
done

1 Ответ

0 голосов
/ 20 декабря 2018
  • Вставьте ; перед всеми break.
  • Замените $hash на ${hash:=2}, чтобы использовать значение по умолчанию, если $ hash пуст.
  • "") hash="sha256" break 2;;могут быть удалены.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...