bash - 如何测试作为参数给出的文件是否存在?

标签 bash while-loop arguments

我正在制作一个 bash 脚本,您必须提供 2 个或更多文件作为参数。
我想测试给定的文件是否存在。我正在使用 while 循环,因为我不知道给出了多少个文件。问题在于 if 语句将 $t 视为数字,而不是位置参数 $number。有人有解决办法吗?

t=1
max=$#
while [ $t -le $max ]; do

    if [ ! -f $t ]; then
            echo "findmagic.sh: $t is not a regular file"
            echo "Usage: findmagic.sh file file ...."
            exit
    fi

    t=`expr $t + 1`
done

最佳答案

您可以使用bash Special parameter @ 来做到这一点这样:

script_name=${0##*/}
for t in "$@"; do
    if [ ! -f "$t" ]; then
        echo "$script_name: $t is not a regular file"
        echo "Usage: $script_name file file ...."
        exit 1
    fi
done

"$@"您正在扩展位置参数,从 one 作为单独的单词(您的参数)开始。


此外,请记住提供有意义的退出状态(例如 exit 1 而不是单独的 exit)。如果未提供,则退出状态是最后执行的命令的状态(在您的情况下为 echo ,该命令成功,因此您使用 0 exit )。

最后,您可以在脚本的开头设置一个变量,而不是编写脚本名称(在您的情况下为 findmagic.sh):

script_name=${0##*/}

然后使用 $script_name必要时。这样,如果脚本更改了名称,您无需更新脚本。

关于bash - 如何测试作为参数给出的文件是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204192/

相关文章:

linux - 这个基于 RANDOM 的命令在 bash 中意味着什么?

matlab - 在 Matlab 中传递参数

c++ - 将任何泛型函数作为 C++ 参数传递

Bash 验证和条件语句

基于用户选择的 Linux 变量

html - sed HTML </>标签

python - 使用 argparse 创建自定义命令行格式

python - 存储每次迭代的值 Numpy Python

php - while 和 foreach 正确的 php

r - R中的谐波级数和函数