![](/img/trans.png)
[英]bash script not executing mysql command with values passed as variables
[英]MySQL Bash script with variables
如何在 bash 腳本中執行多個 SQL 查詢?
我讀了這兩個前幾年的帖子:
他們帶來了一些澄清,但仍有一些我不明白的地方。
我有多個查詢要刪除有關定義了 subject_id 的主題的信息。 不幸的是,我需要運行所有這些,因為該表不在“級聯”模式下。
有沒有辦法創建一個 bash 腳本,我可以在其中使用“用戶給定”變量(我的意思是例如 [ read -p 'Subject ID' SUBJECT_ID
]),該變量將在每個內部用作 subject_id查詢? 我是否仍然需要對此進行調整:
mysql -h "server-name" -u root "password" "database-name" < "filename.sql"
或者有沒有辦法只運行這個腳本並連接到其中的 db from.cnf 文件?
上面有兩個問題。 一個是如何將 bash 變量放入 SQL 腳本中。 我會這樣做:
read -p 'Subject ID' SUBJECT_ID
mysql -e "SET @subject = '${SUBJECT_ID}'; source filename.sql;"
Bash 將在將${SUBJECT_ID}
用作mysql -e
命令的參數之前將其擴展為字符串。 因此,MySQL 變量被分配了 SUBJECT_ID 的字符串值。
如果 SUBJECT_ID 可能包含文字單引號字符,這將很棘手:所以我建議使用 Bash 語法進行字符串替換,以將其中的每個單引號變成兩個單引號:
mysql -e "SET @subject = '${SUBJECT_ID//'/''}'; source filename.sql;"
請注意,您必須在文件名后面加上分號。
第二個問題是關於指定主機、用戶和密碼。 我建議將這些放入選項文件中:
[client]
host=server-name
user=root
password=xyzzy
然后當您調用 mysql 客戶端時:
mysql --defaults-extra-file myoptions.cnf -e '...'
這是避免將明文密碼放在命令行上的好主意。
有關選項文件的更多詳細信息,請閱讀https://dev.mysql.com/doc/refman/8.0/en/option-files.html 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.