📜  使用Getopts获取Shell脚本选项(1)

📅  最后修改于: 2023-12-03 14:49:48.245000             🧑  作者: Mango

使用Getopts获取Shell脚本选项

在编写Shell脚本时,经常需要从命令行参数中获取一些选项或参数。有多种方式可以实现这种功能,但是使用getopts命令可以使得代码更加易读、易维护,在Shell脚本中比较常见。

什么是Getopts

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_avar_bvar_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",表示脚本接受三个选项abc。如果在命令行中出现了任何一个选项,则对应的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脚本技术,可以在很多场合得到应用。