6

我正在使用下面的 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

任何人都可以提出一个解决方案。谢谢。

4

5 回答 5

17

要比较字符串,您需要一个 =,而不是双精度。如果字符串为空,您应该将其放在双引号中:

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi
于 2009-11-02T10:48:48.643 回答
6

我看到您使用的是 ksh,但是您添加了 bash 作为标签,您接受与 bash 相关的答案吗?使用 bash 您可以通过以下方式进行操作:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

有关更多信息,请参见此处

于 2009-11-02T10:47:00.673 回答
4

尝试

if [ "$instance" = "ALL" ]; then

有几个错误:

  1. 您需要在变量周围加上双引号,以防止(不太可能)它为空的情况。在这种情况下,shell 会看到if [ = "ALL" ]; then哪个无效。

  2. shell 中的 Equals 使用单个=(在 shell 中无法在 an 中赋值if)。

于 2009-11-02T10:54:27.623 回答
2
totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac
于 2009-11-02T10:39:17.870 回答
0

我已经回答了一个类似的问题。基本上,您需要的运算符是=(not ==),如果您的变量为空(即变为if [ = ALL]),则语法会中断。有关详细信息,请查看其他答案

于 2009-11-02T10:53:07.813 回答