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

时间:2014-11-29 16:05:38

标签: 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

1 个答案:

答案 0 :(得分:3)

您可以通过以下方式使用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

使用"$@"扩展位置参数,从一个开始作为单独的单词(您的参数)。


此外,请记住提供有意义的退出状态(例如exit 1而不是exit。如果没有提供,则退出状态是执行的最后一个命令的状态(echo在你的情况下,这是成功的,所以你exit使用 0 )。

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

script_name=${0##*/}

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