2016-01-23 43 views
-1

我做了一个SQL查询的小代码,在一个文件中有一些shell脚本,我被卡住了如何从命令行跳转到SQL查询,第二个查询不能运行:将SQL查询与shell脚本合并

file.sh

mysql -u root -pPASSWORD -D DATABASE << QUERY_INPUT 

SELECT ip FROM ban_ip; 

QUERY_INPUT 

ls -l << QUERY_INPUT // Until here is good, 
SELECT ip FROM ban_ip; // This command line does NOT run 

QUERY_INPUT 

修订的答案:

#!/bin/bash 

#Connect to DB and select ban_ip 
mysql -u root -pPASSWORD -D DB -e 'SELECT ip INTO OUTFILE “/var/lib/mysql/ip2ban.txt" FROM ban_ip WHERE ip_tables = "0"'; 

# After the Select query we need to move the file 
mv /var/lib/mysql/ip2ban.txt /root/Scripts/IPTables/autoBan/ip2ban.txt 


mysql -u root -pPASSWORD -D DB -e 'UPDATE ban_ip SET ip_tables = "1" WHERE ip_tables = "0"'; 

echo -e "Database updated with new banned IPs on $Now \nThank you for using this script" 2>&1 | sed '1!b;s/^/To: [email protected]\nSubject: New banned IPs\n\n/' | sendmail -t 

谢谢你的建议

回答

1

HEREDOC format使用标记来指示输入的结束;在你的情况下,你已经使用QUERY_INPUT作为分隔符。在第一种情况下,您将查询传递给mysql,但由于某种原因,您将输入传递给ls -l

反正你也不需要使用HEREDOC所有,只是用-e参数mysql

mysql -u root -pPASSWORD -D DATABASE -e 'SELECT ip FROM ban_ip' 
+0

我该怎么做这样的'的mysql -u根-Ppassword -D DATABASE -e' SELECT ip FROM ban_ip''然后第二行'ls -l'再次第三行'mysql -u root -pPASSWORD -D DATABASE -e'选择ip FROM ban_ip'' –

+0

我更新了新的答案,如果你可以检查if它是否正确 –

+0

看起来合理。如果您遇到问题,请打开一个新问题。 – miken32