我有一个bash脚本,其中包含以下“if”语句。问题是我无法在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
答案 0 :(得分:5)
由于您使用的是sh
而不是bash,因此您应该使用单个=
进行字符串比较,而不是使用双等==
。另外,在测试语句中双引号变量是一个好习惯(但这个错误不是由不正确的引用引起的)。
比较应该是:
if [ "$1" = "--daily" ]
和
elif [ "$1" = "--monthly" ]
答案 1 :(得分:2)
据我所知,test
中没有双等运算符,在这种情况下使用。如果要测试字符串相等性,只需使用单个等号,如下所示:
if [ $1 = "--daily" ]
elif [ $1 = "--monthly" ]
您还应该记住将$1
包装成引号,以防它包含空格。
您可能还想考虑在Bash中使用“新测试”指令,例如[[
和相应的]]
,与[
相比具有许多优势,这是sh时代的遗留物。查看this文档,了解优势。