使用getopts处理输入参数

在编写shell脚本中,需要输入参数,使用过程中,getopts更加方便。可以很好的处理用户输入的参数和参数值。

参加如下一段脚本:

#!/bin/bash
while getopts ":a:p:c:e" opt
do
    case $opt in
    a)
        echo "--- -a ---"
        echo $OPTARG;;
    p)
        echo "--- -p ---"
        echo $OPTARG;;
    c)
        echo "--- -c ---"
        echo $OPTARG;;
    e)
        echo "--- -e ---"
echo $OPTARG;; ?) echo "-a -p -c -e" exit 1;; esac done
OPTIND:getopts使用OPTIND作为索引,来处理下一个需要处理的参数,记录当前的状态。
OPTARG:在上面的循环中,a,p,c三个参数后面各有一个冒号,冒号表示该输入的参数后面还有一个参数值,当getopts发现冒号后,会处理用户输入的参数值,这个参数值被保存在OPTARG中。
OPTSTRING:也就是上例中的 :a:p:c:e,getopts需要处理的参数。注意,最前面的冒号“:”用于指定getopts工作于silent mode,在silent模式下,当用户输入的参数不满足OPTSTRING时,不会讲illegal option这样的错误信息打印出来,使代码看起来更加专业。如果想要工作在verbose模式下,可以去掉最前面的冒号。
OPTSTRING后面没有冒号,则可以输入参数也可以不输入参数,但是如果输入参数,OPTARG也不会保存参数的值。
如上脚本执行结果如下:
linux-UMLhEm:/home/test/shell # ./option.sh -e
--- -e ---

linux-UMLhEm:/home/test/shell # ./option.sh -e abc
--- -e ---

linux-UMLhEm:/home/test/shell # ./option.sh -a test -p ok
--- -a ---
test
--- -p ---
ok
linux-UMLhEm:/home/test/shell # ./option.sh -a test -p
--- -a ---
test
-a -p -c -e
linux-UMLhEm:/home/test/shell # ./option.sh -a
-a -p -c -e
linux-UMLhEm:/home/test/shell #
 
如果在OPTSTRING中在字母前不加“:”改为
while getopts "a:p:c:e" opt  
 
则,执行结果为:

linux-UMLhEm:/home/test/shell # ./option.sh -a
./option.sh: option requires an argument -- a
-a -p -c -e
linux-UMLhEm:/home/test/shell # ./option.sh -a test -p ok
--- -a ---
test
--- -p ---
ok
linux-UMLhEm:/home/test/shell # ./option.sh -a test -p
--- -a ---
test
./option.sh: option requires an argument -- p
-a -p -c -e

原文地址:https://www.cnblogs.com/xingmuxin/p/8435542.html