如何检查传递给shell脚本的所有参数是否都是文件?我尝试将$@
参数和-f
与if
语句一起使用。
发布于 2020-04-13 06:41:42
要测试是否所有参数都是文件,更容易测试其中一个参数是否不是文件:
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
这将遍历所有位置参数并依次测试每个参数,打印测试结果。
请注意,"is a file“实际上意味着”是常规文件,或者是普通文件的符号链接“。如果要确保它不是普通文件的符号链接,请使用
if [ ! -f "$argument" ] || [ -L "$argument" ]; then
作为第一个循环中的测试,或者
if [ -f "$argument" ] && [ ! -L "$argument" ]; then
作为第二个循环中的测试。
循环的第一行也可以编写。
for argument in "$@"; do
..。但人们往往忘记双引号$@
,在顶部的循环更短,无论如何键入。
https://unix.stackexchange.com/questions/579793
复制相似问题