shell EOF不能与mysql命令一起使用

时间:2014-06-26 12:41:48

标签: mysql bash shell

我改变了所有"'"和"`"到了'''有些错误消失但仍然不对 我编辑下面的代码和错误

我的shell脚本的一部分是这样的

#!/bin/bash
echo change $1 database
echo "Input dataBase password:"
read dbPasswd

if [ $1="Aa" ]; then
echo "Input old Aa ip:"
read oldAaip
echo "Input new Aa ip:"
read newAaip


mysql -uroot -p$dbPasswd << EOF
use Test_db
update "Test_controller" set node_ip = "$newAaip" where node_ip="$oldAaip";
update "Test_cluster" set admin_ip = "$newAaip" where admin_ip="$oldAaip";
update "Test_physical_volume" set connect_path ="$newAaip" where connect_path ="$oldAaip";
commit;
EOF

我在./updateDB.sh Aa

之后收到以下错误
change Aa database
Input dataBase password:
123456
Input old Aa ip:
1.1.1.1
Input new Aa ip:
1.1.1.2
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"Test_controller" set node_ip = "1.1.1.2" where node_ip="1.1.1.1"' at line 1
有人会告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

Backtick不是引号,评估反引号之间的文本。所以bash试图在你的全局命令之前评估反引号之间的命令。

对于您的表名,您不需要转义表名,因为它不是保留名称。但如果你需要它,你还必须使用\ caracter来逃避反引号。