使用getopts解析命令行参数

getopts是一个内置的命令行参数解析工具,利用它可以使你的脚本也支持参数解析

用法: getopts optstring name [args] 

  • optstring是选项
  • name 是放选项的变量

看下面的例子:

#!/usr/bin/env bash
# filename: getopts.sh
while
getopts :abc:e:f:h argvs; do case $argvs in a) echo "这是执行-a的效果" ;; b) echo "这是执行-b的效果" ;; c) echo "这是执行-c的效果及参数值:${OPTARG}" ;; e) echo "这是执行-e的效果及参数值: ${OPTARG}" ;;
h) echo "帮助信息" f) echo
"这是-f的效果及参数值 ${OPTARG}" ;; [?]) echo "无效或不存在的选项" ;; :) echo "选项缺少参数" ;; esac done

:abc:e:f:这部分是选项

第一个冒号 getopts 会区分 invalid option (无效选项) 错误和 miss option argument(丢失选项)错误。当为 invalid option 时 varname 会被设成?,$OPTARG是出问题的选项;当为 miss option argument 时 varname 会被设成:,$OPTARG 是出问题的选项,如果optstring不以”:“冒号开头,invalid option 错误和 miss option argument 错误都会使 varname 被设成?,$OPTARG是出问题的选项。

建议选项部分开头用":"

其中abc表示的是一个普通选项,可以不带参数值,而后面带冒号的选项如 (c:、e:、f:) 则必须要带参数值,像这样( -c xxoo、-e xxoo、-f xxoo ),参数值会放在一个隐藏的OPTARG变量中,选项会赋值给后面的argvs变量.

执行结果:

[root@monitor tmp]# ./getopts.sh -a       // 即变量argvs的值为a(删除了-)
这是执行-a的效果

[root@monitor tmp]# ./getopts.sh -b       // 即变量argvs的值为b(删除了-)
这是执行-b的效果

[root@monitor tmp]# ./getopts.sh -ab      // 组合执行,等同于 -a  -b
这是执行-a的效果
这是执行-b的效果
root@monitor tmp]
# ./getopts.sh -c "xxccoo" // 必须要加参数值 这是执行-c的效果及参数值:xxccoo [root@monitor tmp]# ./getopts.sh -a -b -c "xxoo" -d "vvoo" # 多个参数执行 这是执行-a的效果 这是执行-b的效果 这是执行-c的效果及参数值:xxoo 这是执行-e的效果及参数值: vvoo [root@monitor tmp]# ./getopts.sh -x # 如果参数不在选项里面,则argvs变量值为? 无效或不存在的选项 [root@monitor tmp]# ./getopts.sh -c # 如果需要带参数值的选项没有带参数值argvs变量值为: 选项缺少参数

使用getopts命令可以自己写命令行参数

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-10-30 18:27  opss  阅读(1199)  评论(0)    收藏  举报