【问题标题】:Dynamic Shell Variable substitution动态外壳变量替换
【发布时间】:2013-01-29 14:11:55
【问题描述】:

我有一个关于 Shell 变量替换的问题。

要求: 我需要在 mysql db 中插入一些东西。而且我不想在主 shell 中编写插入脚本,所以我想将插入 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;"`

问题:

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

非常感谢!!!

【问题讨论】:

  • 在你的main.sh中,我看到了$sql,不应该是$SQL吗?
  • 是的,你是对的。这是一个错误。

标签: mysql shell


【解决方案1】:

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

示例:

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)

【讨论】:

  • 谢谢!我想我明白你说的。也许我应该用正常的方式在 main.sh 中编写 sql。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多