シェルスクリプトに渡されたすべてのパラメータがファイルであることを確認する方法は?$@
パラメータと-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
...しかし、人々は二重引用符を忘れる傾向があり、$@
とにかく上部のループは短いです。