Почему я получаю эту ошибку при попытке извлечь данные из базы данных MySQL с помощью bash script в Linux?

#mysql #linux #bash #database-connection

#mysql #linux #bash #подключение к базе данных

Вопрос:

Я пытаюсь получить адрес электронной почты из базы данных MySQL.

 #!/bin/bash
MYSQLHOST="192.168.1.1"                                               
MYSQLDB="nuni"
MYSQLUSER="root"
MYSQLPASS="rootpass"
MYSQLOPTS="--user=${MYSQLUSER} --password=${MYSQLPASS} --host=${MYSQLHOST} ${MYSQLDB}"
EMAIL=echo "SELECT email FROM Edsrn WHERE userid = 1235" | mysql ${MYSQLOPTS}
echo "E-mail: $EMAIL"
  

Что с этим не так? Я говорю «команда не найдена». Пожалуйста, помогите!

Ответ №1:

Я рекомендую использовать -e параметр для оценки операторов SQL вместо этого. Это должно быть то, что вы ищете:

 #!/bin/bash
MYSQLHOST="192.168.1.1"                                               
MYSQLDB="nuni"
MYSQLUSER="root"
MYSQLPASS="rootpass"
MYSQLOPTS="-s --user=${MYSQLUSER} --password=${MYSQLPASS} --host=${MYSQLHOST} ${MYSQLDB}  -e "
EMAIL=$(mysql ${MYSQLOPTS} "SELECT email FROM Edsrn WHERE userid = 1235" | tail -n 1)
echo "E-mail: $EMAIL"
  

Обратите внимание, что tail это необходимо, поскольку вывод из mysql выглядит следующим образом:

 column
value
  

Ответ №2:

Он пытается запуститься, "SELECT email FROM Edsrn WHERE userid = 1235" с $EMAIL установленным значением «echo». Если вы хотели, чтобы результат вашей команды был введен $EMAIL , то у вас неправильный синтаксис.

 EMAIL=$(echo "SELECT email FROM Edsrn WHERE userid = 1235" | mysql ${MYSQLOPTS})
  

Также, запись часто задаваемых вопросов по BASH # 50.