Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 成功从配置文件加载配置,但将这些值连接到sqlurl字符串时失败_Shell - Fatal编程技术网

Shell 成功从配置文件加载配置,但将这些值连接到sqlurl字符串时失败

Shell 成功从配置文件加载配置,但将这些值连接到sqlurl字符串时失败,shell,Shell,在一个项目中,我使用shell脚本访问和操作MySQL 首先,我在shell脚本中编写了连接mysql的ip、端口、用户名、密码,一切正常!然后,我想在配置文件中配置ip、端口、用户名和密码,但失败了。事实上,从配置文件加载ip、端口、用户名和密码是成功的,但将这些值连接到sqlurl字符串时失败 ========================================================= 第一种方法。 [守则] IPADDRESS="127.0.0.1" PORT

在一个项目中,我使用shell脚本访问和操作MySQL

首先,我在shell脚本中编写了连接mysql的ip、端口、用户名、密码,一切正常!然后,我想在配置文件中配置ip、端口、用户名和密码,但失败了。事实上,从配置文件加载ip、端口、用户名和密码是成功的,但将这些值连接到sqlurl字符串时失败

=========================================================

第一种方法。 [守则]

    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'