shell脚本在java中传递值属性文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本在java中传递值属性文件相关的知识,希望对你有一定的参考价值。

我有一个如下所示的属性文件:

mysql.username=USERNAME
mysql.pass=PASS

我需要使用传递给shell脚本的变量值来更改USERNAMEPASS。我不能使用sed,因为第一次使用“值”替换USERNAME和PASS时工作正常但是一旦被替换,sed将不会在脚本第二次运行时在文件中找到变量名,因此是一个问题。

怎么办呢?

答案

我相信实现目标的最简单方法是始终在未触摸的模板文件上执行替换,而不是尝试处理生成的文件的先前版本:

# produce a first version of the file.properties 
sed -e 's/USERNAME/user1/' -e 's/PASS/pass1/' file.properties.template > file.properties

# succesfully produce a second version of the file.properties
sed -e 's/USERNAME/user2/' -e 's/PASS/pass2/' file.properties.template > file.properties

另一种方法是更改​​脚本的输入(或代码?),以便您的搜索和替换操作不是基于占位符值,而是基于属性名称:

$ cat test.sh
#!/bin/bash

target=$1
shift

while key=$1 && value=$2 && shift 2; do
    sed -i "s/^$key=.*/$key=$value/" $target
done

$ cat test.props
mysql.hostname=HOSTNAME
mysql.username=USERNAME
mysql.pass=PASS

$ ./test.sh test.props mysql.username sa mysql.pass clearTextPasswordsAreTerrible

$ cat test.props
mysql.hostname=HOSTNAME
mysql.username=sa
mysql.pass=clearTextPasswordsAreTerrible

$ ./test.sh test.props mysql.username secondTry mysql.pass successfullyModified

$ cat test.props
mysql.hostname=HOSTNAME
mysql.username=secondTry
mysql.pass=successfullyModified

以上是关于shell脚本在java中传递值属性文件的主要内容,如果未能解决你的问题,请参考以下文章

参数传递:shell脚本调用一个带参数的python函数

java调用shell脚本,并得到shell脚本的返回值

如何在shell脚本里调用另一个shell脚本

从 udev 规则文件向 shell 脚本传递参数

常用python日期日志获取内容循环的代码片段

java调用shell脚本且传递参数