shell讀取配置文件的方式sed命令詳解
在編寫啟動(dòng)腳本時(shí),涉及到讀取配置文件,特地記錄下shell腳本讀取啟動(dòng)文件的方式。主要提供兩種格式的讀取方式,方式一配置文件采用“[]”進(jìn)行分區(qū),方式二配置文件中需要有唯一的配置項(xiàng)名稱。
配置文件格式如下:
# cat -n config.ini #MYSQL配置項(xiàng) [MYSQL] DB_HOST=192.168.0.1 DB_PORT=3306 DB_USER=root DB_PASSWD=mysql1234 DB_NAME=system_manager1 #MYSQL_1配置項(xiàng) [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配置項(xiàng) [REDIS] DB_HOST=192.168.0.1 DB_PORT=6379 DB_ID=4 DB_PASSWD=redis1234
方式一:先試使用grep獲取配置項(xiàng)的開始行、結(jié)束行。
# 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根據(jù)開始行、結(jié)束行獲取實(shí)際配置
# sed -n "2,10 s/DB_HOST=//p" config.ini 192.168.0.1 # sed -n "19,$ s/DB_PORT=//p" config.ini 6379
方式二:使用正則匹配唯一的配置項(xiàng)名稱,并顯示實(shí)際配置
# 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 "參數(shù)錯(cuò)誤,命令格式為: ./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}"文件不存在,請(qǐng)檢查配置文件是否存在"
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}
實(shí)際執(zhí)行結(jié)果:
# ./config.sh config.i
config.i文件不存在,請(qǐng)檢查配置文件是否存在# ./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;'
到此這篇關(guān)于shell讀取配置文件-sed命令的文章就介紹到這了,更多相關(guān)shell讀取配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux shell實(shí)現(xiàn)獲取用戶輸入指定范圍的單個(gè)字符的兩種方法
用shell實(shí)現(xiàn)的,要求獲取用戶輸一個(gè)字符a-zA-Z實(shí)現(xiàn)方法如下,需要的朋友可以參考下2013-03-03
win下調(diào)用putty執(zhí)行命令腳本分享
這篇文章主要介紹了win下調(diào)用putty執(zhí)行命令腳本,可以利用這個(gè)實(shí)現(xiàn)一些自動(dòng)化的工作,需要的朋友可以參考下2014-03-03
linux命令行下使用curl命令查看自己機(jī)器的外網(wǎng)ip
Linux命令行下使用curl命令查看自己機(jī)器的外網(wǎng)ip,大家參考使用吧2013-12-12
linux設(shè)置定時(shí)任務(wù)的方法步驟
這篇文章主要介紹了linux設(shè)置定時(shí)任務(wù)的方法步驟,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05
Shell腳本實(shí)現(xiàn)復(fù)制文件到多臺(tái)服務(wù)器的代碼分享
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)復(fù)制文件到多臺(tái)服務(wù)器的代碼分享,用在多機(jī)集群環(huán)境中非常方便,需要的朋友可以參考下2014-09-09
linux 中的ls命令參數(shù)詳解及l(fā)s命令的使用實(shí)例
這篇文章主要介紹了linux 中的ls命令參數(shù)詳解及l(fā)s命令的使用實(shí)例,需要的朋友可以參考下2017-08-08
shell腳本中一鍵部署zookeeper集群服務(wù)的方法
Zookeeper是一個(gè)開源的分布式的,為分布式框架提供協(xié)調(diào)服務(wù)的Apache項(xiàng)目,這篇文章主要介紹了shell腳本一鍵部署zookeeper集群服務(wù)的方法,需要的朋友可以參考下2022-05-05

