shell怎么读取配置文件
本篇内容介绍了“shell怎么读取配置文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
在编写启动脚本时,涉及到读取配置文件,特地记录下shell脚本读取启动文件的方式。主要提供两种格式的读取方式,方式一配置文件采用“[]”进行分区,方式二配置文件中需要有唯一的配置项名称。
配置文件格式如下:
# cat -n config.ini #MYSQL配置项 [MYSQL] DB_HOST=192.168.0.1 DB_PORT=3306 DB_USER=root DB_PASSWD=mysql1234 DB_NAME=system_manager1 #MYSQL_1配置项 [MYSQL_1] MYSQL_DB_HOST=192.168.0.2 MYSQL_DB_PORT=2200 MYSQL_DB_USER=root MYSQL_DB_PASSWD=mysql123456 MYSQL_DB_NAME=bigdata1 MYSQL_INIT_SQL='set slave;stop backup;' #REDIS配置项 [REDIS] DB_HOST=192.168.0.1 DB_PORT=6379 DB_ID=4 DB_PASSWD=redis1234
方式一:先试使用grep获取配置项的开始行、结束行。
# grep -n -E '^\[' config.ini |grep -A 1 "\[MYSQL\]"|awk -F ':' '{print $1}'|xargs2 10# grep -n -E '^\[' config.ini |grep -A 1 "\[REDIS\]"|awk -F ':' '{print $1}'|xargs19
在使用sed根据开始行、结束行获取实际配置
# sed -n "2,10 s/DB_HOST=//p" config.ini192.168.0.1# sed -n "19,$ s/DB_PORT=//p" config.ini6379
方式二:使用正则匹配唯一的配置项名称,并显示实际配置
# sed -r -n 's/(^MYSQL_INIT_SQL=)(.*)$/\2/p' config.ini'set slave;stop backup;'# sed -r -n 's/(^MYSQL_DB_HOST=)(.*)$/\2/p' config.ini192.168.0.2
完整脚本如下:
# cat config.sh#!/bin/bashset -eexit_script(){ exit 1}if [ "$#" = 0 ]; then echo "参数错误,命令格式为: ./config.sh configfile" exit_scriptelse configPath=$1fifunction get_line_num(){ local configKey=$1 grep -n -E '^\[' ${configPath} |grep -A 1 "\[${configKey}\]"|awk -F ':' '{print $1}'|xargs}function get_config(){ #local configPath=$1 local configKey=$1 local configName=$2 local line_num=$(get_line_num $configKey) local startLine=$(echo $line_num |awk '{print $1}') local endLine=$(echo $line_num|awk '{print $2}') if [ ${endLine} ];then sed -n "${startLine},${endLine} s/${configName}=//p" ${configPath} else sed -n "${startLine},$ s/${configName}=//p" ${configPath} fi}if [ -f $configPath ];then MYSQL_DB_HOST=$(get_config MYSQL DB_HOST)else echo ${configPath}"文件不存在,请检查配置文件是否存在" exit_scriptfiMYSQL_DB_PASSWD=$(get_config MYSQL DB_PASSWD)MYSQL_DB_USER=$(get_config MYSQL DB_USER)REDIS_DB_HOST=$(get_config REDIS DB_HOST)REDIS_DB_PASSWD=$(get_config REDIS DB_PASSWD)MYSQL_DB_HOST=$(sed -r -n 's/(^MYSQL_DB_HOST=)(.*)$/\2/p' $configPath)MYSQL_DB_NAME=$(sed -r -n 's/(^MYSQL_DB_NAME=)(.*)$/\2/p' $configPath)INIT_SQL=$(sed -r -n 's/(^MYSQL_INIT_SQL=)(.*)$/\2/p' $configPath)echo "MYSQL_DB_HOST="${MYSQL_DB_HOST}echo "MYSQL_DB_PASSWD="${MYSQL_DB_PASSWD}echo "MYSQL_DB_USER="${MYSQL_DB_USER}echo "REDIS_DB_HOST="${REDIS_DB_HOST}echo "REDIS_DB_PASSWD="${REDIS_DB_PASSWD}echo "-----------------分割线-------------"echo "使用sed读取配置:MYSQL_DB_HOST="${MYSQL_DB_HOST}echo "使用sed读取配置:MYSQL_DB_NAME="${MYSQL_DB_NAME}echo "使用sed读取配置:MYSQL_INIT_SQL="${INIT_SQL}
实际执行结果:
# ./config.sh config.i
config.i文件不存在,请检查配置文件是否存在# ./config.sh config.ini
MYSQL_DB_HOST=192.168.0.2
MYSQL_DB_PASSWD=mysql1234
MYSQL_DB_USER=root
REDIS_DB_HOST=192.168.0.1
REDIS_DB_PASSWD=redis1234
-----------------分割线-------------
使用sed读取配置:MYSQL_DB_HOST=192.168.0.2
使用sed读取配置:MYSQL_DB_NAME=bigdata1
使用sed读取配置:MYSQL_INIT_SQL='set slave;stop backup;'
“shell怎么读取配置文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341