2016-11-02 5 views
0

Я новичок в разработке сценариев bash, и я занимаюсь некоторыми простыми сценариями. Я создаю скрипт, который подключается к базе данных MySQL, выполняет запрос и эхо-результаты. Это то, что я до сих пор, но я быть дано это расстраивает ошибка:Запросить базу данных MySQL из сценария bash

./testsql: line 22: syntax error near unexpected token `queryConfig="mysql -uroot -p1234 test"' 
./testsql: line 22: `queryConfig="mysql -uroot -p1234 test"' 

Это функция внутри моего сценария.

function testFunction{ 
queryConfig="mysql -uroot -p1234 test" 
hello=`$queryConfig"SELECT * FROM test_accounts;"` 
echo "Result = " $hello 
} 

Хорошо я знаю, что в идеале я не должен передавать имя пользователя и пароль в скрипт, а использовать config.sh, которые затем могут быть включены в сценарии. Также не рекомендуется использовать корень. Но здесь важно то, что я понимаю, где ошибка sytax и почему интерпретатор жалуется. Как только я получу эту работу, я могу создать config.sh и переменные соответственно. Спасибо.

ответ

1

попробовать этот

var=$(mysql database -u $user -p$password<<<"SELECT * FROM test_accounts") 
0

Эта ошибка:

./testsql: line 22: syntax error near unexpected token `queryConfig="mysql -uroot -p1234 test"' 

говорит, что строка 22 вашего Баш скрипт содержит синтаксическую ошибку (т.е. он не действует Bash). Синтаксический анализатор не считает, что вы можете сделать здесь переменное назначение. Но почему?

Вопрос находится в строке выше:

function testFunction{ 

Bash очень пробельные чувствительны к регистру, и вам не хватает пространства между вашим именем функции и { характера. Попробуйте добавить пробел, и вы решите эту синтаксическую ошибку.


Есть другие вопросы в вашем сценарии (помимо соображений безопасности вы упоминаете), что я затрону кратко:

  • Избегайте использование обратных кавычки, предпочитает $(...) для command substitution. Это легче читать и работать лучше, когда вы начинаете вложенные подстановки внутри друг друга.
  • Обратите внимание на пробелы, например. ваша следующая линия

    hello=`$queryConfig"SELECT * FROM test_accounts;"` 
    

    выполнит команду

    mysql -uroot -p1234 testSELECT * FROM test_accounts; 
    

    Обратите внимание на testSELECT там - вам не хватает пространства.

  • Обратите внимание на то, чтобы указать. Quoting in Bash сложно, но важно правильно. Есть несколько хороших best-practices для интернализации, что упрощает работу с кавычками в Bash.
Смежные вопросы