Я хочу подключиться к mysql databse и выполнить некоторые запросы и экспортировать его результат в varibale, и все это нужно сделать полностью с помощью сценария bash
У меня есть код фрагмента, но он не работает.
#!/bin/bash
BASEDIR=$(dirname $0)
cd $BASEDIR
mysqlUser=n_userdb
mysqlPass=d2FVR0NA3
mysqlDb=n_datadb
result=$(mysql -u $mysqlUser -p$mysqlPass -D $mysqlDb -e "select * from confs limit 1")
echo "${result}" >> a.txt
в чем проблема?
Проблема была решена в чате, используя правильный пароль.
Если вы хотите получить только данные, используйте mysql
с -NB
(или --skip-column-names
и --batch
).
Кроме того, сценарий должен указывать разложения переменных, или будут проблемы с именами пользователей/паролями, содержащими символы, которые являются особыми для оболочки. Кроме того, имена переменных верхнего регистра обычно зарезервированы для системных переменных.
#!/bin/sh
basedir=$(dirname "$0")
mysqlUser='n_userdb'
mysqlPass='d2FVR0NA3'
mysqlDb='n_datadb'
cd "$basedir" &&
mysql -NB -u "$mysqlUser" -p"$mysqlPass" -D "$mysqlDb" \
-e 'select * from confs limit 1' >a.txt 2>a-err.txt
В идеале, вы должны использовать файл my.cnf
для настройки имени пользователя и пароля.
См. Например,
Сделай это:
result=$(mysql -u $mysqlUser -p$mysqlPass -D $mysqlDb -e "select * from confs limit 1" | grep '^\|' | tail -1)
Операция $() Bash имеет проблемы с обработкой переменных, которые содержат несколько строк, поэтому вышеупомянутый взломать только интересную часть: данные
mysql
в файл напрямую? Кроме того, что не работает и каким образом (сообщения об ошибках?). Вы также должны заключить в кавычки все расширения переменных.