[Shell] Спасение персонажей - PullRequest
0 голосов
/ 20 января 2012

Я пытаюсь выполнить простой 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''

Ответы [ 2 ]

0 голосов
/ 20 января 2012

Похоже, проблема не в экранировании оболочки, а в синтаксисе MySQL SELECT.Вы запрашиваете работу в автономном клиенте MySQL?

0 голосов
/ 20 января 2012

Простое решение - поместить команду, которую вы хотите выполнить, в отдельный скрипт:

#!/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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...