当我们在编写Shell脚本时,通常需要从命令行中获取参数和选项。在Unix和Linux系统中,有一个非常强大的工具可以用来解析和处理命令行选项,那就是getopts。getopts是一个内置的命令行解析工具,可以快速处理多个选项和参数。
getopts基本语法
getopts的基本语法如下:
while getopts "options" opt; do
case ${opt} in
o ) #处理选项 o
;;
a ) #处理选项 a
;;
? ) #处理无法识别的选项
;;
esac
done
- "options"是一个由选项字符组成的字符串,表示要处理的选项,每个选项字符前面可以加冒号":"表示这个选项需要附加参数;
- opt是当前解析到的选项字符;
- case语句用来根据opt处理不同的选项。
示例1:处理不带参数的选项
比如我们有一个脚本需求需要支持以下三个选项:
- -h:显示帮助;
- -v:显示版本号;
- -d:输出调试信息。
#!/bin/bash
while getopts "hvd" opt; do
case ${opt} in
h )
echo "Usage: command [-hvd] [arguments]"
echo "Options:"
echo " -h: Display help message."
echo " -v: Display version number."
echo " -d: Turn on debugging information."
exit 0 ;;
v )
echo "Version 1.0"
exit 0 ;;
d )
shift #取下一个参数作为debug选项的值
echo "Debug mode is on. Value: $1"
break ;;
\? )
echo "Invalid option: -$OPTARG" 1>&2
exit 1 ;;
: )
echo "Option -$OPTARG requires an argument." 1>&2
exit 1 ;;
esac
done
在上面的代码中,我们使用了shift命令将选项参数从命令行中删除,并把它赋值给$1变量,然后在下面的代码中就可以使用$1.
示例2:处理带参数的选项
现在我们需要实现一个脚本支持以下选项:
- -f filename:指定一个文件名;
- -d dirname:指定一个目录名。
#!/bin/bash
while getopts "f:d:" opt; do
case ${opt} in
f )
echo "File name: $OPTARG" ;;
d )
echo "Directory name: $OPTARG" ;;
\? )
echo "Invalid option: -$OPTARG" 1>&2
exit 1 ;;
: )
echo "Option -$OPTARG requires an argument." 1>&2
exit 1 ;;
esac
done
shift $((OPTIND -1))
在上面的代码中,我们在选项字符后面加上冒号,表示该选项需要一个参数,然后在case语句中使用变量OPTARG获取参数值。
getopts还有很多的高级用法,可以通过man getopts来查看详细的帮助文档。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Shell脚本中使用getopts处理多命令行选项 - Python技术站