2011-10-27 11 views
1

最初のパラメータがある場合はそれを表示し、存在しない場合は "なし"を出力する単純なシェルスクリプトを作成しようとしています。スクリプトはtest.shと呼ばれます。単純なシェルスクリプトにパラメータを渡す際に問題が発生する

if [$1 = ""] 
    then 
     echo "none" 
    else 
     echo $1 
    fi 

パラメータなしでスクリプトを実行すると、すべてが動作します。しかし、このコマンドをsource test.sh -testに実行すると、このエラーが発生する-bash: [test: command not foundスクリプトが続行され、正しくエコーテストが行​​われる前にエラーが発生します。私は間違って何をしていますか?

答えて

7

あなたはすなわち

if [ "$1" = "" ] ; then 
#---^---------^ here 
    echo "none" 
else 
    echo "$1" 
fi 

「[」、「]」文字の後/前にスペースを必要とするそして、あなたは上記の編集したとして引用符で$ 1(実際にはすべての参照)あなたの参照をラップする必要があります。

あなたは、あなたもあなたのスクリプトへの相対パスを与える必要があるかもしれないことを修正した後、すなわち

source ./test.sh -test 
#------^^--- there 

あなたはシェルのエラーメッセージは、あなたがここに持っている得るとき、それはほとんど常にシェルをオンにするのに役立ちます問題の原因となっている行の前にset -vxでデバッグしてください。次に、実行中のコードの各行/ブロック、およびシェルが使用している変数の値を見ることができます。

こちらがお役に立てば幸いです。

+0

の前にスペースが必要です。]] ' –

+0

@glennjackman:ありがとうございました! – shellter

+0

このスクリプトを使用すると、-bash:[:=:単項演算子が使用されます。 – Spencer

関連する問題