从bash运行mysql查询;其中查询存储在单独的文件中,其中/变量在bash中设置

时间:2012-11-15 19:09:03

标签: mysql bash

我有一个bash脚本负责查询数据库并将结果传递给文件:

date=`date +"%Y/%m/%d"`

/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema << MYSQLEOF > $output_file

  select *
  from table
  where date = $date

MYSQLEOF

现在将这个项目扩展到其他领域,为了重用性/正交性,我想把查询放在它自己的文件中并调用类似的东西:

cmd=`echo $sql_file`

/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "$cmd" > $output_file

sql文件:

  select *
  from table
  where date = $date

我无法找到我可以(在bash中)这样做,同时仍然能够在sql文件中拥有和调整变量($ date)。将.sql文件回放到bash变量中,我无法将“$ date”作为文字字符串。

bash中是否有解决方案,或者我应该研究像perl这样的东西来处理这个问题?

2 个答案:

答案 0 :(得分:1)

使用mySQL CLI的source命令。

queryfile=my_query.sql
/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "source $queryfile" > $output_file

答案 1 :(得分:1)

我找到了一个使用命令行Perl进行搜索/替换的解决方案。

Bash脚本:

date=`date +"%Y/%m/%d"`
export date

cmd=`perl -lpe 's/DATE_VAR/$ENV{date}/g' "$sql_file"`

/usr/bin/mysql -u $db_user -p$db_pass -h $db_name $db_schema -e "$cmd" > $output_file

和sql_file:

select *
from table
where date = 'DATE_VAR'