我想編寫一個腳本,從文件中讀取行包含:在同一執行SQL查詢
- SQL腳本的文件名,並
- 一些SQL查詢行
並啓動查詢。
有一個list.txt
文件的格式如下:
query.sql; set @var:='prod';
其中query.sql
是SQL查詢文件,如:
select *
from db
where [email protected]
我想編寫一個執行的一個bash腳本像這樣的查詢:
mysql -uroot -proot -e
"set @var:='prod';
select *
from db
where [email protected];"
這是我試過的到目前爲止:
while read line;
do app=$(echo $line | awk '{for (i=2; i <= NF; i++) printf FS$i; print NL }';
cat `echo $line | awk -F\; '{print $1}'`; echo ";");
mysql -uroot -proot -e "`echo $app`"
done < list.txt
,但我有一個SQL錯誤,因爲shell不越獄以及在query.sql
的*
字符。
調試我的代碼獲得:
$echo $app
$set @var:='prod'; select a list.txt mysql query1.sql query.sql from db where [email protected] ;
如何調整的代碼,以便有
$echo $app
$set @var:='prod'; select * from db where [email protected] ;
?
進一步詳情
有一個在awk
命令loop
,因爲文件list.txt
可能包含多個查詢,如:
query.sql; set @var:='prod'; @a=asd; @b=zxc, @...=...;
我的錯誤,只是編輯了問題(這是我在服務器上的真實查詢) –
@AlessandroBlasetti,你想要執行第二個SQL語句(在第一個';'之後),然後在第一個';',對嗎? –
@RuslanOsmanov我想執行我的最後一行:'set @var:='prod'; select * from db where system = @ var;' –