|
在编写启动脚本时,涉及到读取配置文件,特地记录下shell脚本读取启动文件的方式。主要提供两种格式的读取方式,方式一配置文件采用“[]”进行分区,方式二配置文件中需要有唯一的配置项名称。
配置文件格式如下:
# cat -n config.ini
1 #MYSQL配置项
2 [MYSQL]
3 DB_HOST=192.168.0.1
4 DB_PORT=3306
5 DB_USER=root
6 DB_PASSWD=mysql1234
7 DB_NAME=system_manager1
8
9 #MYSQL_1配置项
10 [MYSQL_1]
11 MYSQL_DB_HOST=192.168.0.2
12 MYSQL_DB_PORT=2200
13 MYSQL_DB_USER=root
14 MYSQL_DB_PASSWD=mysql123456
15 MYSQL_DB_NAME=bigdata1
16 MYSQL_INIT_SQL='set slave;stop backup;'
17
18 #REDIS配置项
19 [REDIS]
20 DB_HOST=192.168.0.1
21 DB_PORT=6379
22 DB_ID=4
23 DB_PASSWD=redis1234- 方式一:先试使用grep获取配置项的开始行、结束行。
复制代码- # grep -n -E '^\[' config.ini |grep -A 1 "\[MYSQL\]"|awk -F ':' '{print $1}'|xargs
- 2 10
- # grep -n -E '^\[' config.ini |grep -A 1 "\[REDIS\]"|awk -F ':' '{print $1}'|xargs
- 19
复制代码 在使用sed根据开始行、结束行获取实际配置- # sed -n "2,10 s/DB_HOST=//p" config.ini
- 192.168.0.1
- # sed -n "19,$ s/DB_PORT=//p" config.ini
- 6379
复制代码 方式二:使用正则匹配唯一的配置项名称,并显示实际配置- # 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.ini
- 192.168.0.2
复制代码 完整脚本如下:- # cat config.sh
- #!/bin/bash
- set -e
- exit_script(){
- exit 1
- }
- if [ "$#" = 0 ]; then
- echo "参数错误,命令格式为: ./config.sh configfile"
- exit_script
- else
- configPath=$1
- fi
- function 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_script
- fi
- MYSQL_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;'
复制代码
来源:https://www.cnblogs.com/qiuxiao/p/17305725.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|