读取配置文件并将其赋值到脚本变量中

读取配置文件并将其赋值到脚本变量中

我需要读取配置文件并分配到脚本变量中并省略注释行,

示例配置文件:

# This is sample configuration file
SRV_IP=192.168.1.12
DB_IP=192.168.1.10
DB_PORT=3306

我需要读取这个配置文件并进入一个shell脚本。

像下面这样

脚本示例

#!/bin/bash

echo " Reading configuration file $1 "

echo " Server IP = $SRV_IP
    Database IP = $DB_IP
    Database Port = $DB_PORT"

上述脚本执行后输出如下:

./read_conf.sh 示例.conf

输出如下

Server IP = 192.168.1.12
Database IP = 192.168.1.10
Database Port = 3306

在当前 shell 内执行脚本后,或者在脚本内每个变量都具有配置文件 $SRV_IP 中指定的值,其值为 192.168.1.12,而无需使用 shell 内置命令源。

无论何时在脚本中使用变量,它都必须具有配置文件中指定的值。

答案1

通过使用下面的脚本来实现。

#!/bin/bash

echo " Reading configuration file $1 "

conf_file=$1

while IFS= read -r line; do
  line=${line%%#*}
  case $line in
    *=*)
      var=${line%%=*}
      case $var in
        *[!A-Z_a-z]*)
          echo "Warning: invalid variable name $var ignored" >&2
          continue;;
      esac
      if eval '[ -n "${'$var'+1}" ]'; then
        echo "Warning: variable $var already set, redefinition ignored" >&2
        continue
      fi
      line=${line#*=}
      eval $var='"$line"'
  esac
done <"$conf_file"

echo "Current values after reading configuration file"

echo " Server IP = $SRV_IP
    Database IP = $DB_IP
    Database Port = $DB_PORT"

exit 0

相关内容