2017-01-14 16 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ました。 私はスクリプトを実行する権限を持っています。私はプログラミングとLinuxを使用してbashを初めて使用しています。スクリプトを修正する方法を教えてください。

答えて

6

echo $1 < $2は、その名$2にあるファイルから入力を読み取るためにechoの原因となるリダイレクトです。 56というファイルが存在しないため、エラーが発生します。この問題を解決するには、引用符印刷する文字列:

echo "$1 < $2" 

編集はbashのの世界へようこそ!あなたが学んでいる間は、すべての変数の使用について二重引用符を使用することをお勧めします。これにより、いくつか頭痛を軽減することができます。後で引用符を使用しない場合の状況を知ることができます。例えば、this discussion at the bash-hackers wikiを参照してください。ハッピーハッキング!

+0

thanx @cxw、私はrandom.psで試して解決策を見つけることができました:今、私はかなりbashで良いです –

3

Bashは>を使用して、標準出力ストリームを(端末で出力するのではなく)ファイルにリダイレクトします。同様に、<を使用して、入力したもの(またはパイプ)からターミナルに入力するのではなく、ファイルから標準入力を取得します。

この特別な扱いを避けるために引用符を使用してください。

echo "$1 < $2" 

をしたり、3つの引数渡すことができます:

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

では、あなたがcxw suggestedとして、echoに1つの引数として全体の出力を渡すことができるように変数置換は、あまりにも、二重引用符で囲まれた文字列に対して実行されます単一引用符で囲まれた文字列は、何の変数置換は行われませんので、予想通り

echo '$1 < $2' 

は動作しないでしょうし、文字通りの代わりに出力

変数の内容によって、変数名を交換せずに$ 1 < $

2。

関連する問題