📅  最后修改于: 2023-12-03 14:49:48.245000             🧑  作者: Mango
在编写Shell脚本时,经常需要从命令行参数中获取一些选项或参数。有多种方式可以实现这种功能,但是使用getopts
命令可以使得代码更加易读、易维护,在Shell脚本中比较常见。
getopts
是一个可用于解析命令行参数的内置命令。它可以以非常简洁的方式将传递给Shell脚本的参数转换为变量,进而进行必要的操作。
使用getopts
命令时,需要提供一个选项字符串和一个变量名。选项字符串是一组字符,表示在命令行中可以接受的选项和其他参数。变量名是存储选项或参数值的变量名称。
用法如下:
while getopts "a:b:c:" opt; do
case $opt in
a) var_a="$OPTARG" ;;
b) var_b="$OPTARG" ;;
c) var_c="$OPTARG" ;;
\?) echo "Invalid option: -$OPTARG" ;;
esac
done
上面的代码将处理传递给脚本的选项,并将每个选项的值分别存储到变量var_a
、var_b
、var_c
中。如果出现无效选项,则会输出错误消息。
可以在选项字符串中使用不同的字符来表示不同的选项。在上面的示例中,选项字符串为"a:b:c:"
,其中每个选项的含义如下:
a:
- 表示选项a
需要一个值,在命令行中的语法为-a value
;b:
- 表示选项b
需要一个值,在命令行中的语法为-b value
;c:
- 表示选项c
需要一个值,在命令行中的语法为-c value
;如果选项字符后面没有冒号(:),则表示该选项不需要值,只是一个开关类型的选项。例如:
while getopts "abc" opt; do
case $opt in
a) echo "Option a was passed" ;;
b) echo "Option b was passed" ;;
c) echo "Option c was passed" ;;
\?) echo "Invalid option: -$OPTARG" ;;
esac
done
在这个示例中,选项字符串为"abc"
,表示脚本接受三个选项a
、b
和c
。如果在命令行中出现了任何一个选项,则对应的echo
语句将被执行。
下面是一个实际的例子,演示如何使用getopts
命令。
#!/bin/bash
while getopts ":a:b:c:" opt; do
case $opt in
a) arg_a="$OPTARG" ;;
b) arg_b="$OPTARG" ;;
c) arg_c="$OPTARG" ;;
\?) echo "Invalid option: -$OPTARG" >&2
exit 1 ;;
:) echo "Option -$OPTARG requires an argument" >&2
exit 1 ;;
esac
done
echo "Option a: $arg_a"
echo "Option b: $arg_b"
echo "Option c: $arg_c"
这个脚本接受三个选项-a
、-b
和-c
,每个选项需要一个值。例如,以下命令会将选项-a
设置为apple
,选项-b
设置为banana
,选项-c
设置为cherry
:
./script.sh -a apple -b banana -c cherry
这将输出:
Option a: apple
Option b: banana
Option c: cherry
如果某个选项没有提供值,则会输出错误消息并退出:
./script.sh -a apple -c # Error: Option -c requires an argument
getopts
命令提供了一种便捷的方式来解析命令行参数。它可以让你以一种简洁、清晰的方式指定需要的选项和参数,并将其转换成可读的变量。虽然getopts
不是完美的,但它是一个广泛使用的Shell脚本技术,可以在很多场合得到应用。