Shell 成功从配置文件加载配置,但将这些值连接到sqlurl字符串时失败
在一个项目中,我使用shell脚本访问和操作MySQL 首先,我在shell脚本中编写了连接mysql的ip、端口、用户名、密码,一切正常!然后,我想在配置文件中配置ip、端口、用户名和密码,但失败了。事实上,从配置文件加载ip、端口、用户名和密码是成功的,但将这些值连接到sqlurl字符串时失败 ========================================================= 第一种方法。 [守则]Shell 成功从配置文件加载配置,但将这些值连接到sqlurl字符串时失败,shell,Shell,在一个项目中,我使用shell脚本访问和操作MySQL 首先,我在shell脚本中编写了连接mysql的ip、端口、用户名、密码,一切正常!然后,我想在配置文件中配置ip、端口、用户名和密码,但失败了。事实上,从配置文件加载ip、端口、用户名和密码是成功的,但将这些值连接到sqlurl字符串时失败 ========================================================= 第一种方法。 [守则] IPADDRESS="127.0.0.1" PORT
IPADDRESS="127.0.0.1"
PORT=3306
USER="abc"
PASSWORD="abc123"
echo "IPADDRESS: $IPADDRESS"
echo "PORT: $PORT"
echo "USER: $USER"
echo "PASSWORD: $PASSWORD"
echo ""
SQLURL="-h$IPADDRESS -P$PORT -u$USER -p$PASSWORD"
echo "SQLURL = $SQLURL"
echo ""
[输出]
IPADDRESS: 127.0.0.1
PORT: 3306
USER: abc
PASSWORD: abc123
SQLURL = -h127.0.0.1 -P3306 -uabc -pabc123
configfile = config.ini
IPADDRESS: 127.0.0.1
PORT: 3306
USER: abc
PASSWORD: abc123
-pabc123-h127.0.0.1
IPADDRESS: 127.0.0.1
PORT: 3306
USER: abc
PASSWORD: abc123
-pabc123-h127.0.0.1
=========================================================
第二种方法。
[配置文件]
配置文件名为config.ini,内容为:
IPADDRESS=127.0.0.1
PORT=3306
USER=abc
PASSWORD=abc123
[守则]
# method 2.1 use the function I wrote myself
# get_config_value_by_key $filename $key
function get_config_value_by_key() {
__filename=$1
__key=$2
while read line; do
key=`echo $line|awk -F '=' '{print $1}'`
value=`echo $line|awk -F '=' '{print $2}'`
if [ $key == $__key ]; then
echo $value
fi
done < $__filename
}
configfile="config.ini"
echo "configfile = $configfile"
echo ""
IPADDRESS="`get_config_value_by_key $configfile "IPADDRESS"`"
PORT=`get_config_value_by_key $configfile "PORT"`
USER="`get_config_value_by_key $configfile "USER"`"
PASSWORD="`get_config_value_by_key $configfile "PASSWORD"`"
echo "IPADDRESS: $IPADDRESS"
echo "PORT: $PORT"
echo "USER: $USER"
echo "PASSWORD: $PASSWORD"
echo ""
SQLURL="-h$IPADDRESS -P$PORT -u$USER -p$PASSWORD"
echo "SQLURL = $SQLURL"
echo ""
# method 2.2 use sed
IPADDRESS=`sed -n -e 's/^\s*IPADDRESS\s*=\s*//p' $configfile`
PORT=`sed -n -e 's/^\s*PORT\s*=\s*//p' $configfile`
USER=`sed -n -e 's/^\s*USER\s*=\s*//p' $configfile`
PASSWORD=`sed -n -e 's/^\s*PASSWORD\s*=\s*//p' $configfile`
echo "IPADDRESS: $IPADDRESS"
echo "PORT: $PORT"
echo "USER: $USER"
echo "PASSWORD: $PASSWORD"
echo ""
SQLURL="-h$IPADDRESS -P$PORT -u$USER -p$PASSWORD"
echo "SQLURL = $SQLURL"
echo ""
=====================================================
比较
正确的sqlurl输出是“sqlurl=-h127.0.0.1-P3306-uabc-pabc123”
错误的sqlurl输出为“-pabc123-h127.0.0.1”或其他内容,丢失了大部分内容。通常情况下,文件
config.ini
中有DOS行结尾CR
NL
。在配置文件上运行dos2unix
会有所帮助。对于方法2.1,消除CR
的另一个简单方法是在代码中设置IFS=$'\r'
。通常情况下,文件config.ini
中有DOS行结尾CR
NL
。在配置文件上运行dos2unix
会有所帮助。对于方法2.1,另一种摆脱CR
的简单方法是在代码中设置IFS=$'\r'