Bash Shell统计参数数量,你想知道调用脚本时使用了多少个参数。
解决方案
使用 shell 内建变量 $#
。下例展示了一个严格要求 3 个参数的脚本。
#!/usr/bin/env bash
# 实例文件:check_arg_count
#
# 检查正确的参数数量:
# 使用下列语法或者:if [ $# -lt 3 ]
if (( $# < 3 ))
then
printf "%b" "Error. Not enough arguments.\n" >&2
printf "%b" "usage: myscript file1 op file2\n" >&2
exit 1
elif (( $# > 3 ))
then
printf "%b" "Error. Too many arguments.\n" >&2
printf "%b" "usage: myscript file1 op file2\n" >&2
exit 2
else
printf "%b" "Argument count correct. Proceeding...\n"
fi
以下分别是参数过多和参数数量正好时的运行情况。
$ ./myscript myfile is copied into yourfile
Error. Too many arguments.
usage: myscript file1 op file2
$ ./myscript myfile copy yourfile
Argument count correct. Proceeding...
讨论
在开头的注释(在脚本中坚持这么做总是件好事)之后,我们用 if 测试所提供的参数数量(保存在 $#
中)是否大于 3。如果答案是肯定的,则输出一条错误信息,提醒用户正确的脚本用法,然后退出。
错误信息会被重定向到标准错误。这种做法符合标准错误的本意:作为所有错误信息的通道。
该脚本还会根据检测到的错误返回不同的值。尽管这里没什么意义,但对于可能会被其他脚本调用的脚本而言,还是有用处的,这样就拥有了一种程序化的方法,不仅能够检测故障(非 0 的退出值),还可以区分不同的错误类型。
注意,别仅仅因为 {#}、{#VAR}、${VAR#alt}
都在花括号里用到了#
,就把三者搞混了。第一种语法可以获得参数的数量,第二种语法可以获得变量 VAR 所保存值的长度,最后一种语法会执行某种替换操作。
酷客网相关文章:
评论前必须登录!
注册