Shell 判断语句出错 [: ==: unexpected operator

Posted 阿基米东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell 判断语句出错 [: ==: unexpected operator相关的知识,希望对你有一定的参考价值。

有时候,原来运行得好好的 shell 程序,换个平台就运行不了,例如下面 shell 程序。

#!/bin/sh

if [ $1 == "hello" ]; then
    echo "Well done!"
fi

在 Ubuntu 上运行,会出现如下的错误:

[: ==: unexpected operator

这是因为 shell 脚本开头使用 #!/bin/sh,而不是 #!/bin/bash。而 /bin/sh 使用的是 dash,dash 中默认的判断语句是 =,而不是 bash 使用的 ==

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 528 20:16 /bin/sh -> dash

解决方法是直接使用 = 符号进行判断,但这样做可能会导致该脚本在其他平台无法正常运行(例如不支持 dash 的嵌入式平台)。为了更好地兼容,可以在 shell 脚本开头使用 #!/bin/bash,或者使用下面命令将系统默认的 shell 链接由 dash 改为 bash。

sudo dpkg-reconfigure dash

选择“否”即可。


以上是关于Shell 判断语句出错 [: ==: unexpected operator的主要内容,如果未能解决你的问题,请参考以下文章

linux shell编程 if判断语句的判定条件

shell里的exit 2是啥意思?

shell编程之 if 判断语句

PHP判断sql语句是不是执行成功

14Shell脚本—判断语句

Linux | shell脚本-条件判断if和循环语句for