0

我正在尝试编写一个 bash 脚本,该脚本将检查不同目录中文件中的五个变量值并相应地更新它们。由于有五个变量,我想在 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 并比较两者?文件中 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 回答