Bash Shell统计参数数量

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 所保存值的长度,最后一种语法会执行某种替换操作。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!