动态Shell变量替换

时间:2013-01-28 10:38:14

标签: mysql shell

我对Shell变量替换有疑问。

要求:   我需要在mysql db中插入一些内容。我不想在主shell中编写插入脚本,所以我想将insert sql脚本定义为变量$ SQL。 此变量和许多其他变量存储在另一个名为sql.cfg

的文件中

但是这个变量会引用另一个变量$ Value。 当我执行主shell时,$ Value将被实际值替换。

示例: 在sql.cfg中

SQL="insert into table column1,column2 values($Value1,$Value2)"
DB_NAME=dbname
DB_IP=192.168.0.x
USR=username
PWD=password
在main.sh中

. ./sql.cfg

Value1=100
Value2=200

` mysql $DB_NAME -h$DB_IP -u $USR -p$PWD -se "$SQL;"`

问题:

如何正确地用$ Value1 $ Value2替换$ sql以便我可以将它们插入到mysql db中?

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

在加载/获取sql.cfg之前,您必须在main.sh中设置Value1Value2

示例:

kent$  head *           
==> main.sh <==
#!/bin/bash
Value1=100
Value2=200
source sql.cfg
echo "$DB_NAME - $SQL"



==> sql.cfg <==
#!/bin/bash
SQL="insert into table column1,column2 values($Value1,$Value2)"
DB_NAME=dbname
DB_IP=192.168.0.x
USR=username
PWD=password

kent$  ./main.sh
dbname - insert into table column1,column2 values(100,200)

如果您真的想先加载sql.cfg并稍后在main.sh中设置该值。您可以将sql.cfg中的$ Value1,2更改为占位符,并在main.sh中根据需要替换这些值。参见示例:

kent$  head *
==> main.sh <==
#!/bin/bash
source sql.cfg

Value1=444
Value2=555

SQL=$(sed "s/:Value1/$Value1/g; s/:Value2/$Value2/g" <<<$SQL)

echo "$DB_NAME - $SQL"


==> sql.cfg <==
#!/bin/bash
SQL="insert into table column1,column2 values(:Value1,:Value2)"
DB_NAME=dbname

kent$  ./main.sh
dbname - insert into table column1,column2 values(444,555)