shell技巧之使用getopts

发布时间:2019-11-26编辑:脚本学堂
我们在写sh的脚本时,常常需要在运行时输入一些数据。大家可能已经了解过如何使用基本的$*,执行的情况,大概就是$0 $1 $2 $3…… 那么,那些系统命令里的参数又是如何做出来的呢?

我们在写sh的脚本时,常常需要在运行时输入一些数据。
大家可能已经了解过如何使用基本的$*,执行的情况,大概就是$0 $1 $2 $3……
那么,那些系统命令里的参数又是如何做出来的呢?
我们如何在自己的脚本中实现$0-$1的效果呢?这就是getopts的作用了。

来看一个例子:
 

复制代码 代码如下:
#!/bin/bash
echo "OPTIND starts at $OPTIND"
while getopts ":pq:" optname
do
    case "$optname" in
    "p")
        echo "Option $optname is specified"
        ;;
    "q")
        echo "Option $optname has value $OPTARG"
        ;;
    "?")
        echo "Unknown option $OPTARG"
        ;;
    ":")
        echo "No argument value for option $OPTARG"
        ;;
    *)
        # Should not occur
        echo "Unknown error while processing options"
        ;;
    esac
    echo "OPTIND is now $OPTIND"
done

注解:
在使用getopts命令时,shell会自动产生两个变量 OPTIND 和 OPTARG。
I)、OPTIND初始值为1,其含义是下一个待处理的参数的索引。
只要存在,getopts命令返回true,所以一般getopts命令使用while循环;

II)、OPTARG是当getopts获取到其期望的参数后存入的位置。而如果不在其期望内,则$optname被设为?并将该意外值存入OPTARG;
如果$optname需要拥有具体设置值而实际却没有,则$optname被设为:并将丢失设置值的optname存入OPTARG;
对于$optname,可以用后标:来表示是否需要值;而前标:则表示是否开启静默模式。
 

您可能感兴趣的文章:
学习shell中的getopts
getopts 获取 处理 命令行选项
linux shell中的比较符号与特殊符号
linux shell 特殊字符 大全
linux shell变量$#,$@,$0,$1,$2的解释
shell IFS变量和$* shell中“$”变量中文说明
shell变量$#,$@,$0,$1,$2详解