2016-03-04 166 views
2

我所经历的老教程,我发现一个shell脚本: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 

当我存储在该外壳脚本test.sh并执行它。它给我以下输出

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

我不明白第一行的输出。如果有人能够说明发生了什么,我将不胜感激。

+1

互联网充满了无能的shell脚本教程。找到一个不同的。 Stack Overflow [bash tag wiki](http://stackoverflow.com/tags/bash/info)有一个阅读列表,但它可以理解为面向Bash,而不是'sh'。无论如何,许多事情都是一样的,一个好的教程应该解释这些差异,并教你可移植shell编程和Bash细节。 – tripleee

回答

2

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

您的示例展开为:if 10 -eq 20在这一点上bash会寻找一个名为10的程序,该程序明显不存在,因此会显示错误消息。

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

+2

当Bash试图执行一个不存在的程序时,它返回一个127的退出状态。与所有非零退出代码一样,这被shell认为是'false'。 –

+2

'如果'不期望测试;它只是期待一个有效的命令。 'test'(及其不幸的别名'''只是一个这样的有效命令,尽管OP想要的那个命令。 – chepner