我正在使用下面的shell脚本进行测试:
#!/bin/ksh -x
instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi
它在if条件中给出了这个错误:
: ==: unknown test operator
==
真的不是正确的语法吗?
我正在命令行上运行,如下所示
test_lsn_2 INSTANCE=ALL
有人可以建议一个解决方案。 感谢。
答案 0 :(得分:16)
要比较字符串,您需要单个=,而不是双倍。如果字符串为空,你应该把它放在双引号中:
if [ "$instance" = "ALL" ]
then
echo "strings matched \n"
fi
答案 1 :(得分:6)
我看到你正在使用ksh,但你添加了bash作为标签,你接受与bash相关的答案吗? 使用bash,您可以通过以下方式实现:
if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]
有关详情,请参阅here。
答案 2 :(得分:4)
尝试
if [ "$instance" = "ALL" ]; then
有几个错误:
你需要在变量周围加上双引号以防止(不太可能)它是空的情况。在这种情况下,shell会看到if [ = "ALL" ]; then
无效。
shell中的等号使用单个=
(无法在shell中的if
中分配值。)
答案 3 :(得分:2)
totest=$1
case "$totest" in
"ALL" ) echo "ok" ;;
* ) echo "not ok" ;;
esac
答案 4 :(得分:0)
我已经回答了类似的问题。基本上,您需要的运算符是=
(不是==
),如果您的变量为空(即它变为if [ = ALL]
),语法就会中断。有关详细信息,请查看the other answer。