我需要读取配置文件并分配到脚本变量中并省略注释行,
示例配置文件:
# 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