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

Linux 如何根据用户输入更新case语句中的变量,linux,bash,unix,input,menu,Linux,Bash,Unix,Input,Menu,我已经创建了一个bash脚本,它本质上是一个有很多问题的向导,有些问题是多项选择。当出现多项选择题时,我希望用户能够选择一个数字,每个数字对应一个不同的答案。我希望这个答案是以后可以在脚本中使用的变量 我意识到这就是“选择”功能的用途,但我也有一个要求,即当用户只需点击[ENTER]时,假定默认值。据我所知,“选择”功能在按下[ENTER]键时假定为空值“”(无效选项),并重新提示问题 下面的代码是我试图在按下数字时更新变量。例如,当按下数字“1”时,我希望$hash变量更新为“sha224”

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

我意识到这就是“选择”功能的用途,但我也有一个要求,即当用户只需点击[ENTER]时,假定默认值。据我所知,“选择”功能在按下[ENTER]键时假定为空值“”(无效选项),并重新提示问题

下面的代码是我试图在按下数字时更新变量。例如,当按下数字“1”时,我希望$hash变量更新为“sha224”

使用不带“select”的case语句可以实现这一点吗?如果不是,我的选择是什么

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
  • 插入
    在所有
    中断之前
  • $hash
    替换为
    ${hash:=2}
    以在$hash为空时使用默认值
  • hash=“sha256”break 2可以删除

  • 既然Cyrus已经给出了正确的答案,出于好奇,我只问了一个问题:为什么不使用
    选择
    ?这似乎是解决这类问题的最佳方法。您好。。。唯一的原因是我需要向用户提供一个默认选项,最好只需按Enter键。不建议使用多项选择题中的某些选项,除非您完全确定自己知道这些选项的用途。这就是默认/已选择选项。得心应手的地方。如果你知道通过“选择”实现这一目标的方法,我很乐意听到@HazyMaze:在
    选择的主体中,您可以处理用户输入的内容。如果用户刚刚点击了return,那么在回复中会得到一个空字符串。在这种情况下,您只需将您的选择设置为默认值,然后执行一个
    break
    @user1934428-这不起作用。使用
    select
    时,忽略
    “”)hash=“sha256”break 2。看来这是故意的-你没有把休息放在那里!!!实际上,您根本没有任何括号,因为您不再有
    case
    语句<代码>选择
    基本上结合了
    案例
    正在执行的操作。而且,如果你说“这不起作用”,就把不起作用的代码全部贴出来。非常感谢。成功了!但愿我几天前问过这个问题。相反,我在试图弄明白的过程中学会了一大堆bash。