在shell脚本中获取MySQL Cell

时间:2009-08-28 05:14:13

标签: mysql shell

我想在shell脚本/ cron作业中执行一个MySQL命令,该命令返回动态行数,我可以从这些行中访问这些行中的特定字段。然后,我想在这些字段条目上循环执行此附加命令。

我的两个问题是:

  1. 如何将一组行(理想情况下每行中只有一个单元格)返回给shell脚本变量?

  2. 我可以编写一个返回所需信息的PHP脚本,然后将其保存到shell脚本变量中吗?如果是这样,我如何从shell运行PHP脚本并让它返回信息?

4 个答案:

答案 0 :(得分:4)

echo 'select some_column from some_table' | mysql -uusername -ppassword some_db | tail -n+2

这里要注意的几件重要事情:

  1. -p和密码之间不能有空格。如果有,它假定您没有提供密码,并以交互方式提示您输入密码。注意:某些操作系统允许其他用户查看其他用户正在运行的命令的完整命令行,因此-ppassword存在安全风险。只能在可以登录的用户全部受信任的机器上执行此操作,或者在防止此类窥探的操作系统上执行此操作,例如FreeBSD。

  2. “tail”调用忽略第一个输出行,即列名。结果从第二行开始,因此为+2。

  3. “count rows”位类似,只是你说“从some_table中选择count(*)”而不是。

答案 1 :(得分:1)

你不能只使用PHP而不是shell脚本吗?只需在你的cronjob中运行/path/to/php mycron.php而不是shellcript。

答案 2 :(得分:1)

如果您需要将所有内容保存在bash中,您也可以执行此类操作:

mysql -b -e "SELECT one_column FROM tables" | {
  read
  while [ ! -z "$REPLY" ]
  do
    # do something useful with the $REPLY variable here
    read
  done
}

(确定有一种更有效的方法)

另一种选择,使用xargs:

mysql -b -e "SELECT one_column FROM tables" | xargs usefulcommand

其中,有用命令使用内置移位函数来处理其所有命令行参数。

答案 3 :(得分:0)

您可以使用期望的工具发出查询并通过mysql客户端获取结果: Expect

它不是一个shell脚本,但你可以从shell脚本中调用它,语法非常简单,网上有很多关于如何使用expect的例子。