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变量值为:
选项缺少参数

网友补充 在这里补充本文不完善的地方,或是在此讨论和纠错,知识在于分享,您补充的资料会让更多人获得帮助!