如何管理 getops 参数分配

如何管理 getops 参数分配

这是我的第一个问题。

我正在尝试制作一个带有选项的小脚本,并且我正在getopts这样做。奇怪的是:

参数不会分配给变量,或者它总是进入if代码块(这似乎是问题)。

这是脚本:

#!/bin/bash

function work () {
    echo "It Works" }

function help () {
    echo "Print some help and options" }

while getopts ha:b: OPT; do
    case $OPT in
        -h)
            help
            exit
            ;;
        -a)
        OPTA=$OPTARG
        ;;
        -b)
        OPTB=$OPTARG
            ;;
        \?)
        help
            break
            ;;
    esac done

echo $OPTB

if  [[ -z $OPTB ]]; then
    echo "ERROR. Needs OPTB"
fi

if [[ -n $OPTB ]]; then
    echo "All OK untill here"
    work
fi

它总是打印错误消息。

答案1

getopts从选项中删除“-”号。

所以你需要:

while getopts ha:b: OPT; do
    case $OPT in
        h)
            help
            exit
            ;;
        a)

 ....

getopts请记住在调用( )之前清除变量,unset OPTA OPTB因为它们可能位于脚本接收的环境中。另请考虑调用脚本-b ""是否有效的情况,因为您[[ -z $OPTB ]]无法区分“无-b选项”和“-b带空参数的选项”。

相关内容