我正在尝试创建一个运行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 –
=
周围必须没有空格,并且变量名称mySqlQuery
。
另外,我建议您将变量包裹在双引号上,即使用" $ host"代替$ host。
您可以编写这样的文件, 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 |
+----+------+------+------+
$
对于初学者,请确保您的行5看起来像 mySqlQuery="SELECT..."
(请注意,分配运算符的两侧都没有空格)
几秒钟,请尝试重新格式化整个MySQL查询以适合一行。(也许是Heidi,因为这是一个查询,因为这将使您至少在避免错误中保持语法)
对于三分之二,一旦确认bash按预期运行,请添加 n告诉bash您在下一个行中继续命令
优化之前的原型制作。在使其飞行之前,要它运行。