すべてのパラメータがファイルであることを確認する方法は?

すべてのパラメータがファイルであることを確認する方法は?

シェルスクリプトに渡されたすべてのパラメータがファイルであることを確認する方法は?$@パラメータと-fステートメントを試してみましたif

答え1

テストするかどうかみんなパラメータはファイルなので、パラメータの1つがファイルかどうかをテストする方が簡単です。いいえ文書1:

for argument do
    if [ ! -f "$argument" ]; then
        printf 'Not a file: %s\n' "$argument" >&2
        exit 1
    fi
done

echo 'All arguments are files'

これはすべての位置パラメータを繰り返し、それぞれを順番にテストします。ファイルでないものが見つかると、エラーが出力され、コードが終了します。

すべてのパラメーターを調べるには、次のようにします。

for argument do
    if [ -f "$argument" ]; then
        printf 'Is a file: %s\n' "$argument"
    else
        printf 'Is not a file: %s\n' "$argument"
    fi
done

これはすべての位置パラメータを繰り返し、それぞれテストしてテスト結果を印刷します。

注「ファイルです」実際にこれは、「一般ファイルまたは一般ファイルへのシンボリックリンク」を意味します。一般ファイルへのシンボリックリンクではないことを確認するには、次のようにします。

if [ ! -f "$argument" ] || [ -L "$argument" ]; then

最初のループのテストとして、または

if [ -f "$argument" ] && [ ! -L "$argument" ]; then

2番目のループのテストです。

ループの最初の行は次のように書くこともできます。

for argument in "$@"; do

...しかし、人々は二重引用符を忘れる傾向があり、$@とにかく上部のループは短いです。

関連情報