为什么我在这个 bash 脚本中得到正确的结果和错误?

Ran*_*eer 1 scripting bash

我是 bash 脚本和学习“if then”语句的新手。当我运行下面的简单脚本时,它会执行并给出正确的结果,但是我仍然收到错误消息。脚本的名称是 testscript.sh。错误如下:“./testscript: line 5: [csh: command not found]”

有人能说出这是什么意思吗?

#! /bin/bash

MY_SHELL="csh"

If ["$MY_SHELL" = "bash"
then
    echo "You seem to like the bash shell."

else

    Then "You don't seem to like the bash shell."

fi
Run Code Online (Sandbox Code Playgroud)

Ste*_*ris 10

让我们逐行浏览一下:

#! /bin/bash

MY_SHELL="csh"
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。

If ["$MY_SHELL" = "bash"
Run Code Online (Sandbox Code Playgroud)

现在这一行有许多错误:

  1. ifIf-外壳的情况下如此灵敏fooFOO不同
  2. [字符后应该有一个空格
  3. 您需要]在测试结束时使用前面的空格。

这意味着该行应该更像 if [ "$MY_SHELL" = "bash" ]

then
    echo "You seem to like the bash shell."
else
Run Code Online (Sandbox Code Playgroud)

这些很好

    Then "You don't seem to like the bash shell."
Run Code Online (Sandbox Code Playgroud)

你想要echo这里。记住区分大小写。

fi
Run Code Online (Sandbox Code Playgroud)

结果:

#! /bin/bash

MY_SHELL="csh"

if [ "$MY_SHELL" = "bash" ]
then
    echo "You seem to like the bash shell."
else
    echo "You don't seem to like the bash shell."
fi
Run Code Online (Sandbox Code Playgroud)

编辑:一旦您对 shell 脚本更加熟悉,https://www.shellcheck.net/是一个用于验证内容的有用站点。错误输出并不总是很清楚,但它通常有助于指出错误!