shell脚本中getopts的用法
•技术分享
1743
0
getopts
是一个用于解析命令行选项和参数的Bash内置函数。它通常与while
循环结合使用,用于迭代处理命令行选项。
getopts
的用法如下:
while getopts "options" opt; do
case $opt in
option1)
# 处理选项1
;;
option2)
# 处理选项2
;;
option3)
# 处理选项3
;;
*)
# 处理无效选项
;;
esac
done
在上面的示例中,options
是一个包含所有选项的字符串。每个选项都可以带有一个冒号(:
),表示该选项可以接受一个参数。
在while
循环中,getopts
会从命令行参数中一次获取一个选项,并将其存储在变量opt
中。case
语句根据获取到的选项进行匹配,从而执行相应的逻辑。
在case
语句中,option1
、option2
和option3
是选项的名称,可以根据实际需要进行修改。在每个选项的逻辑处理部分,您可以编写相应的代码来处理该选项的功能。
如果命令行中使用了无效的选项,则会执行*)
分支中的代码,用于处理无效选项的情况。
getopts
还有其他一些功能,比如可以使用OPTARG
变量获取选项的参数值,以及使用OPTIND
变量获取下一个选项的索引位置。您可以使用man getopts
命令在终端中查看更详细的文档。
下面是一个具体的示例,演示了如何使用getopts
在脚本中处理命令行选项和参数:
#!/bin/bash
while getopts "a:b:c:" opt; do
case $opt in
a)
echo "Option -a is enabled"
echo "Value of -a: $OPTARG"
;;
b)
echo "Option -b is enabled"
echo "Value of -b: $OPTARG"
;;
c)
echo "Option -c is enabled"
echo "Value of -c: $OPTARG"
;;
*)
echo "Invalid option: -$opt"
exit 1
;;
esac
done
shift $((OPTIND-1))
# 处理剩余的参数
for arg in "$@"; do
echo "Extra Argument: $arg"
done
在上述示例中,假设脚本的名称为script.sh
。您可以通过以下命令行传递选项和参数来运行脚本:
./script.sh -a value1 -b value2 -c value3 extra1 extra2
脚本将根据命令行选项和参数执行相应的逻辑。-a
、-b
和-c
是各自的选项,并且可以带有一个对应的参数值。剩余的参数extra1
和extra2
由$@
获取,并在最后的循环中输出。
实际使用的时候还会接受后面参数的值,或者不接受参数的值,只作为使用判断
#!bin/bash
while getopts "a:b:iop" option;do
case $option in
a) echo "$OPTARG";;
b) echo "$OPTARG";;
i) echo "ii";;
o) echo "oo $OPTARG";; #不会有输出的 $OPTARG 内容,只做处理一次,比如赋值,而不获取输入参数
?) echo "$OPTARG";;
esac
done
如果还有其他后缀参数怎么办?
#!bin/bash
while getopts "a:b:iop" option;do
case $option in
a) echo "$OPTARG";;
b) echo "$OPTARG";;
i) echo "ii";;
o) echo "oo $OPTARG";;
?) echo "$OPTARG";;
esac
done
#通过shift $(($OPTIND - 1))的处理,$*中就只保留了除去选项内容的参数,
#可以在后面的shell程序中进行处理
shift $(($OPTIND - 1))
echo remaining parameters=[$*]
echo \$1=[$1]
echo \$2=[$2]
版权属于:戏人看戏博客网
本文链接:https://day.nb.sb/archives/1331.html
若无注明均为戏人看戏原创,转载请注明出处,感谢您的支持!