如何根据用户输入更新case语句中的变量

时间:2018-12-20 06:35:46

标签: linux bash unix input menu

我创建了一个bash脚本,该脚本本质上是一个包含许多问题的向导,其中有些是多项选择。当提出多项选择题时,我希望用户能够选择一个数字,其中每个数字对应一个不同的答案。我希望这个答案是可以在脚本中稍后使用的变量。

我意识到这就是“选择”功能的用途,但是当用户只是按下[ENTER]时,我也有一个要求,即假定使用默认值。据我所知,当按下[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 :(得分:2)

  • 在所有;之前插入break
  • 如果$ hash为空,请将$hash替换为${hash:=2}以使用默认值。
  • "") hash="sha256" break 2;;可以被删除。