1行に複数のパラメータを持つBashメニュー

1行に複数のパラメータを持つBashメニュー

数日間検索しましたが、まだ答えが見つかりませんでした。あなたが私に正しい方向を教えてくれることを願っています。

1行で呼び出すオプションを含むbashスクリプトを書く方法を知りたいです。例: script.sh -a -b -c。選択していないパラメータは無視されます。

メニュー/オプションは次のとおりです。

-a description: something
-b description: something else
-c description: something different
-d description: something..

これを行う方法はありますか?

ベストアンサー1

スイッチとパラメータを処理する一般的な方法は、getopts関数を使用することです。これは組み込み関数であり、bashbashのマニュアルページ()man bashでこれに関する情報を見つけることができます。

getoptsデフォルトでは、どのパラメータが必要か、パラメータが必要かどうかを示す文字列を宣言します。getopts多数の引数(例:-abc同等物-a -b -c)とコマンドライン解析を処理します。処理が完了したら、getopts残りのコマンドラインを必要に応じて処理できます。

一般的なスクリプトスニペットは次のとおりです。

ARG_A= FLAG_B= FLAG_C=
while getopts 'a:bc' OPT    # -a {argument}, -b, -c
do
    case "$OPT" in
        a)    ARG_A="$OPTARG" ;;
        b)    FLAG_B=yes ;;
        c)    FLAG_C=yes ;;
        *)    echo "ERROR: the options are -a {arg}, -b, -c" >&2; exit 1 ;;
    esac
done
shift $(($OPTIND - 1))

echo "Remaining command line: $*"

?必要に応じてコマンドオプションとして追加できます。いいねメッセージを使用してください。ブロック内でcaseこれを引用するか、前にバックスラッシュを入れなければリテラルとして扱われることを覚えておいてください。

組み込みコマンドなしで別のシェルで実行したい、長い議論たとえば、ユーティリティだけを見るのでは--verboseありません。これは組み込まれていませんが、より複雑な状況で提供されるように書かれています。-vgetopt

おすすめ記事