我正在制作一个 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/