コマンドでカスタム変数を使用する場合の条件の作成方法

コマンドでカスタム変数を使用する場合の条件の作成方法

2つの変数でユーザーから入力を受け取るスクリプトがあります。次に、ifの条件に入力されたコマンドでこれらの変数を使用しようとします。しかし、ユーザー入力値が私の変数を置き換えないため、私のコマンドは機能しません。

# Get acl and dc values
echo "Type the ACL name:"
read acl
echo "Type the DATACENTER name"
read dc
# see if sw-list-cisco file exists in ~/$acl directory"
if [ ` ls -1 ~/$acl/sw-list-cisco > /dev/null | wc -l ` -gt 0 ];
then
    echo "Going to do something"
else
     echo "no match !!!!!!!!!!!!!"
fi

条件 このif [ ` ls -1 ~/"$acl"/sw-list-cisco > /dev/null | wc -l ` -gt 0 ];$acl をユーザー入力値に置き換えないようです。sw-list-ciscoディレクトリに存在するかどうかを手動で確認しました~/$acl。私は何を見逃していますか?

答え1

解析が必要な場合はほとんどありません。ls

この場合、次のようにしてこれを行うことができます。

if [ -f "$HOME/$acl/sw-list-cisco" ]; then

-f指定された名前が存在し、通常のファイルの名前であるかどうかをテストするためにテストを使用しています。$HOME代わりに使用しています~~引用符内の変数ではありません(もう少し$HOME説明すると、IMHO)。

答え2

if [ ` ls -1 ~/$acl/sw-list-cisco > /dev/null | wc -l ` -gt 0 ];

ls/dev/null何も起こらないように出力をにリダイレクトし、wc常に印刷します0。手動で試してls / >/dev/null | wc -lls / | wc -l同じです。

リダイレクトしたい場合もあります。間違いからにls変更/dev/null

if [ $(ls ~/"$acl/sw-list-cisco" 2>/dev/null | wc -l) -gt 0 ];

-1出力がパイプに入る場合は必要ありません。)

でもファイルなので[ -f ~/"$acl/sw-list-cisco" ]簡単にできます@Kusalanandaがすでに返信しました。。ファイル数を数えたい場合でも、globを配列に拡張して要素数を数えることをお勧めします。

関連情報