首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查是否所有参数都是文件?

如何检查是否所有参数都是文件?
EN

Unix & Linux用户
提问于 2020-04-13 14:34:47
回答 1查看 1.9K关注 0票数 3

如何检查传递给shell脚本的所有参数是否都是文件?我尝试将$@参数和-fif语句一起使用。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-04-13 14:41:42

要测试是否所有参数都是文件,更容易测试其中一个参数是否不是文件:

代码语言:javascript
运行
复制
for argument do
    if [ ! -f "$argument" ]; then
        printf 'Not a file: %s\n' "$argument" >&2
        exit 1
    fi
done

echo 'All arguments are files'

这将遍历所有位置参数,并依次测试每个参数。如果找到非文件,则打印错误并终止代码。

调查所有论点:

代码语言:javascript
运行
复制
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“实际上意味着”是常规文件,或者是普通文件的符号链接“。如果要确保它不是普通文件的符号链接,请使用

代码语言:javascript
运行
复制
if [ ! -f "$argument" ] || [ -L "$argument" ]; then

作为第一个循环中的测试,或者

代码语言:javascript
运行
复制
if [ -f "$argument" ] && [ ! -L "$argument" ]; then

作为第二个循环中的测试。

循环的第一行也可以编写。

代码语言:javascript
运行
复制
for argument in "$@"; do

..。但人们往往忘记双引号$@,在顶部的循环更短,无论如何键入。

票数 7
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/579793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档