shell怎么读取配置文件

其他教程   发布日期:2025年02月21日   浏览次数:201

本篇内容介绍了“shell怎么读取配置文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在编写启动脚本时,涉及到读取配置文件,特地记录下shell脚本读取启动文件的方式。主要提供两种格式的读取方式,方式一配置文件采用“[]”进行分区,方式二配置文件中需要有唯一的配置项名称。

配置文件格式如下:

  1. # cat -n config.ini
  2. #MYSQL配置项
  3. [MYSQL]
  4. DB_HOST=192.168.0.1
  5. DB_PORT=3306
  6. DB_USER=root
  7. DB_PASSWD=mysql1234
  8. DB_NAME=system_manager1
  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. #REDIS配置项
  18. [REDIS]
  19. DB_HOST=192.168.0.1
  20. DB_PORT=6379
  21. DB_ID=4
  22. DB_PASSWD=redis1234

方式一:先试使用grep获取配置项的开始行、结束行。

  1. # grep -n -E '^[' config.ini |grep -A 1 "[MYSQL]"|awk -F ':' '{print $1}'|xargs
  2. 2 10
  3. # grep -n -E '^[' config.ini |grep -A 1 "[REDIS]"|awk -F ':' '{print $1}'|xargs
  4. 19

在使用sed根据开始行、结束行获取实际配置

  1. # sed -n "2,10 s/DB_HOST=//p" config.ini
  2. 192.168.0.1
  3. # sed -n "19,$ s/DB_PORT=//p" config.ini
  4. 6379

方式二:使用正则匹配唯一的配置项名称,并显示实际配置

  1. # sed -r -n 's/(^MYSQL_INIT_SQL=)(.*)$/2/p' config.ini
  2. 'set slave;stop backup;'
  3. # sed -r -n 's/(^MYSQL_DB_HOST=)(.*)$/2/p' config.ini
  4. 192.168.0.2

完整脚本如下:

  1. # cat config.sh
  2. #!/bin/bash
  3. set -e
  4. exit_script(){
  5. exit 1
  6. }
  7. if [ "$#" = 0 ]; then
  8. echo "参数错误,命令格式为: ./config.sh configfile"
  9. exit_script
  10. else
  11. configPath=$1
  12. fi
  13. function get_line_num(){
  14. local configKey=$1
  15. grep -n -E '^[' ${configPath} |grep -A 1 "[${configKey}]"|awk -F ':' '{print $1}'|xargs
  16. }
  17. function get_config(){
  18. #local configPath=$1
  19. local configKey=$1
  20. local configName=$2
  21. local line_num=$(get_line_num $configKey)
  22. local startLine=$(echo $line_num |awk '{print $1}')
  23. local endLine=$(echo $line_num|awk '{print $2}')
  24. if [ ${endLine} ];then
  25. sed -n "${startLine},${endLine} s/${configName}=//p" ${configPath}
  26. else
  27. sed -n "${startLine},$ s/${configName}=//p" ${configPath}
  28. fi
  29. }
  30. if [ -f $configPath ];then
  31. MYSQL_DB_HOST=$(get_config MYSQL DB_HOST)
  32. else
  33. echo ${configPath}"文件不存在,请检查配置文件是否存在"
  34. exit_script
  35. fi
  36. MYSQL_DB_PASSWD=$(get_config MYSQL DB_PASSWD)
  37. MYSQL_DB_USER=$(get_config MYSQL DB_USER)
  38. REDIS_DB_HOST=$(get_config REDIS DB_HOST)
  39. REDIS_DB_PASSWD=$(get_config REDIS DB_PASSWD)
  40. MYSQL_DB_HOST=$(sed -r -n 's/(^MYSQL_DB_HOST=)(.*)$/2/p' $configPath)
  41. MYSQL_DB_NAME=$(sed -r -n 's/(^MYSQL_DB_NAME=)(.*)$/2/p' $configPath)
  42. INIT_SQL=$(sed -r -n 's/(^MYSQL_INIT_SQL=)(.*)$/2/p' $configPath)
  43. echo "MYSQL_DB_HOST="${MYSQL_DB_HOST}
  44. echo "MYSQL_DB_PASSWD="${MYSQL_DB_PASSWD}
  45. echo "MYSQL_DB_USER="${MYSQL_DB_USER}
  46. echo "REDIS_DB_HOST="${REDIS_DB_HOST}
  47. echo "REDIS_DB_PASSWD="${REDIS_DB_PASSWD}
  48. echo "-----------------分割线-------------"
  49. echo "使用sed读取配置:MYSQL_DB_HOST="${MYSQL_DB_HOST}
  50. echo "使用sed读取配置:MYSQL_DB_NAME="${MYSQL_DB_NAME}
  51. 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怎么读取配置文件的详细内容,更多关于shell怎么读取配置文件的资料请关注九品源码其它相关文章!