我正在制作一个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
答案 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
。这样,如果脚本更改了名称,则无需更新脚本。