2012-01-20 156 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