getoptsを使用してシェルスクリプトのフラグと引数を適切に解析する方法

これを使用しています:

たとえば、./imgSorter.sh -d directory -f format

スクリプト”の内容は次のとおりです:

#!/bin/bash while getopts ":d:f:" opt; do case $opt in d) echo "-d was triggered with $OPTARG" >&2 ;; f) echo "-f was triggered with $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done 

使用例:

$ ./imgSorter.sh -d myDir -d was triggered with myDir OK

$ ./imgSorter.sh -d -f myFormat -d was triggered with -f NOK:-で始まる文字列がフラグとして検出されないのはどうしてですか?

回答

getopts-dオプションは引数を取る必要があり、コマンドラインで-d -f myformatを使用します。これは、「-fが引数I “-dオプションに与えています。

これはコードのエラーではなく、コマンドラインでのスクリプトの使用法のエラーです。

コードは、オプション引数が正しいこと、およびすべてのオプションが適切な方法で設定されていることを確認する必要があります。

おそらく

-dオプションがオプションであり、変数にデフォルト値を使用する場合<上記のコードのdivid = "4d56de94ef">

では、dirwhileループ。

コマンドラインオプションは、引数を取ることも取らないこともできません。

コメント

  • ありがとうございます@Kusalananda、私はgetoptsがすべてをとったと誤って想定しました-フラグの始まりのために。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です