我有一个包含以下“if”语句的bash脚本。 问题是我不能让它在Debian上运行(它在Fedora和CentOS上运行良好)。
if [ $1 == "--daily" ] # <--- line 116 then countDaily elif [ $1 == "--monthly" ] # <--- line 119 then countMonthly fi
运行后:
sh /home/kris/countsc.sh --daily
我收到一个错误:
/home/kris/countsc.sh: 116: [: --daily: unexpected operator /home/kris/countsc.sh: 119: [: --daily: unexpected operator
既然你使用的是sh
,而不是bash,你应该用一个equal =
来做字符串比较,而不是double equal ==
。 在测试语句中双引号变量也是一个好习惯(这个错误不是由不正确的引用引起的)。
比较应该是:
if [ "$1" = "--daily" ]
和
elif [ "$1" = "--monthly" ]
据我所知,在test
没有双等号运算符,在这种情况下使用。 如果你想测试字符串相等性,只需使用一个等号,如下所示:
if [ $1 = "--daily" ] elif [ $1 = "--monthly" ]
你还应该记得把$1
换成引号,以防包含空格。
你也可以考虑在Bash中使用“新测试”指令,例如[[
和对应的]]
,它比[
这是从sh时代剩下的许多优点。 看看这个文件,以了解其优点。