问题:Ubuntu系统的默认shell比较字符串报错
系统版本如下:
从 /etc/issue 文件中查看系统版本:
$ cat /etc/issue
Ubuntu 20.04.4 LTS \n \l
问题复现
创建一个测试文件 test.sh ,其代码如下:
#!/bin/bash
if [ "$1" == "prod" ] ;then
echo "您输入是 prod ..."
elif [ "$1" == "dev" ] ;then
echo "您输入是 dev ..."
else
echo "您输入的我不认识!"
fi
使用 sh 命令执行会报错。
$ sh test.sh prod
test.sh: 4: [: prod: unexpected operator
test.sh: 6: [: prod: unexpected operator
您输入的我不认识!
使用 bash 命令执行正常。
$ bash test.sh prod
您输入是 prod ...
原因
Debian和Ubuntu 系统中,默认的 sh 命令指向的是 dash
命令,这个dash的语法和 bash 很不同。
$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 May 22 2020 /bin/sh -> dash
解决办法:
(1) 修改命令,将 Ubuntu 的 sh 的默认 dash 改成 bash。或者执行的时候指明是 bash 命令,不用 sh 命令。
(2) 修改代码,改成严格的 dash 代码。