2012-01-20 115 views
0

的转义我尝试在一个shell脚本来执行一个简单的SQL查询,但我不得不因为字符[壳牌]字符

这里的逃生麻烦的问题是线

#!/bin/sh 
su -l mysql -c 'mysql -h XXX.XXX.XX.XXX -uuser -padmin -D testBD -e "SELECT CASE MODE WHEN 0 THEN \'choix1\' WHEN 1 THEN \'choix2\' WHEN 2 THEN \'choix3\' END , count(*) FROM city GROUP BY name" > /kbd/testSelect' 

我已经测试这一点,但我得到逃避我,我不字符的错误知道如何解决 非常感谢您

line 4: syntax error near unexpected token `(' 
/kbd/test.sh: line 4: ` su -l mysql -c 'mysql -h XXX.XXX.XX.XXX -uuser -padmin -D testBD -e "SELECT CASE MODE WHEN 0 THEN \'choix1\' WHEN 1 THEN \'choix2\' WHEN 2 THEN \'choix3\' END , count(*) FROM city GROUP BY name" > /kbd/testSelect'' 
+1

请粘贴错误。 – 2012-01-20 12:36:57

+0

@Tichodrama感谢您的回复,已发布 – ulquiorra

+1

假设SQL查询正确无误,请执行以下操作:'su -l mysql -c“mysql -h XXX.XXX.XX.XXX -uuser -padmin -D testBD -e \“SELECT CASE MODE当0 THEN'choix1'当1 then'choix2'when 2 then'choix3'END,count(*)FROM city GROUP BY name \”>/kbd/testSelect“ –

回答

0

一个简单的解决方案是将要执行我命令N A单独的脚本:

#!/bin/sh 
mysql -h XXX.XXX.XX.XXX -uuser -padmin -D testBD -e "SELECT CASE MODE WHEN 0 THEN 'choix1' WHEN 1 THEN 'choix2' WHEN 2 THEN 'choix3' END , count(*) FROM city GROUP BY name" > /kbd/testSelect 

然后调用从原始脚本,脚本:

#!/bin/sh 
su -l mysql -c "/path/to/my_new_script.sh" 
+0

谢谢你的回答,但我被迫在一个文件中做所有事情。 但我保留你的解决方案在我身边 谢谢! – ulquiorra

0

我看起来问题不是由壳逃跑,但被MySQL SELECT语法造成的。你是否在独立的MySQL客户端查询工作?

+0

@Tichodrama是的,MySQL客户端没有问题,如果我只尝试这个:mysql -h XXX.XXX.XX.XXX -uuser -padmin -D testBD -e“SELECT CASE MODE when 0 then'choix1'when 1 THEN 'choix2'WHEN 2 THEN'choix3'END,count(*)FROM city GROUP BY name“>/kbd/testSelect,它可以很好地工作:p – ulquiorra