[英]Dynamic Shell Variable substitution
I have a question about Shell Variable substitution. 我有一个关于Shell变量替换的问题。
Requirement: I need to insert something to mysql db.And I don't want to write the insert script in main shell ,so I would like to define a insert sql script as a variable $SQL . 要求:我需要向mysql db插入一些内容。我不想在主外壳中编写插入脚本,因此我想将插入sql脚本定义为变量$ SQL。 This variable and many other variables are stored in another file named sql.cfg
此变量和许多其他变量存储在另一个名为sql.cfg的文件中
but this variable will refer another variable $Value. 但是此变量将引用另一个变量$ Value。 when i execute the main shell, the $Value will be replace by actually value。
当我执行主shell时,$ Value将被实际值替换。
Example: in sql.cfg 示例:在sql.cfg中
SQL="insert into table column1,column2 values($Value1,$Value2)"
DB_NAME=dbname
DB_IP=192.168.0.x
USR=username
PWD=password
in main.sh 在main.sh中
. ./sql.cfg
Value1=100
Value2=200
` mysql $DB_NAME -h$DB_IP -u $USR -p$PWD -se "$SQL;"`
Question: 题:
How can I substitute the $sql with $Value1 $Value2 properly so that I can insert them into to mysql db? 如何将$ sql用$ Value1 $ Value2正确替换,以便可以将它们插入到mysql数据库中?
Thanks a lot!!! 非常感谢!!!
you have to set Value1
, Value2
in your main.sh before you load/source your sql.cfg 您必须在main.sh中设置
Value1
, Value2
,然后才能加载/提供sql.cfg
example: 例:
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)
And if you really want to load the sql.cfg first and set the value in your main.sh later. 而且,如果您真的要先加载sql.cfg,然后再在main.sh中设置该值。 you could change the $Value1,2 in your sql.cfg as placeholders, and in main.sh substitute those values as you want.
您可以在sql.cfg中将$ Value1,2更改为占位符,并在main.sh中根据需要替换这些值。 See the example:
参见示例:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.