shell之getopts

细则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/bash
if [[ $# -lt 1 ]];then
    echo "USAGE:`basename $0` [-a] [-b value] [-c]"
    exit 1
fi  
 
while getopts :ab:c name
do
    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
        ;;
    esac
done
echo $bval


注意

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值