Я понимаю, как читать один файл, используя [-r] Но как мне создать скрипт, который принимает множественный ввод файлов и проверяет?
Допустим, я набираю
./checkfile hi hello world
, скрипт должен вернуть:
hi is readable
hello is readable
world is not readable
summary: 2 of 3 files are readable
$@
- это специальная переменная, которая хранит все аргументы (позиционные параметры), переданные скрипту, в массивоподобной структуре.
$1, $2, $3, ... are the positional parameters.
"$@" is an array-like construct of all positional parameters, {$1, $2, $3 ...}.
Подробнее об этом в справочном руководстве по bash
#! /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]
проверяет, доступен ли файл
для чтения процессом, вызывающим этот [
, то есть вы, пользователь, запускающий этот сценарий, обычно использующий системный вызов access ()
.
Здесь ничего не говорится о том, смогут ли его прочитать другие пользователи. Он также не пытается это читать. Например, он не сможет обнаружить файлы, которые не читаются, потому что базовое хранилище неисправно.