java读取linux文件_Docker读取配置文件,设置Linux环境变量

1117dce28d0f7cc0eafb3390b7cc0f01.png

场景

工程中有一个xxx.properties的配置文件,里面有些环境变量,如数据库连接,文件目录等

同时有一个处理数据的shell脚本,里面也需要这部分环境变量

通常的做法是在写 Dockerfile 时,使用ENV xx xx的方式制定

但是,系统环境有多个,dev、test、release 等

不能针对每一个环境都去修改 Dockerfile 文件

于是乎就尝试使用 shell 脚本读取配置文件,将结果设置到环境变量中

步骤

1.按行读取配置文件

Linux 有多中按行读取文件的方式:awk,cat 等,我这里采用了 cat 的方式

cat /data/luelue.properties | while read line; do
    echo $line
done

这样就可以将数据读取出来

2.修改数据格式

luelue.properties 中的数据格式是

auther:shuai
url:jdbc:mysql://localhost:3306/liquibase?useSSL=false

但是 Linux 环境变量中的数据格式是

export auther=shuai
export url=jdbc:mysql://localhost:3306/liquibase?useSSL=false

因此我们要做的是:

  • 切分 luelue.properties 中的数据
  • 组装成 export xx=xx 的格式

2.1切分数据

Linux 有多种切分字符串的方式,这里我采用了 ${string#*chars}${string%chars*}的方式

string 是要截取的字符串 *是通配符的一种,表示任意长度的字符串
chars 是指定的字符(或者子字符串)
%、# 意思是从右向左、从左向右

针对auther:shuai 使用${line%:*} ${line#*:} 就可以截出auther shuai

但是url:jdbc:mysql://localhost:3306/liquibase?useSSL=false 截出的就是`url:jdbc:mysql://localhost: url

为什么呢?

因为单个#、%意思是:遇到第一个匹配的就停止

那么很显然,截取Key的时候,要使用${line%%:*}

2.2 拼装数据

使用:echo export ${line%%:*}"="${line#*:} 生成需要的 Linux 环境变量的格式

2.3 追加到配置文件中

使用:echo xxx >> file

echo export ${line%%:*}"="${line#*:} >> /etc/profile

2.4 健壮性处理

luelue.properties 配置文件中通常有 # 标识的注释,这些注释文字很明显不是我们所需要的

通过:$line != #*判断是否是 # 开头

2.5 加载配置文件

最后别忘记 source /etc/profile 是配置文件剩下

字符串判空

Linux 字符串判空操作奇奇怪怪,多种多样,做这个功能的时候看花了眼

通常是使用,但是这种情况判断好使,!= 我测试是无效的。

if [ x"$prv" = x ]; then
    xxx
else
    xxx
fi

这里整理出一个简单好用的判断非空的方式

if [ -z $prv ]; then
    xxx
else
    xxx
fi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值