Bash if或statement,命令未找到

时间:2017-09-21 22:21:22

标签: bash shell ubuntu

我遇到过这行shell脚本的问题:

if [ "$(lsb_release -r -s)" == "16.04" ] || [ "$(lsb_release -r -s)" == "17.04" ]; then

运行脚本时出现“[找不到命令”。我不明白为什么。

+ '[' -f /etc/debian_version ']'
++ lsb_release -r -s
+ '[' 17.04 == 16.04 ']'
++ lsb_release -r -s
+ ' [' 17.04 == 17.04 ']'
./mhn/scripts/install_mongo.sh: line 8:  [: command not found

如果在17.04而不是16.04上运行,我只会收到错误。如果我切换语句并首先检查17.04,它将在16.04而不是17.04中断。声明后半部分的内容正在破裂。

https://github.com/ngatilio/mhn/blob/2e992934a350e0367a214dc86cc63e7ecd5d59ef/scripts/install_mongo.sh

2 个答案:

答案 0 :(得分:3)

有你的问题:

+ ' [' 17.04 == 17.04 ']'

在最后[之前,你似乎有某种时髦的空格角色。删除并重新键入它以将其转换为常规的ascii空间。

当您在此处复制粘贴该行或通过非原始github视图查看该行时,它将被转换为常规空间,因此它不会出现在您的帖子中。这也是为什么它在复制粘贴到另一个文件时工作得很好。

这是从github下载(而不是复制粘贴)文件的ShellCheck:

$ shellcheck install_mongo.sh

In install_mongo.sh line 8:
    if [ "$(lsb_release -r -s)" == "16.04" ] || [ "$(lsb_release -r -s)" == "17.04" ]; then
                                               ^-- SC1018: This is a unicode non-breaking space. Delete and retype it.

答案 1 :(得分:0)

试试这个:

if [ "$(lsb_release -r -s)" == "16.04" -o "$(lsb_release -r -s)" == "17.04" ]; then