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 バッシュを使うなら

2)以前にgetoptsを使用した場合はリセット

3)mに忘れてしまいました$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

関連情報