shell 之 getopts

shell中getopts用于获取用户在命令下的参数,然后根据参数进行不同的执行。

getopts配合case进行操作时有两个隐含变量:一个是OPTARG,用来取当前选项的值;另外一个是OPTIND,代表当前选项在参数列表中的位移,OPTIND是一个特殊的变量,它的初始值是1,每次getopts处理完一个命令参数后就递增它,得到getopts要处理的下一个参数。

通过一个例子说明其使用方法:

while getopts 'd:Dm:f:t:' OPT
do
    case $OPT in
        d) 
          DEL_DAYS="$OPTARG"
          ;;
        D)
          DEL_ORIGINAL='yes'
          ;;
        f) 
          DIR_FROM="$OPTARG"
          ;;
        m) 
          MAILDIR_NAME="$OPTARG"
          ;;
        t) 
          DIR_TO="$OPTARG"
          ;;
        ?) 
          echo "unkonw argument"
          exit 1
          ;;
    esac
done
shift $(($OPTIND - 1))
  • getopts后面的每个字母代表一个选项,后面带:的意味着选项除了定义本身之外,还会带上一个参数作为选项的值,比如d:在实际的使用中就会对应-d 20,选项的值就是20;
  • getopts字符串中没有跟随:的是开关型选项,不需要指定值,相当于true/false,只要带了这个参数就是true;
  • 如果命令行中包含了没有在getopts列表中的选项,会有警告信息;
  • 如果在整个getopts字符串前面也加上个:,就能消除警告信息了。
  • case中的最后一个选择?,代表如果出现了不认识的选项所进行的操作
  • getopts在处理参数的时候,处理一个开关型选项,OPTIND加1,处理一个带值的选项参数,OPTIND则会加2;选项参数识别完成之后,如果要取剩余的其它命令行参数,可以使用shift把选项参数抹去,在例子中,对整个参数列表进行左移操作,最左边的参数就丢失了,位移的长度正好是刚才case循环完毕之后的OPTIND - 1,因为参数从1开始编号,选项处理完毕之后,正好指向剩余其它参数的第一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值