欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell讀取配置文件的方式sed命令詳解

 更新時(shí)間:2023年04月14日 14:19:04   作者:霜學(xué)  
在編寫(xiě)啟動(dòng)腳本時(shí),涉及到讀取配置文件,特地記錄下shell腳本讀取啟動(dòng)文件的方式,這篇文章主要介紹了shell讀取配置文件-sed命令,需要的朋友可以參考下

在編寫(xiě)啟動(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)的開(kāi)始行、結(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ù)開(kāi)始行、結(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)文章

  • 獲取站點(diǎn)的各類響應(yīng)時(shí)間(dns解析時(shí)間,響應(yīng)時(shí)間,傳輸時(shí)間)

    獲取站點(diǎn)的各類響應(yīng)時(shí)間(dns解析時(shí)間,響應(yīng)時(shí)間,傳輸時(shí)間)

    有時(shí)候?yàn)榱藴y(cè)試網(wǎng)絡(luò)情況,需要返回每個(gè)階段的耗時(shí)時(shí)間,比如DNS解析耗時(shí),建立連接所消耗的時(shí)間,從建立連接到準(zhǔn)備傳輸所使用的時(shí)間,從建立連接到傳輸開(kāi)始所使用的時(shí)間,整個(gè)過(guò)程耗時(shí),下載的數(shù)據(jù)量,下載速度,上傳數(shù)據(jù)量,上傳速度等等
    2014-03-03
  • Shell腳本模擬多線程功能分享

    Shell腳本模擬多線程功能分享

    這篇文章主要介紹了Shell腳本模擬多線程功能分享,本文直接給出實(shí)現(xiàn)代碼,代碼中有詳細(xì)的注釋,需要的朋友可以參考下
    2014-11-11
  • shell批量curl接口腳本的簡(jiǎn)單實(shí)現(xiàn)方法

    shell批量curl接口腳本的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要跟大家介紹了關(guān)于shell批量curl接口腳本的簡(jiǎn)單實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用shell具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • linux 中g(shù)rep 匹配制表符 和 換行符的命令

    linux 中g(shù)rep 匹配制表符 和 換行符的命令

    這篇文章主要介紹了linux 中g(shù)rep 匹配制表符 和 換行符的命令,需要的朋友可以參考下
    2018-07-07
  • awk統(tǒng)計(jì)文件中某關(guān)鍵詞出現(xiàn)次數(shù)的命令

    awk統(tǒng)計(jì)文件中某關(guān)鍵詞出現(xiàn)次數(shù)的命令

    awk統(tǒng)計(jì)文件中某關(guān)鍵詞出現(xiàn)的次數(shù),供朋友們學(xué)習(xí)參考
    2013-02-02
  • 詳解shell中腳本參數(shù)傳遞的兩種方式

    詳解shell中腳本參數(shù)傳遞的兩種方式

    這篇文章主要介紹了詳解shell中腳本參數(shù)傳遞的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Linux shell命令統(tǒng)計(jì)某列去重后的值

    Linux shell命令統(tǒng)計(jì)某列去重后的值

    今天小編就為大家分享一篇關(guān)于Linux shell命令統(tǒng)計(jì)某列去重后的值,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • linux命令返回值的含義解析

    linux命令返回值的含義解析

    這篇文章主要介紹了linux命令返回值的含義,linux命令執(zhí)行后無(wú)論成功與否都有一個(gè)返回值,如果為 0,則表示命令執(zhí)行成功,其它值則表示錯(cuò)誤,具體代碼及含義介紹大家通過(guò)本文學(xué)習(xí)下吧
    2018-06-06
  • 詳解shell 遍歷文件夾內(nèi)所有文件并打印絕對(duì)路徑

    詳解shell 遍歷文件夾內(nèi)所有文件并打印絕對(duì)路徑

    本篇文章主要介紹了shell 遍歷文件夾內(nèi)所有文件并打印絕對(duì)路徑,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • 消耗CPU資源的shell腳本

    消耗CPU資源的shell腳本

    使用死循環(huán)消耗CPU資源,如果服務(wù)器是有多顆CPU,可以選擇消耗多少顆CPU的資源
    2013-08-08

最新評(píng)論