2016-07-30 10 views
0

私は引数の数が1であるかどうかを確認しようとしていると私は以前に私のスクリプトに書いた関数が真のですが、あればそれは動作しません:バッシュ複数のIfステートメントでの条件と機能

if [ $# -eq 1 && echo "$1" | lgt && echo "Invalid Length - $1" && echo "$1" | checking_another_function_etc ]; then 
echo "some output" && exit 1 

"lgt"は関数名です。

私は([[[引用符で囲まれた複数のif文が動作しませんでしたが、引用符付きの引数チェックと関数の数を分ける必要があるかもしれませんが、 if状態にechoコマンドを渡すことも可能であるならば、それは。私は思ったんだけど。

を事は、私はすべての機能を確認した後、1つのecho文を必要とするが、各関数の後、私は独自のecho文が必要です。

答えて

3

[は通常のコマンドです(testとも書かれています); /]ペアは単にコマンドリストを囲むことはできません。 [によって評価されるのは-eqの式のみです。他はシェル&&によって結合された別々のコマンドです。

if [ $# -eq 1 ] && 
    echo "$1" | lgt && 
    echo "Invalid Length - $1" && 
    echo "$1" | checking_another_function_etc; then 
    echo "some output" && exit 1 
fi 

コマンドの可能な分離は、あなたが期待するものを提供することがあります。

if [ $# -ne 1 ]; then 
    echo "Wrong number of arguments" 
    exit 1 
elif ! echo "$1" | lgt; then 
    echo "Invalid length: $1" 
    exit 1 
elif echo "$1" | checking_another_function_etc; then 
    echo "some output" 
    exit 1 
fi 

その終了ステータスが常にあるので、echoコマンド&&オペレータのLHSを作ることがまれに有用です0

+0

すべての機能の後にすべての出力が表示されますが、それでも条件の後に出力が表示されません(後で; then) – Josh

+1

@Joshこの回答はco正しく質問の内容を有効なシェルコードに翻訳しました。しかし、質問は、これがあなたが望むものかどうかを判断するのに十分な情報を提供していません。 – John1024

+0

'checking_another_function_etc'の終了ステータス(期待値と実際の値)は何ですか? – chepner

関連する問題