0

別のディレクトリにあるファイルの 5 つの変数値をチェックし、それに応じて更新する bash スクリプトを作成しようとしています。変数が5つあるので、forループでやろうと思っていたのですが、これらの値を比較する方法がわかりません。私が欲しいのは疑似コードです:

var_f=(server_name app_name metadata1 metadata2 metadata)  #the variable name in file
var_v=(server1 app /tmp/2 tmp/3 /tmp/config.xml
for i in "${var_f[@]}"
do
   if var_f(i)~=var_v(i)
            sed -i -e 's/server_name=RANDOM_VAL/server_name=server1/g'   server.properties
    else
         then do nothing   
    fi
 done    

私がこれまでに持っているコード:

#!/bin/bash

cd '/home/me/'
set -- $(<server.properties)
echo $server_name # jsut to see if set command is working
sed -i -e 's@server_name=@server_name=server1@g' server.properties
sed -i -e 's@app_name=@app_name=app@g' server.properties
sed -i -e 's@metadata1=@metadata1=/tmp/2@g' server.properties
sed -i -e 's@meatadata2=@metadata2=/tmp/3@g server.properties
sed -i -e 's@metadata=@metadata=/config.xml@g' server.properties
cd '/home/my/test/'

var_f と var_v を実行して 2 つを比較するにはどうすればよいですか? ファイルの var_f の値は --set コマンドを使用して取得できますが、それを正しい値 (var_v) と比較する方法がわかりません。また、var_v は、for ループと if ステートメントを使用して間違った値を置き換える正しい値です。

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

0

単一の sed 実行ですべての変数を更新することをお勧めします。

#!/bin/bash
var_f=(server_name app_name metadata1 metadata2 metadata) #variable name
var_v=(server1 app /tmp/2 /tmp/3 /tmp/config.xml)
for (( i=0; i < ${#var_f[*]}; ++i ))
do
    substitutions+="s@${var_f[$i]}=\S*@${var_f[$i]}=${var_v[$i]}@;"
done
sed -i "$substitutions" /home/me/server.properties

スクリプトが実行されるたびにファイルが書き換えられることに真剣に悩まされていますか? 現在の値を正しい値と比較すると、おそらく時間がかかります。

于 2013-08-23T11:06:13.837 に答える