shell getopts

 

用getopts命令获取到脚本选项后,getopts会将获取到的选项所对应的参数(选项对应的参数,并不是选项本身,有的命令选项后面是需要跟一个参数的,例如tcpdump 的-w选项,后面需要指定一个文件来保存抓包数据)自动保存到OPTARG这个变量中。

getopts命令格式:getopts   OPTSTRING  VARNAME   

OPTSTRING:告诉getopts会有哪些选项和参数(用选项后面加“:”来表示选项后面需要加参数)

VARNAME:保存getopts获取到的选项

复制代码
#!/bin/env sh

function Usage(){
        echo -e "\e[1;31;47mUsage: $0 [-a] [-b <arg>] [-c]\e[0m"
        return 0
}

while getopts :ab:c opt
do
        case "$opt" in
        a)
                echo "Found -$opt option!"
                ;;
        b)
                echo "Found -$opt option!,with parameter value $OPTARG!"
                ;;
        c)
                echo "Found -$opt option!"
                ;;
        :)     # 没有选项参数时,opt置为 : ,OPTARG变成选项
                echo "Option -$OPTARG need parameter!"
                Usage
                ;;
        ?)     # 没有该选项是,opt置为 ? ,OPTARG变成选项 
          echo
"Option -$OPTARG invalid" Usage ;; *) echo "Unknow option: -$OPTARG" ;; esac done echo $*
复制代码

 

复制代码
#!/bin/env sh

status=off
filename=''
output=''

function usage(){
    echo -e "\e[1;31;47mUsage: $0 [-h] [-v] [-f <filename>] [-o <filename>]\e[0m"
#    exit -1
}

while getopts ':hvf:o:' var
do
    case $var in
    h)
        echo $var
        usage
        exit -1
        ;;
    v)
        echo $var
        status=on
        echo $status
    #    exit -1
        ;;
    f)
        echo $var
        echo $OPTARG
        filename=$OPTARG
        if [ ! -f $filename ];then
            echo "the source file $filename not exists nor $filename is not regular file!"
        #    exit -1
        fi
        ;;
    o)
        echo $var
        echo $OPTARG
        output=$OPTARG
        if [ ! -d $output ];then
            echo "the output path $output not exists!"
        #    exit -1
        fi
        ;;
    :)
        echo $var
        echo "the option -$OPTARG require an arguement"
        usage
    #    exit 2
        ;;
    ?)
        echo $var
        echo "Invaild option: -$OPTAGR"
        usage
    #    exit 2
        ;;
    *)
        echo default
        usage
    #    exit 3
        ;;
    esac
done

echo after circulation
复制代码

 

posted @   ascertain  阅读(169)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示