您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“shell怎么讀取配置文件”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在編寫啟動(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;'
“shell怎么讀取配置文件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。