[英]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.