タグ付けされた質問 「getopts」

5
getopt、getopts、または手動解析-短いオプションと長いオプションの両方をサポートする場合に使用するもの
現在、次の要件を持つBashスクリプトを作成しています。 さまざまなUnix / Linuxプラットフォームで実行する必要があります 短いオプションと(GNU)長いオプションの両方をサポートする必要があります 私はそれgetoptsが移植性の観点から好ましい方法になることを知っていますが、知る限りでは長いオプションをサポートしていません。 getopt長いオプションをサポートしますが、BashGuideはそれに対して強く推奨します: getopt(1)を使用しないでください。getoptは、空の引数文字列、または空白が埋め込まれた引数を処理できません。それが存在したことを忘れてください。 そのため、手動解析のオプションがまだあります。これはエラーが発生しやすく、かなりの定型コードを生成するため、自分でエラーを処理する必要がありgetopt(s)ます(自分でエラー処理を行うと思います)。 それで、この場合の好ましい選択は何でしょうか?

5
getoptsでオプションが渡されなかったことを検出するにはどうすればよいですか?
私はこのコードを持っています- #getoptDemo.sh usage() { echo "usage: <command> options:<w|l|h>" } while getopts wlh: option do case $option in (w) name='1';; (l) name='2';; (h) name='3';; (*) usage exit;; esac done print 'hi'$name bash getoptDemos.sh(オプションなしで)実行するhiと、関数を呼び出す代わりに印刷されますusage。w、h、l以外のオプションが指定された場合に使用方法を呼び出します。その後、オプションが指定されていない場合は機能しません。 私が使って試してみましたが?、\?、:の代わりに、*私は私が欲しかったものを達成することはできません。私はすべてがそれを使用するようdocsにgetopt言っていることを意味します?。 何が間違っていますか?
19 bash  shell  options  getopts 


1
getoptsを使用して非オプション引数の後にオプションを解析する
次のようなbashスクリプトがファイルにありnepleaks_upd.sh、実行したい./nepleaks_upd.sh bootstrap --branch off。うまくいきませんでしたが--branch、動作します./nepleaks_upd.sh bootstrap -b off。 usage() { echo "Usage: $0 [prepare | up | down] [-b <on/off>]" 1>&2; exit 1; } case "$1" in bootstrap) while getopts ":b:" o; do case "${o}" in b) b=${OPTARG} if [ ${b} == "off" ]; then echo "git clone https://github.com/iPrayag/dotfiles.git" ## logic …

1
getoptsを使用して1つのオプションに2つの引数を提供します
以下のコードでオプションrを指定getoptsすると、1つの引数が必要になります。 while getopts ":hr::l:" opt; do case $opt in r ) echo "Run Numbers - argument = $OPTARG " ;; l ) echo "Latency range - argument = $OPTARG" ;; h ) helptext graceful_exit ;; * ) usage clean_up exit 1 esac done しかし、-rオプションの後に、1つではなく2つの引数を渡す必要があります。これを行う簡単な方法はありますか?

2
オプションの終わりに対処する方法— getoptsで
getoptsを使用してbashスクリプトの引数を解析します while getopts ":hd:" opt; do case $opt in d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;; h ) helptext graceful_exit ;; * ) usage clean_up exit 1 esac done exeparams="$*" exeparams未解析のオプション/引数を保持します。exeparamsを使用して、スクリプト内で実行されるコマンドのオプションを保持したいので(スクリプト自体のオプションと重複する可能性があります)、スクリプトに渡されるオプションを終了するために-を使用します。私が通過した場合 myscript -d myscriptparam -- -d internalparam exeparams 開催します -- -d internalparam --これらの引数を内部コマンドに渡すために、先頭を削除したいと思います。これを行うためのエレガントな方法はありますか、または--getopts なしで残りだけを保持する文字列を取得できますか?
9 bash  getopts 

5
bash getopts、短いオプションのみ、すべて値が必要、独自の検証
さまざまなオプションを受け入れるシェルスクリプトを構築しようとしgetoptsています。オプションと引数の変数の順序を処理できるため、良い解決策のようです(私はそう思います!)。 私は短いオプションのみを使用し、各短いオプションには対応する値が必要です。例:./command.sh -a arga -g argg -b argbほとんどの人がシェルコマンドでの作業に慣れているように、オプションを特定の順序で入力できないようにしたい。 もう1つのポイントは、オプションの引数値のチェックを自分自身で、理想的にはcaseステートメント内で行いたいということです。その理由は:)、私のcase声明での私のテストで一貫性のない結果が得られたためです(おそらく私の理解が不足しているためです)。 例えば: #!/bin/bash OPTIND=1 # Reset if getopts used previously if (($# == 0)); then echo "Usage" exit 2 fi while getopts ":h:u:p:d:" opt; do case "$opt" in h) MYSQL_HOST=$OPTARG ;; u) MYSQL_USER=$OPTARG ;; p) MYSQL_PASS=$OPTARG ;; d) BACKUP_DIR=$OPTARG ;; \?) echo …
8 bash  getopts 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.