2012-01-10 5 views
1

はここに私の文の場合と間違っ:いただきましシェルスクリプト内のステートメント

print "Ss $# $2" >&3 
if [ $# -eq 4 || $# -eq 3 ] && [ $2 != "d" ] 
then 
     print "sss" 
else 
     print "lol" 
fi 

出力は次のようになります。

Ss 4 s 
lol 

はなぜ "SSS" が表示されていませんか?

+1

あなたはどちらのシェルを使用していますか? – Sjoerd

+0

kshシェル私は – footy

答えて

4

if-conditionは構文的に正しくありません。角括弧の中に||を含めることはできません。代わりに-oを使用するように変更します。

if [ $# -eq 4 -o $# -eq 3 ] && [ $2 != "d" ] 
then 
     print "sss" 
else 
     print "lol" 
fi 

または、より良い、(あなたのシェルがサポートしている場合)[[を使用する方が安全であるとより多くの機能を有しています。それは||をサポートします:

if [[ ($# -eq 4 || $# -eq 3) && $2 != "d" ]] 
then 
     print "sss" 
else 
     print "lol" 
fi 
+1

+1を使って '[[' ' –

関連する問題