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

任何人都可以建议解决方案。谢谢。

有帮助吗?

解决方案

我看到您正在使用KSH,但是您添加了Bash作为标签,您是否接受与BASH相关的答案?使用bash,您可以通过这些方式进行操作:

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

这里 有关此的更多信息。

其他提示

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

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

尝试

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

有几个错误:

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

  2. 在外壳中平等使用一个 = (没有办法分配一个值 if 在外壳中)。

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

我已经回答了一个类似的问题。基本上您需要的操作员是 = (不是 ==),如果您的变量为空,则语法会断开(即它变为 if [ = ALL])。看一下 另一个答案 有关详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top