【问题标题】:How do i stop echo in loop and re-run case statement?如何在循环中停止回显并重新运行 case 语句?
【发布时间】:2020-06-27 03:22:58
【问题描述】:

对 bash 脚本非常陌生,我正在学习如何在 case 语句中使用多个案例和输入。

#!/usr/bin/env bash
echo "Choose from 1,2" 
read -p "Enter here : " input1
echo "Choose from a,b" 
read -p "Enter here : " input2

while true; do
case $input1+$input2 in
  1+a )
    echo "You have chosen 1 and a"
     break;;
  1+b )
    echo "You have chosen 1 and b"
    break;;
  2+a )
   echo "You have chosen 2 and a"
    break;;
  2+b )
   echo "You have chosen 2 and b"
    break;;
  *+* )
    echo "Invalid input";;
esac
done

PS \ 我知道我可以使用单个通配符星号来覆盖剩余的可能性,当我只需要通配符用于单个情况而不需要同时使用通配符时,我只使用了两次。

目前

  • 其他一切正常,但如果我尝试通过输入随机数来调用无效输出,它就是无限垃圾邮件 - 无效输出。

期待

  • 如果用户输入了 case 语句未涵盖的任何内容,则仅回显“无效输出”一次并重新运行 case 语句(即再次回显这 2 个问题)

有人可以建议我如何解决它

【问题讨论】:

  • read 放入循环中。
  • @Beta 感谢它现在运行良好,尽管我想修复一些小问题。假设我正确输入了第一个问题,只输入了第二个错误,它会重新运行这两种情况。我如何让它只运行那些输入错误的情况
  • 在每个读取周围放置另一个循环并独立验证每个...
  • @DavidSainty 感谢直接验证读取本身的想法。

标签: bash shell unix


【解决方案1】:

感谢所有建议的 cmets,我想出了这个

while true; do
echo "Choose from 1,2" 
read -p "Enter here : " input1
case $input1 in
  1|2 )
    break;;
   * )
     echo "Enter Valid Input"
esac
done

while true; do
echo "Choose from a,b" 
read -p "Enter here : " input2
case $input2 in
  a|b )
    break;;
    * )
    echo "Enter Valid Input"
esac
done

case $input1+$input2 in
  1+a )
    echo "You have chosen 1 and a";;
  1+b )
    echo "You have chosen 1 and b";;
  2+a )
   echo "You have chosen 2 and a";;
  2+b )
   echo "You have chosen 2 and b";;
esac

【讨论】:

  • 或许可以编写一个函数readoption(),将有效输入作为参数。并且知道:input1=$(readoption 1 2); input2=$(readoption a b);
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2015-09-14
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
相关资源
最近更新 更多