BASH getopts问题

BASH getopts问题

有谁知道为什么它没有任何作用?

moznostm=
moznostl=
moznosta=
moznostb=
while getopts ":m:l:b:a:h:" OPTION
do
case $OPTION in
m)
moznostm=$OPTARG
echo "bol zadany argument $moznost"
;;
l)
moznostl=$OPTARG
echo bol zadany argument $OPTARG
;;
b)
moznostb=$OPTARG
echo bol zadany argument $OPTARG
;;
a)
moznosta=$OPTARG
echo bol zadany argument $OPTARG
;;
h)
echo prazny
;;
esac
done

答案1

您必须使用选项和选项参数调用脚本。例如:

bash yourscript -l argumentfor_l

另请注意,它moznost被打印但从未定义。

答案2

只需进行一些修改即可。

1)设置你的shebang! #!/bin/bash 如果你写 bash

2) 如果之前使用过 getopts 则重置

3) 你忘记了mat $moznost

4) 普通变量名不要使用大写。

5)多用引号。" "扩展变量时使用双引号。
6) 使用shift.

7)您不必像这里那样定义/初始化变量moznostm=

#!/bin/bash

OPTIND=1

    moznostm=
    moznostl=
    moznosta=
    moznostb=
    while getopts "mlbah:" opt
    do
    case "$opt" in
    m)
    moznostm=$OPTARG
    echo "bol zadany argument $moznostm"
    ;;
    l)
    moznostl=$OPTARG
    echo "bol zadany argument $OPTARG"
    ;;
    b)
    moznostb=$OPTARG
    echo "bol zadany argument $OPTARG"
    ;;
    a)
    moznosta=$OPTARG
    echo "bol zadany argument $OPTARG"
    ;;
    h)
    echo "prazny"
    ;;
    esac
    done
shift "$((OPTIND-1))"

执行脚本:

chmod +x scriptname && ./scripname -m

相关内容