shell之getopts

来源:互联网 发布:sql语句视频教程 编辑:程序博客网 时间:2024/04/27 22:51
细则1:
当optstring以”:“开头时,getopts会区分invalid option错误和miss option argument错误,内置变量$OPTARG就是出问题的option
invalid option时,变量name会被设成?;
miss option argument时,变量name会被设成:;
如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使varname被设成?。

细则2:
当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中
如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option。
否则varname的值是?,$OPTARG是该option.(参照细则1)

#!/bin/bashif [[ $# -lt 1 ]];then    echo "USAGE:`basename $0` [-a] [-b value] [-c]"    exit 1fi   while getopts :ab:c namedo    case $name in        a)  aflag=1        echo "a"        ;;        b)  bflag=1        if [[ ${OPTARG:0:1} = "-" ]]; then            echo "invalid parameter of $OPTARG"            exit 1        fi        bval=$OPTARG        ;;        c)  cflag=1        echo "c"        ;;        \?) echo "Invalid option :`basename $0` [-a] [-b value] [-c]"        exit 1        ;;        :) echo "$0:Must supply an argument to -$OPTARG."        exit 1        ;;    esacdoneecho $bval


注意

1.如果你执行脚本时,后面什么参数都不带时,则不会进入到循环

while getopts :ab:c name
所以还是需要通过以下代码来警告

if [[ $# -lt 1 ]];then    echo "USAGE:`basename $0` [-a] [-b value] [-c]"    exit 1fi  

2.在getopts分析选项时,如果-b后面不带参数,直接跟-c的话,那么-c将作为-b的参数。