使用循环和sed Bash脚本在不同目录中的文件中设置变量值 [英] Setting Variables Value in a File in Different Directory Using Loops and sed Bash Script

查看:170
本文介绍了使用循环和sed Bash脚本在不同目录中的文件中设置变量值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图编写一个bash脚本来检查不同目录中的文件中的五个变量值,并相应地更新它们。
由于有五个变量,我正在考虑在for循环中进行,但我不知道如何比较这些值。
我想要的是伪代码:

  var_f =(server_name app_name metadata1 metadata2 metadata)#the变量名
var_v =(server1 app / tmp / 2 tmp / 3 /tmp/config.xml
for $ 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
然后什么也不做
fi
完成

目前为止的代码:



$ p $ #!/ bin / bash

cd'/ home / me /'
set - $ (< server.properties)
echo $ server_name#jsut查看set命令是否正常工作
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来比较两个?
使用--set命令可以获得文件中var_f的值,但是我不知道如何将它与正确的值(var_v)进行比较。另外,var_v是使用for循环和if语句替换错误的正确值。



任何帮助将非常感激。
谢谢。

解决方案

我认为可以在单个sed中更新所有变量。


$ b $ $ $ $ $ $

$ b var_f =(server_name app_name metadata1 metadata2 metadata)#variable name
var_v =(server1 ((i = 0; i< $ {#var_f [*]}; ++ i))
do $($ / $ / $ / $ / b $ b替换+ =s @ $ {var_f [$ i]} = \S * @ $ {var_f [$ i]} = $ {var_v [$ i]} @;
完成
sed -i$ substitutions/home/me/server.properties



你每次脚本运行时都会被重写的文件所困扰吗?假设将当前值与正确值进行比较将花费更长时间。

I'm trying to write a bash script that will check five variable values in a file in a different directory and update them accordingly. Since there is five variables, I was thinking to do it in a for loop, but I don't know how to compare these values. What I'd like to have is pseudo code:

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    

The code I've so far:

#!/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/'

How can I run through var_f and var_v and compare the two? the value of var_f from the file is obtainable using the --set command, but I don't know how to compare it to the correct values (var_v). Also, var_v are the correct values that will replace the wrong ones using the for loop and if statement.

Any help will be very appreciated. Thank you.

解决方案

I think it advisable to update all variables in a single sed run.

#!/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

Are you seriously bothered by the file being rewritten every time the script runs? Presumably comparing the current values to the correct ones would take longer.

这篇关于使用循环和sed Bash脚本在不同目录中的文件中设置变量值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆