bash脚本中的特殊字符

时间:2013-06-06 16:01:02

标签: mysql linux bash

我有一个bash脚本,其中包含以下行

mysql -uusername -ppassword -e 'UPDATE \'table-name.config\' SET value=1234567890 WHERE action_code=102 AND name=\'last_updated_date\';'

但我得到

./hybrid_telepath/install: line 856: unexpected EOF while looking for matching `''
./hybrid_telepath/install: line 872: syntax error: unexpected end of file
显然我的角色有问题而且不能很好地关闭这条线。

知道如何在bash中做到这一点吗?

如果我将其更改为

mysql -uusername -ppassword -e "UPDATE `table-name`.`config` SET value=1312626266 WHERE action_code=102 AND name='last_updated_date';"

我得到了

line 1: 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 'SET value=1312626266 WHERE action_code=102 AND name=last_updated_date' at line 1

由于

4 个答案:

答案 0 :(得分:2)

转义序列在单引号内不起作用。对你的最外面的引号使用双引号,然后你不需要在单引号内转义:

mysql -uusername -ppassword -e "UPDATE 'table-name.config' SET value=1234567890 WHERE action_code=102 AND name='last_updated_date';"

答案 1 :(得分:1)

上一张海报是正确的。除了建议您使用双引号之外,您可能还想分别开始构建queryString。这种做法将为您提供更好的服务,因为您可以更好地编写脚本(并且希望能够继续使用像Python这样的东西)。在脚本中对数据库凭据进行硬编码也是一种不好的做法。请注意,您可以在其他地方(即,在另一个脚本中)定义这些值,然后只需获取该脚本。这使您的代码模块化。更好的是,编写函数,源代码和重用。这是一个例子:

#!/bin/bash
. /etc/myDbCreds

myQuery="select * from foo where bar ='snafu';"

mysql -u $myUser -p${myPass} -e $myQuery

答案 2 :(得分:0)

试试这个:

mysql -uusername -ppassword -e "UPDATE \'table-name.config\' SET value=1234567890 WHERE action_code=102 AND name=\'last_updated_date\';"

答案 3 :(得分:0)

我有一个关于mysql cmd的-e“的类似问题。

这看起来很正常:

$ mysql -h vip0 -u root -pqwerty -e "show databases;" 
+--------------------+ 
| Database           | 
+--------------------+ 
| information_schema | 
| mysql              | 
| performance_schema | 
+--------------------+ 

但是如果我想通过ssh执行它,它就不起作用了:

$ ssh g1 --  mysql -hvip0 -uroot -pqwerty -e "show databases;" 
ERROR 1049 (42000): Unknown database 'databases' 

经过测试,似乎我需要逃离这个空间:

$ ssh g1 --  mysql -hvip0 -uroot -pqwerty -e "show\ databases;" 
Database 
information_schema 
mysql 
performance_schema

但我不明白为什么......