"如果"声明无法在Debian Linux上运行

时间:2013-09-16 12:34:20

标签: linux sh

我有一个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

2 个答案:

答案 0 :(得分:5)

由于您使用的是sh而不是bash,因此您应该使用单个=进行字符串比较,而不是使用双等==。另外,在测试语句中双引号变量是一个好习惯(但这个错误不是由不正确的引用引起的)。

比较应该是:

if [ "$1" = "--daily" ]

elif [ "$1" = "--monthly" ]

答案 1 :(得分:2)

据我所知,test中没有双等运算符,在这种情况下使用。如果要测试字符串相等性,只需使用单个等号,如下所示:

if [ $1 = "--daily" ]
elif [ $1 = "--monthly" ]

您还应该记住将$1包装成引号,以防它包含空格。

您可能还想考虑在Bash中使用“新测试”指令,例如[[和相应的]],与[相比具有许多优势,这是sh时代的遗留物。查看this文档,了解优势。