Bash getopts:读取可选标志的$OPTARG?
发布时间:2020-12-15 18:51:39 所属栏目:安全 来源:网络整理
导读:我希望能够在我的脚本中接受强制和可选标志.这是我到目前为止. #!bin/bashwhile getopts ":a:b:cdef" opt; do case $opt in a ) APPLE="$OPTARG";; b ) BANANA="$OPTARG";; c ) CHERRY="$OPTARG";; d ) DFRUIT="$OPTARG";; e ) EGGPLANT="$OPTARG";; f ) FIG
我希望能够在我的脚本中接受强制和可选标志.这是我到目前为止.
#!bin/bash while getopts ":a:b:cdef" opt; do case $opt in a ) APPLE="$OPTARG";; b ) BANANA="$OPTARG";; c ) CHERRY="$OPTARG";; d ) DFRUIT="$OPTARG";; e ) EGGPLANT="$OPTARG";; f ) FIG="$OPTARG";; ?) echo "Invalid option: -"$OPTARG"" >&2 exit 1;; : ) echo "Option -"$OPTARG" requires an argument." >&2 exit 1;; esac done echo "Apple is "$APPLE"" echo "Banana is "$BANANA"" echo "Cherry is "$CHERRY"" echo "Dfruit is "$DFRUIT"" echo "Eggplant is "$EGGPLANT"" echo "Fig is "$FIG"" 但是,输出如下: bash script.sh -a apple -b banana -c cherry -d dfruit -e eggplant -f fig …输出: Apple is apple Banana is banana Cherry is Dfruit is Eggplant is Fig is 你可以看到,可选标志并没有使用$OPTARG牵引参数,因为它与所需的标志一样.有没有办法读取$OPTARG在可选标志,而不会摆脱整洁的“:)”错误处理? ======================================= 编辑:我按照吉尔伯特的建议,清理下来.这是我做的: #!/bin/bash if [[ "$1" =~ ^((-{1,2})([Hh]$|[Hh][Ee][Ll][Pp])|)$]]; then print_usage; exit 1 else while [[ $# -gt 0 ]]; do opt="$1" shift; current_arg="$1" if [[ "$current_arg" =~ ^-{1,2}.* ]]; then echo "WARNING: You may have left an argument blank. Double check your command." fi case "$opt" in "-a"|"--apple" ) APPLE="$1"; shift;; "-b"|"--banana" ) BANANA="$1"; shift;; "-c"|"--cherry" ) CHERRY="$1"; shift;; "-d"|"--dfruit" ) DFRUIT="$1"; shift;; "-e"|"--eggplant" ) EGGPLANT="$1"; shift;; "-f"|"--fig" ) FIG="$1"; shift;; * ) echo "ERROR: Invalid option: ""$opt""" >&2 exit 1;; esac done fi if [[ "$APPLE" == "" || "$BANANA" == "" ]]; then echo "ERROR: Options -a and -b require arguments." >&2 exit 1 fi 非常感谢大家.到目前为止这完美无瑕.
大多数shell getopts一直在烦恼我很长时间,包括缺乏可选参数的支持.
但是,如果您愿意使用“–posix”样式参数,请访问bash argument case for args in $@ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 调用webService的几种方式
- 如何在scala repl和sbt控制台中关闭/打开typer阶段
- unix – 用条件替换字符串
- UI框架: Bootstrap & Kickstart
- scala – Spark2 – LogisticRegression训练已完成,但结果未
- 类型边界意外地更改了Scala隐式参数解析的优先级
- 安装MariaDB
- Angular 2 Material Progress Spinner:显示为叠加层
- angular – ng-bootstrap typeahead TypeError:Object(…)
- angularjs – 使用ng-repeat生成的项目中的增量计数器