0

我需要修改我的一个脚本。到目前为止,它有两个强制性参数,它们指出更新版本和将要应用此更新的数据库

./script.sh version db_name

现在我想添加两个新的可选参数,实际上我应该称之为开关。这些开关将其扩展为: 1. 在安装之前停止(或不停止)我的 Web 服务器 2. 还将一些新文件安装到文件系统 两者都返回 bool 值。所有细节都在脚本中。所以我期待类似的东西:

./script.sh version db_name -stopweb  -copyfiles

我发现getopts是合适的命令。问题是如何将参数(强制)和开关(可选)“连接”在一起。我真的不明白:(你能给我一些提示吗?

4

1 回答 1

5

您应该考虑使用getopts. 这是我在 bash 脚本中用于选项解析的示例:

TEMP=$(getopt -o dp:v --long dev,publish:,verbose -- "$@")

# Note the quotes around '$TEMP': they are essential!
eval set -- "$TEMP"

#default values
DEV=0
VERBOSE=
while true; do
    case "$1" in
        -d | --dev ) DEV=1; shift ;;
        -p | --publish ) PUBLISH="$2" ; shift 2;;
        -v | --verbose ) VERBOSE="-v" ; shift ;;
        -- ) if [ -n "$2" ]
            then
                ARGUMENT1=$2
                if [ -n "$3" ]
                then
                    ARGUMENT2=$3
                    if [ -n "$4" ]
                    then
                        shift 3
                        echo "Unexpected options: \"$@\" . exiting."
                        exit 1;
                    fi
                fi
            fi
            shift 2; break;;
        * ) break ;;
    esac
done

# you can add some checks here that ARGUMENT1 and ARGUMENT2 were effectively set, if they are mandatory

一些特点:

  • 使用短期和长期期权
  • 一些选项需要一个参数
  • 使用一些可选参数(在本例中为一个),它们不是以-

注意:为了让 getopts 能够区分-dv是两个空头选项和--dev一个多头选项;您所有的长选项都应该以两个连字符开头。

于 2015-11-17T15:53:05.380 回答