我试图创建一个运行sql查询的bash shell脚本,然后再创建一个在特定时间运行它的cronjob。
我创建了我的bash脚本,见下文
mysql -u $host -D $dbname -u $user -p$password -e $mySqlQuery
我将-u -D -p -e全部包装在变量中。我也将其更改为可执行文件。当我运行它。它给出了输出说明。没有找到指令。谁能告诉我我犯的错误?
下面是bash脚本
host="host"
user="user"
dbname="database"
password="password"
mySqlQuery = "SELECT *
FROM invoice i
JOIN item it
ON it.invoice_id = i.id
JOIN user u
ON i.user_id = u.id
JOIN gateway_response gr
ON gr.invoice_id = i.id
WHERE i.created_at >= '2019-03-01 00:00:00' and
i.created_at <= '2019-03-17 23:59:59' and i.status=9"
mysql -u $host -D $dbname -u $user -p$password -e $mySqlQuery
以下是我运行它时收到的错误。
/home/chris2kus/givingDetectRun.sh: line 8: mySqlQuery: command not found /home/chris2kus/givingDetectRun.sh: line 20: mysql: command not found –
答案 0 :(得分:1)
Application.Calculation
和变量名=
周围不能有空格。
此外,我建议您将变量用双引号引起来,即使用“ $ host”而不是仅使用$ host。
答案 1 :(得分:0)
您可以编写这样的文件和 chmod 755 filename.sh :
#!/bin/bash
host="localhost"
dbname="test"
user="root"
password="xxxxxxxxxx"
mySqlQuery="select *
from col;"
mysql -u $host -D $dbname -u $user -p$password -e "$mySqlQuery"
样品
$chmod 755 testmysql.sh
$
$ ./testmysql.sh
+----+------+------+------+
| id | Col1 | Col2 | Col3 |
+----+------+------+------+
| 1 | 1 | 2 | 3 |
| 2 | 2 | 3 | 4 |
| 3 | 3 | 4 | 5 |
+----+------+------+------+
$
答案 2 :(得分:0)
对于初学者,请确保您的第5行看起来像
mySqlQuery="SELECT..."
(请注意赋值运算符两边都没有空格)
几秒钟内,尝试重新格式化整个MySQL查询以使其适合单行。 (也许是Heidi,因为这是一个查询,因为这样可以使您至少在语法上避免错误)
对于三分之二,一旦确认bash能够按预期运行,请添加\ n以告知bash您正在下一行继续执行该命令
优化前的原型制作。在运行之前先运行它。