在 Linux 的 Bash 中解析命令行参数
摘要
命令行参数可以按顺序输入,也可以由 bash 程序处理成选项。这些参数被命令行实用程序用来在执行环境之间进行选择性选择,或者有条件地触发 Bash 脚本中的函数。它们可以在 Bash 中以各种方式设置。
注意 - Linux 命令区分大小写。
getopt 语法
getopts 的语法如下:
$ getopts optstring opt [arg ...]
以下适用于上述函数:
选项由 optstring 表示。如果选项后面跟着一个冒号 (:),则它期望一个响应。例如,如果选项 c 期望一个参数,则在 optstring 中将其表示为 c:。
当选项具有相应的参数时,getopts 会将参数的字符串值存储在 OPTARG shell 变量中。例如,OPTARG 变量将保存传递给选项 c 的参数。
我们将在接下来的部分中看到这些概念的实际应用,它们将变得清晰。
使用 getopt 解析复杂参数
当参数数量增加或变量的赋值受条件限制时。在这种情况下,必须有一个强大的结构。这个问题由命令行工具 getopt 解决,它提供语法和选项来定义和解析参数。
这是一个关于使用 getopt 定义参数的快速指南。
向命令行实用程序提供参数时,有两种类型。它们包括:
短参数:使用连字符和一个字符来定义这些参数。例如,-h 表示帮助,-l 表示列表命令。
长参数:这些是完整的字符串,前面有两个连字符。例如,--help 和 --list 分别表示帮助和列表。
考虑这个脚本 tutorials_options.sh,其中使用 getopt 实用程序设置参数:
#!/bin/bash SHORT=p:,q:,r LONG=tutorial1:, tutorial2:, help OPTS=$(getopt --alternative --name class --options $SHORT --longoptions $LONG -- "$@")
getopt 实用程序的 --options 标志接收短参数,而 --longoptions 标志接收长参数。我们在上面的代码中具有三个简写选项:
P 代表教程 1
Q 代表教程 2
R 代表帮助
考虑 tutorials_test.sh 脚本使用的 shift 命令来记录和报告我们参数中选项的值:
#!/bin/bash SHORT=p:,:,r LONG=tutorial1:,tutorial2:,help OPTS=$(getopt -a -n class --options $SHORT --longoptions $LONG -- "$@") eval set -- "$OPTS" while : do case "$1" in -p | --tutorial1 ) tutorial1="$2" shift 2 ;; -q | --tutorial2 ) tutorial2="$2" shift 2 ;; -r | --help) "This is a class script" exit 2 ;; --) shift; break ;; *) echo "Unexpected option: $1" ;; esac done echo $tutorial1, $tutorial2 )
当脚本使用正确的参数调用时,将打印两个分配的变量,如下所示:
$ bash tutorials_test.sh --tutorial1 class1 --tutorial2 class2 class1, class2
请注意,当脚本遇到双连字符 (--) 时,它如何终止。
结论
本文讨论了从 shell 脚本传递位置参数和解析复杂可选参数的基本知识。
这些现实世界的例子可以用来增强我们日常生活中使用的 shell 脚本。