2017-01-14 32 views
1

我的代碼是:

#!/bin/bash 
if [ $1 -gt $2 ];then 
    echo $1 > $2 
fi 
if [ $1 -eq $2 ];then 
    echo $1 = $2 
fi 
if [ $1 -lt $2 ];then 
    echo $1 < $2 
fi 

./script.sh 3 56執行腳本我得到的迴應是 ./script.sh: line 9: 56: No such file or directory。 我有權執行腳本。我是bash編程和使用linux的新手。請告訴我如何解決我的腳本。

回答

6

echo $1 < $2是導致echo從名稱爲$2的文件中讀取其輸入的重定向。由於名爲56的文件不存在,因此會出現錯誤。爲了解決這個問題,引用字符串打印:

echo "$1 < $2" 

編輯歡迎慶典的世界!在你學習的時候,我建議在變量的所有用途中使用雙引號。這將爲您節省一些頭痛,並且您可以在稍後不使用引號時瞭解情況。參見例如,this discussion at the bash-hackers wiki。快樂黑客!

+0

thanx @cxw,我設法通過嘗試random.ps找到解決方案:現在,我相當不錯,在bash –

3

Bash使用>將標準輸出流重定向到文件(而不是在終端中輸出)。同樣,它使用<從文件中獲取標準輸入,而不是從輸入(或管道)到終端中。

使用引用來避免這種特殊處理。變量替換是在雙引號中的字符串進行,所以你可以通過整個輸出的一個參數echo,爲cxw suggested

echo "$1 < $2" 

,或者您可以通過3個參數:

echo $1 "<" $2 
# or 
echo $1 '<' $2 

在單引號字符串,不執行變量替換,因此

echo '$1 < $2' 

將無法​​正常工作,而是直接輸出

$ 1 < $ 2

而不受變量的內容替換變量名。

相關問題