简单的case语句在shell脚本中失败
问题描述:
我写了一个非常简单的失败语句。我仔细检查了语法,但无法找到出错的地方。有人可以让我知道吗?简单的case语句在shell脚本中失败
#!/bin/bash
opt_type=0
function opt_type
{
echo "Opt Porvisioning tool starting..."
echo -e "1. ABC \n2. DEF \n3. HIJ \n"
read opt_input
case $opt_input in
1|abc|ABC)
opt_type=1;
2|def|DEF)
opt_type=2;
3|hij|HIJ)
opt_type=3;
4|exit|Exit) echo "Exiting ..."
*) echo "Please enter a valid entry. Exiting!!"
esac
}
echo $opt_type
./opt_type.sh: line 16: syntax error near unexpected token `)'
./opt_type.sh: line 16: ` 2|def|DEF)
-bash-3.2$
我没有看到任何这样的符号(`)那么为什么它抱怨?
答
必须通过;;
不;
关闭每个案件=)
所以:
#!/bin/bash
opt_type=0
function opt_type
{
echo "Opt Porvisioning tool starting..."
echo -e "1. ABC \n2. DEF \n3. HIJ \n"
read opt_input
case $opt_input in
1|abc|ABC)
opt_type=1
;;
2|def|DEF)
opt_type=2
;;
3|hij|HIJ)
opt_type=3
;;
4|exit|Exit) echo "Exiting ..."
;;
*) echo "Please enter a valid entry. Exiting!!"
;;
esac
}
echo $opt_type
+0
感谢您立即回复。这样可行。 – itsh 2013-02-22 18:46:37
答
你应该加倍分号:
case $opt_input in
1|abc|ABC)
opt_type=1;;
2|def|DEF)
opt_type=2;;
3|hij|HIJ)
opt_type=3;;
4|exit|Exit)
echo "Exiting ...";;
*)
echo "Please enter a valid entry. Exiting!!";;
esac
+0
太迟了=) – 2013-02-22 18:40:34
答
在bash,你需要两个分号每种情况下在后你的病例陈述。我也将这个case语句从函数中取出,因为函数从来没有被调用过。以下工作如预期
#!/bin/bash
opt_type=0
echo "Opt Porvisioning tool starting..."
echo -e "1. ABC \n2. DEF \n3. HIJ \n"
read opt_input
case $opt_input in
1|abc|ABC) opt_type=1;;
2|def|DEF) opt_type=2;;
3|hij|HIJ) opt_type=3;;
4|exit|Exit) echo "Exiting ...";;
*) echo "Please enter a valid entry. Exiting!!";;
esac
echo $opt_type
除了缺乏;;终结者,你期望“1”匹配'1 | abc | ABC)'?它不会。 – William 2013-02-22 18:42:55
我力图匹配“1”。但只是出于好奇,我想看看我是否可以通过使用反斜杠(转义字符)或如果有任何其他方式来匹配“1.”? – itsh 2013-02-26 20:47:04
只要'1. | abc | ABC)'应该这样做,你不需要逃跑'。'因为这个案例陈述并不特别。它不是一个正则表达式,它使用文件元字符。顺便说一句,如果你的数据看起来像“AbC”,你可以用:1. | [aA] [bB] [cC])(丑陋,但对于短字符串至少有效)。 – William 2013-02-26 22:18:49