2016-03-04 72 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