- または - (等号なし) を使用して指定できるパラメーターと、 - または - を使用してファイルを出力する機能を含む構成ファイルを作成したいと思います。誰かがこれを行うための一般的なスクリプトを教えてもらえますか?たとえば、MainScriptを実行し、次のようにconfig.cfgでアルファを2に、ベータを3に設定したいとします。
MainScript --alpha 2 --beta 3 --output config.cfg
または
MainScript -a 2 -b 3 -o config.cfg
その後、config.cfgを開くと
alpha = 2
beta = 3
ここで、アルファとベータの名前はランダムに指定されており、より多くのパラメータがあります。これは単なる例です。使用される値は任意の種類の数値であり、検証は不要です。
私はこのスレッドを確認しました(https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash)、しかし何も動作しないようで、Bashバージョン4を使用しません。ありがとうございます!
ベストアンサー1
#!/bin/sh
outfile=/dev/stdout
while getopts 'o:' opt; do
case $opt in
o) outfile=$OPTARG ;;
*) echo 'Error in command line parsing' >&2
exit 1
esac
done
shift "$(( OPTIND - 1 ))"
while [ "$#" -gt 0 ]; do
printf '%s = %s\n' "${1#--}" "$2"
shift 2
done >$outfile
このスクリプトはオプションを取り、-o
出力ファイルを指定されたオプション引数に設定します。使用しない場合、-o
出力は標準出力に移動します。
スクリプトコマンドラインのオプション以外のビットは後で提供する必要があります--
。デュアルダッシュは、ユーティリティにオプションがなくなり、残りのオペランドがコマンドラインオプションとして扱われてはならないことを示す標準的な方法です。ここでは、getopts
コマンドラインの末尾に表示されるオプションなどの文字列が混乱しないように、この事実を使用します。いいえこのスクリプトのオプション)。
while
スクリプトの最後のループはペアでオペランドを繰り返します。最初のオペランドから二重ダッシュを削除し、間に等号の2番目のオペランドを使用して修正値を出力します。最初のオペランドの先頭に二重ダッシュがない場合(例)、-alpha
値は変更されません。出力は指定された出力ファイル名にリダイレクトされます。
例を実行してください:
$ ./script.sh -o out -- --alpha 2 --beta 4 --abba "Dancing Queen" --xxx --yyy
$ cat out
alpha = 2
beta = 4
abba = Dancing Queen
xxx = --yyy
コマンドライン解析なしでより短いバリエーション:
#!/bin/sh
while [ "$#" -gt 0 ]; do
printf '%s = %s\n' "${1#--}" "$2"
shift 2
done
これは、結果をファイルに書き込むためにコマンドラインでリダイレクトと一緒に使用されます。
./script.sh --alpha 2 --beta 4 --abba "Dancing Queen" --xxx --yyy >outfile