getoptsにオプションが指定されていない場合のデフォルトオプションの実行

getoptsにオプションが指定されていない場合のデフォルトオプションの実行

私はチュートリアルに従いました。ここ使用方法を学びますgetopts。ユーザーが提供したすべてのオプションを正しく実行できます。さて、私はオプションが提供されていないときにデフォルトのオプションを実行したいと思います。

たとえば、

while getopts ":hr" opt; do
    case $opt in
        h )
            show_help;
            exit 1
            ;;
        r )
          echo "Default option executed"
          ;;
    esac
done

したがって、ユーザーがまたはを指定した場合は-hその-rコマンドを実行する必要があります(はい)、これらのオプションが指定されていない場合は-rデフォルトで実行する必要があります。これを達成する方法はありますか?

修正する

cas's提案を試して、それを*)私のgetopts機能に統合しましたが、何も起こらないようです。

while getopts ":hr" opt; do
    case $opt in
        h )
            show_help;
            exit 1
            ;;
        r )
          echo "Default option executed"
          ;;

        \? )
          echo error "Invalid option: -$OPTARG" >&2
          exit 1
          ;;

        : )
          echo error "Option -$OPTARG requires an argument."
          exit 1
          ;;

        * )
          echo "Default option executed"
          ;;
    esac
done

このコードに問題がありますか?

ベストアンサー1

解析するオプションがないとステートメントはcase実行されないため、ステートメントにデフォルトオプションを追加しても役に立ちません。getoptsシェル変数を使用して、どのくらいのオプションを処理しているかを確認できますOPTIND。からhelp getopts

Each time it is invoked, getopts will place the next option in the
shell variable $name, initializing name if it does not exist, and
the index of the next argument to be processed into the shell
variable OPTIND.  OPTIND is initialized to 1 each time the shell or
a shell script is invoked.

したがって、OPTIND1の場合、オプションは処理されません。ループの後に以下を追加しますwhile

if (( $OPTIND == 1 )); then
   echo "Default option"
fi

おすすめ記事