如何在shell脚本文件中嵌入MySQL查询中的BASH变量

时间:2017-02-18 18:29:52

标签: mysql bash shell variables

#!/bin/bash
fut=$(date -d "+14 days" +'%Y-%m-%d')
echo $fut
mysql -u user -ppassword base1 << "EOF"
INSERT INTO tableB SELECT * FROM tableA WHERE startdate < $fut;
....many lines of MySQL....
EOF

Mysql引擎不将$fut理解为变量。应该使用什么语法来使其工作?

2 个答案:

答案 0 :(得分:2)

我使用here-document没有问题,但是我想提出另一种可能性稍微冗长的可能性,但是当你可能需要做的不仅仅是替换变量时,它有很多优点:管道函数的输出。

#!/bin/bash

sql_statement()
{
  local fut=$(date -d "+14 days" +'%Y-%m-%d')
  echo "INSERT INTO tableB SELECT * FROM tableA WHERE startdate < $fut;"
  echo "....many lines of MySQL...."
}

mysql -u user -ppassword base1 < <(sql_statement)

在这种特定情况下不需要这样做,但允许函数具有附加逻辑(例如if块,循环...)以生成更复杂或可变的SQL语句。作为一般解决方案,它具有很好的优势。

答案 1 :(得分:1)

您需要从"

中删除EOF
#!/bin/bash
fut=$(date -d "+14 days" +'%Y-%m-%d')
echo $fut
mysql -u user -ppassword base1 << EOF
INSERT INTO tableB SELECT * FROM tableA WHERE startdate < $fut;
....many lines of MySQL....
EOF

来自bash docs

  

引用或转义“限制字符串”时无参数替换。