複数の条件を含むifステートメントを作成する方法

複数の条件を含むifステートメントを作成する方法
for filename in *
do
    if [ "$filename" -ne even ] && [ "$filename" -ne odd ]
    then
        echo "$filename"
    fi
done

上記は、現在のリポジトリのファイルをチェックし、「even」と「odd」以外の名前のファイルを出力する単純なシェルスクリプトです。

動作しません

ベストアンサー1

比較演算子-ne山水演算子をテストします。つまり、整数のみを比較します。

i=7

if [ "$i" -ne 6 ] && [ "$i" -ne 8 ]; then
   echo 'i is neither 6 nor 8'
fi

比較するひも不平等の場合は、以下を使用してください!=

if [ "$filename" != 'even' ] && [ "$filename" != 'odd' ]; then
    printf '"%s" is neither of the strings "even" or "odd"\n' "$filename"
fi

または以下を使用してくださいcase

case "$filename" in
    even|odd)
        # the filename is "even" or "odd"
        ;;
           *)
        # the filename is neither "even" nor "odd"
        printf '%s\n' "$filename"
esac

また、*通常のファイル名だけでなく、現在のディレクトリのすべての名前とも一致します。ループ内の通常のファイルのみを処理するには、次を使用します。

for name in *; do
    if [ ! -f "$name" ] || [ -L "$name" ]; then continue; fi

    # other code here using "$name"
done

このcontinue文はループの次の反復にジャンプします。-f file調査する定期的な文書後ろにシンボリックリンクの確認で次の種類のファイルが必要な場合シンボリックリンク通常のファイルを指すかどうかに関係なく除外するには、追加します|| [ -L "$name" ]

おすすめ記事