getopts

 

复制代码
#!/usr/bin/env bash

#while getopts a:b name; do
#    echo name: "$name", OPTARG: "$OPTARG", OPTIND: $OPTIND, OPTERR: "$OPTERR"
#done

echo "$*"
echo "$@"

status=off
filename=
output=

usage() {
    echo Usage:
    echo "$0 [-h] [-v] [-f <filename>] [-o <filename>]"
    exit 0
}

while getopts :hvf:o: name; do
    case "$name" in
    h)
        echo name: "$name", OPTARG: "$OPTARG", OPTIND: $OPTIND, OPTERR: "$OPTERR"
        usage
        ;;
    v)
        echo name: "$name", OPTARG: "$OPTARG", OPTIND: $OPTIND, OPTERR: "$OPTERR"
        status=on
        ;;
    f)
        echo name: "$name", OPTARG: "$OPTARG", OPTIND: $OPTIND, OPTERR: "$OPTERR"
        filename="$OPTARG"
        if [ ! -f "$filename" ]; then
            echo filename: "$filename" does not exist
            exit 5
        fi
        ;;
    o)
        echo name: "$name", OPTARG: "$OPTARG", OPTIND: $OPTIND, OPTERR: "$OPTERR"
        output="$OPTARG"
        if [ ! -f "$output" ]; then
            echo output: "$output" does not exist
            exit 5
        fi
        ;;
    '?')  # ? have to be quoted, because it's a wildcard, or \?
        echo name: "$name", OPTARG: "$OPTARG", OPTIND: $OPTIND, OPTERR: "$OPTERR"
        echo invalid option -"$OPTARG"
        exit 6
        ;;
    :)
        echo name: "$name", OPTARG: "$OPTARG", OPTIND: $OPTIND, OPTERR: "$OPTERR"
        echo option -"$OPTARG" require a argument
        exit 7
        ;;
    esac
done

echo status: $status, filename: "$filename", output: "$output",
复制代码

 

posted @   ascertain  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-11-09 强制删除Windows文件夹
2020-11-09 Cygwin Windows下的Linux终端模拟器
2020-11-09 mysql中utf8和utf8mb4区别
2020-11-09 MySQL char varchar
2020-11-09 mysql SQL
2020-11-09 WSGI python
点击右上角即可分享
微信分享提示