ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## getopt - 支持长参数 ## 语法 ``` -o,--options 如"ab:c::",表示可接受的短选项为-a -b -c, -a选项不接参数 -b选项后必须接参数 -c选项的参数为可选的 -l,--long 可接受的长选项,用逗号分开,冒号的意义同短选项 -n 选项后接选项解析错误时提示的脚本名字 ``` 实例: ``` // 声明 -a -o为短连接参数, --arg,--options 为长连接参数 ARGS=`getopt -o ab:c:: --long along,blong:,clong:: -n "$0" -- "$@"` #将规范化后的命令行参数分配至位置参数($1,$2,...) eval set -- "${ARGS}" ``` ## 实例 <details> <summary>test.sh</summary> ``` #!/bin/bash ARGS=`getopt -o ab:c:: --long along,blong:,clong:: -n "$0" -- "$@"` # 检测是否有未知参数,在-n 的提示后,执行 if [ $? != 0 ]; then echo "Terminating..." exit 1 fi #将规范化后的命令行参数分配至位置参数($1,$2,...) eval set -- "${ARGS}" while true do case "$1" in -a|--along) echo "Option a"; shift ;; -b|--blong) echo "Option b, argument $2"; shift 2 ;; -c|--clong) case "$2" in "") echo "Option c, no argument"; shift 2 ;; *) echo "Option c, argument $2"; shift 2; ;; esac ;; --) shift break ;; *) echo "Internal error!" exit 1 ;; esac done ``` </details> <br/> ### 错误提示 ``` > ./test.sh -f ./test.sh: invalid option -- 'f' Terminating... ``` ### 短选项不带参数 ``` > ./test.sh -a Option a ``` 测试带参数的选项,并不会报错 ``` ./test.sh -a asd Option a ``` ### 短选项带参数 测试必须带参数的值 ``` > ./test.sh -b abc Option b, argument abc ``` 不带参数,则报错 ``` > ./test.sh -b ./test.sh: option requires an argument -- 'b' Terminating... ``` ### 短选项带可选参数 带参数 ``` > ./test.sh -c Option c, no argument ``` 不带参数 ``` > ./test.sh -c abc Option c, no argument ``` ### 长选项带可选参数 ``` > ./test.sh -clong abc Option c, argument long ```