2017-12-21 15 views
0

bashスクリプトを使用して、2つの特定のディレクトリに特定の数のファイルが含まれているかどうかを確認しています。 if文の中で行内でチェックすることは可能ですか?コマンドを実行してifステートメントで比較します

#!/bin/bash 

if [ [ls /path/to/dir1 | wc -l ] != 20 || [ ls /path/to/dir2 | wc -l ] != 50 ]; then 
    echo "do this!" 
elif 
    echo "do that!" 
fi 
+0

なぜ、2回目のテストでは、「20」ではなく「50」が使用されますか? – Barmar

答えて

2

構文が正しくありません。

if [[ $(ls /path/to/dir1 | wc -l) != 20 || $(ls /path/to/dir2 | wc -l) != 50 ]] 
then 
    echo "do this!" 
else 
    echo "do that!" 
fi 

(私は読みやすくするためthenの位置を移動させる)

に2角括弧で[[-oの代わりに「or」には||を使用できます。これは従来の言語に近いものです。厳密[[を言えばに一致パターンは、上記のコードは動作しますがので、算術テストが本当に((を使用する必要がない。

if (($(ls /path/to/dir1 | wc -l) != 20 || $(ls /path/to/dir2 | wc -l) != 50)) 
then 
    echo "do this!" 
else 
    echo "do that!" 
fi 

$()はサブシェルを実行し、出力を取り込みます。

2

正しいif構文:

if [ $(ls /path/to/dir1 | wc -l) -ne 20 -o $(ls /path/to/dir2 | wc -l) -ne 50 ]

しかし、あなたの例では、あなただけelifを使用しないでください。 else、またはelifのための条件を指定し、exmplのいずれかを使用します。

if [ $(ls /path/to/dir1 | wc -l) -ne 20 -o $(ls /path/to/dir2 | wc -l) -ne 50 ] 
then 
    echo "Do smth" 
elif [ $(ls /path/to/dir3 | wc -l) -ne 100 ] 
then 
    echo "Do anything else" 
fi 
関連する問題