如果我的environment-variable.ini变量跟环境变量不同,如何用shell脚本修改?

1、我的environment-variable.ini文件内的内容是

export UNIVER_USER_LOGIN='http://127.0.0.1/api/login'
export UNIVER_SEARCH_ORDINARY='http://127.0.0.1/api/search/common'
export UNIVER_SEARCH_LABEL='http://127.0.0.1/api/search/common'
export UNIVER_SEARCH_VIDEO='http://127.0.0.1/api/search/common'
export UNIVER_TASK_MANAGER='http://127.0.0.1/api/task/manager'
export UNIVER_PROJECR_URL='167.210.220.11'
export UNIVER_PROJECR_PORT=667777760011

我的环境变量是

export UNIVER_MONGO_URL='mongodb://10.10.0.49:27017'
export UNIVER_USER_LOGIN='http://demo.kube.univer/api/login'
export UNIVER_SEARCH_ORDINARY='http://demo.kube.univer/api/search/common'
export UNIVER_SEARCH_LABEL='http://127.0.0.1/api/search/common'
export UNIVER_SEARCH_VIDEO='http://127.0.0.1/api/search/common'
export UNIVER_TASK_MANAGER='http://127.0.0.1/api/task/manager'
export UNIVER_PROJECR_URL='67.110.220.11'
export UNIVER_PROJECR_PORT=6677

我希望用shell 脚本判断

如果我的environment-variable.ini中所设置的变量跟我的环境变量相同就不改变环境变量,如果不相同的话,将环境变量修改成environment-variable.ini中的变量

2、这段代码怎么优化

if [ $UNIVER_USER_LOGIN ]; then # 如果 UNIVER_USER_LOGIN 存在
    echo ${UNIVER_USER_LOGIN}
else
    # echo "export UNIVER_USER_LOGIN='xxx'" >> /etc/profile
    grep 'UNIVER_USER_LOGIN' environment-variable.ini >> /etc/profile
fi
阅读 2.6k
2 个回答
假设你的environment-variable.ini内容是这样的
UNIVER_PROJECR_PORT='79000000'
我写了一个,能实现,你可以看看,应该有更好的
#!/bin/bash
while read line;do  
    eval "$line"
done < environment-variable.ini
echo $UNIVER_PROJECR_PORT

if [ $UNIVER_PROJECR_PORT == $(sed '/^UNIVER_PROJECR_PORT=/!d;s/.*=//' /etc/profile) ];then
    echo '一致'
else
    echo '不一致,需要修改成配置文件中的参数'
    sed -i '/UNIVER_PROJECR_PORT/d' /etc/profile       #删除原有的
    echo "export UNIVER_PROJECR_PORT="$UNIVER_PROJECR_PORT>>/etc/profile  #添加新的
fi

source /etc/profile

实现其实不重要,实在太简单了,我谈下我的看法: 慎重修改/etc/。为啥?新手不了解,对这个目录没有敬畏之心,太容易把整个系统搞挂了,这个目录的文件一旦改坏了,影响整个系统,严重的甚至整个系统全挂无法启动。比如错误的对整个/etc/使用了chmod/chown -R xxx /etc/

再者,我再次强调一下,不要乱改/etc/profile,这个文件根本不是你想的那样,而且可能改了也不符合你的预期(建议自己阅读shell的启动过程,很多shell和系统在交互式模式下可能不加载这个文件)。不止这个,任何shell默认的/etc/*rc配置都不应该乱改。先从思想上纠正一下你的想法。限于篇幅我不说详细原因了,看的资料多了你自然有感悟,乱改/etc/是新手的做法。

那怎么做?环境变量尽可能不要影响其他,实在要改,也不要去改/etc/的,改~/.*rc配置,只影响当前用户,即使改坏不会让整个系统挂掉,而且已与修复。

环境变量的作用范围应该限制尽可能小,小到限制到某个程序,而不是所有不相关的程序都要受到影响,懂了吧?所以对于脚本而言,直接把需要的变量写到自己的脚本初始化中,不要受到外部环境变量的干扰,也不要去干扰外部环境变量。服务的环境变量由服务的启动脚本进行初始化,任何时候不要乱改环境变量,更不能把你的环境变量乱写到/etc/下去,一旦搞坏后果严重

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进