Linux:getopts解析命令行选项和参数

一.背景

当自己编写多个shell脚本进行嵌套调用时,会涉及到传参数问题,此时可以通过getopts设置参数输入与变量赋值.

二.用法

当使用 getopts 命令来解析命令行选项和参数时,你需要在脚本中创建一个循环,循环中使用 getopts 命令来获取每个选项及其参数。以下是 getopts 命令的基本用法示例:

#!/bin/bash

while getopts "a:b:c" opt; do
    case $opt in
        a)
            arg_a="$OPTARG"
            ;;
        b)
            arg_b="$OPTARG"
            ;;
        c)
            option_c=true
            ;;
        ?)
            echo "Usage: $0 [-a arg_a] [-b arg_b] [-c]"
            exit 1
            ;;
    esac
done

echo "Option 'a' argument: $arg_a"
echo "Option 'b' argument: $arg_b"

if [ "$option_c" = true ]; then
    echo "Option 'c' is set"
fi

在上面的示例中,getopts 循环会解析选项和参数,然后将其分配给相应的变量。让我解释一下其中的部分:

while getopts “a: b:c” opt:这里的字符串 “a: b:c” 表示你的脚本支持三个选项:-a、-b 和 -c。如果选项需要附加参数,你需要在选项后面加上冒号 :。

case $opt in … esac:这个结构用于根据不同的选项进行处理。每个选项的 case 块内包含当遇到该选项时要执行的代码。

arg_a、arg_b:这些变量用于存储选项的参数值。

option_c:这是一个布尔变量,如果 -c 选项被设置,它会被置为 true。

?):在此 case 中处理无效选项的情况。如果遇到未定义的选项,将输出用法信息并退出。

通过运行脚本并传递选项和参数,你可以获取每个选项的参数值以及是否设置了 -c 选项。以下是一些运行脚本的示例命令:

./script.sh -a value1 -b value2 -c

这将输出:

Option 'a' argument: value1
Option 'b' argument: value2
Option 'c' is set

如果你运行:

./script.sh -a value1

则输出将是:

Option 'a' argument: value1
Option 'b' argument:

请根据你的实际需求对脚本进行调整,以便解析并处理所需的选项和参数。

三.相关命令,usage

在 shell 脚本中,“usage” 通常指的是在用户提供了错误的命令行参数或选项时,显示给用户的正确用法说明。这有助于用户正确使用脚本,并提供关于所需参数和选项的信息。
以下是一个示例,展示如何在脚本中创建一个 “usage” 函数来显示用法信息:

#!/bin/bash

# Define a function to display usage information
usage() {
    echo "Usage: $0 [-a arg_a] [-b arg_b] [-c]"
    echo "  -a : Specify argument 'a'"
    echo "  -b : Specify argument 'b'"
    echo "  -c : Enable option 'c'"
    exit 1
}

# If no arguments are provided, display usage and exit
if [ $# -eq 0 ]; then
    usage
fi

# Parse command-line options using getopts
while getopts "a:b:c" opt; do
    case $opt in
        a)
            arg_a="$OPTARG"
            ;;
        b)
            arg_b="$OPTARG"
            ;;
        c)
            option_c=true
            ;;
        ?)
            usage
            ;;
    esac
done

echo "Option 'a' argument: $arg_a"
echo "Option 'b' argument: $arg_b"

if [ "$option_c" = true ]; then
    echo "Option 'c' is set"
fi

在上面的示例中,如果用户提供了无效的选项或没有提供任何参数,脚本会调用 “usage” 函数来显示用法信息,然后退出。

当用户运行脚本时,可以使用以下方式查看用法信息:

./script.sh -h

或者

./script.sh --help

这是常见的做法,许多命令行工具都支持 -h 或 --help 选项来显示用法信息。

这样,用户可以在提供无效参数或选项时得到帮助,从而更好地理解如何正确使用你的脚本。

四. 参考

chagpt

你可能感兴趣的:(linux,运维,服务器)