指定されたパラメーターを使用した構成ファイルの生成

指定されたパラメーターを使用した構成ファイルの生成

- または - (等号なし) を使用して指定できるパラメーターと、 - または - を使用してファイルを出力する機能を含む構成ファイルを作成したいと思います。誰かがこれを行うための一般的なスクリプトを教えてもらえますか?たとえば、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

おすすめ記事