2016-01-23 92 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