shell脚本中getopts的用法

技术分享
1657 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语句中,option1option2option3是选项的名称,可以根据实际需要进行修改。在每个选项的逻辑处理部分,您可以编写相应的代码来处理该选项的功能。

如果命令行中使用了无效的选项,则会执行*)分支中的代码,用于处理无效选项的情况。

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是各自的选项,并且可以带有一个对应的参数值。剩余的参数extra1extra2$@获取,并在最后的循环中输出。
实际使用的时候还会接受后面参数的值,或者不接受参数的值,只作为使用判断

2023-09-06T08:21:42.png

#!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]

2023-09-06T08:30:35.png

最后更新 2023-09-06
评论 ( 0 )
OωO
隐私评论