如果语句检查正则表达式表达不起作用

时间:2013-10-24 12:59:20

标签: shell

我今天开始学习shell编程,我正在尝试的是用3个选项做一个简单的选项菜单,如果用户键在1,2或3中,它将是一个有效的输入。除了1,2,3之外的任何东西都将是一个无效的输入。我已经尝试过但它没有工作,因为我的代码如下没有发生任何事情。 请建议谢谢。

 #!/bin/bash

 while  :
 do

    clear

       #display menu
       echo "1) choice 1"
       echo "2) choice 2"
       echo "3) choice 3"
       read -p "Enter choice: " choice
       regex = "[1-3]"
       if  [[ $choice -ne $regex ]]; then
           echo "Invalid input"
       else
           case $choice in 
           1) echo "this is choice one"
           2) echo "this is choice two"
           3) echo "this is choice three"
esac
     fi
done

2 个答案:

答案 0 :(得分:3)

您不是将它作为正则表达式进行比较。说:

if [[ ! $choice =~ $regex ]]; then

此外,在分配期间不应将空格=。说:

regex="[1-3]"

来自manual

  

另一个二元运算符‘=~’可用,具有相同的运算符   优先级为‘==’‘!=’。使用时,右边的字符串   运算符被认为是扩展正则表达式和   相应地匹配

答案 1 :(得分:1)

请勿clear或您不会看到任何内容。

错误

删除=周围的空白:

regex="[1-3]"

您的案件必须以;;

结尾
1) echo "this is choice one";;
2) echo "this is choice two";;
3) echo "this is choice three";;

建议

介绍退出案例:

'x') exit 0;;

如果您使用默认情况作为最后一种情况,则不需要测试[[ ]]

*) echo "invalid input";;