[-r]を使ってファイルを読み込む方法を理解します。しかし、複数のファイルを入力として受け入れて確認するスクリプトはどうなりますか?
私が入るとしましょう。
./checkfile hi hello world
スクリプトは以下を返す必要があります。
hi is readable
hello is readable
world is not readable
summary: 2 of 3 files are readable
答え1
#! /bin/sh -
n=0
for file do
if [ -r "$file" ]; then
printf '"%s" is readable\n' "$file"
n=$((n + 1))
else
printf '"%s" is not readable\n' "$file"
fi
done
echo "$n out of $# files were readable"
[ -r file ]
file
コマンドを呼び出すプロセス(通常はシステムコールを使用)を[
ユーザー(スクリプトを実行しているユーザー)が読み取ることができるかどうかをテストしますaccess()
。
他のユーザーが読めるかどうかは言及されていません。それを読もうとはしません。たとえば、プライマリストアの欠陥のために読み取れないファイルは検出できません。
答え2
$@
配列と同じ構造でスクリプトに渡されたすべての引数(位置引数)を格納する特殊変数です。
$1, $2, $3, ... are the positional parameters.
"$@" is an array-like construct of all positional parameters, {$1, $2, $3 ...}.
これについて詳しくは、次をご覧ください。バッシュリファレンスマニュアル