【问题标题】:Unexpected Output of Shell ScriptShell 脚本的意外输出
【发布时间】:2016-03-04 20:33:27
【问题描述】:

我在浏览旧教程时发现了一个 shell 脚本:

a=10
b=20
if  $a -eq $b 
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

当我将此 shell 脚本存储为 test.sh 并执行它时。它给了我下面的输出

test.sh: 3: test.sh: 10: not found
a is not equal to b

我不明白输出的第一行。如果有人能阐明正在发生的事情,我将不胜感激。

【问题讨论】:

  • 互联网上充斥着不称职的shell脚本教程。找一个不同的。 Stack Overflow bash tag wiki 有一个阅读列表,尽管它是面向 Bash 的,而不是 sh,这是可以理解的。无论如何,很多事情都是一样的,一个好的教程应该解释这些差异,并教你可移植的 shell 编程和 Bash 的细节。

标签: linux shell sh


【解决方案1】:

if 需要测试,如下所示:[ $a -eq $b ][[ $a -eq $b ]]

您的示例扩展为:if 10 -eq 20,此时 bash 会查找名为 10 的程序,该程序显然不存在,因此会出现错误消息。

一个缺失的程序显然评估为false,这会导致else 语句的执行。

【讨论】:

  • 当 Bash 试图执行一个不存在的程序时,它返回一个退出状态 127。像所有非零退出代码一样,这被 shell 认为是false
  • if 不期望测试;它只需要一个有效的命令。 test(及其不幸的别名[)就是这样一个有效的命令,尽管是 OP 想要的。
猜你喜欢
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多