Рейтинг:1

сценарий bash — команды и переменные MySQL

флаг cn

У меня есть скрипт bash, который автоматизирует установку сервера Nextcloud.

Для запуска команд MySQL я использую команду mysql -e

user@hostname:~$ mysql -e "СОЗДАТЬ БАЗУ ДАННЫХ âNextcloudDataBaseNameâ"

Я хотел бы сохранить имя БД, имя пользователя, пароль и т. д. В переменных

Как писать команды mysql -e с переменными?

user@hostname:~$ mysql -e "СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ â$UserNameâ@'localhost', ИДЕНТИФИЦИРОВАННОГО BY $UserPassâ"

user@hostname:~$ mysql -e "СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ ${UserName}@'localhost', ИДЕНТИФИЦИРОВАННОГО ${UserPass}"

Две приведенные выше команды не выполняются

Сообщение об ошибке с паролем пользователя (тестовый пароль):

ОШИБКА 1064 (42000) в строке 1: ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с «qwerty1234»

Этот синтаксис, кажется, работает:

user@hostname:~$ mysql -e "СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ '${DbUserName}'@'localhost', ИДЕНТИФИЦИРОВАННОГО '${DbUserPass}'"

Простые кавычки вокруг имен переменных, но является ли это лучшим синтаксисом, лучшей практикой?

Спасибо :-)

флаг ua
ОСТЕРЕГАЙТЕСЬ: Если в пароле есть совершенное, bash выдаст вам синтаксическую ошибку.
Рейтинг:0
флаг cn

Вот так (с здесь-док):

mysql<<EOF
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ '$UserName'@'localhost', ИДЕНТИФИЦИРОВАННОГО '$UserPass';
EOF

Научитесь правильно цитировать в оболочке, это очень важно:

"Двойная кавычка" каждого литерала, который содержит пробелы/метасимволы и каждый расширение: "$вар", "$(команда "$var")", "${массив[@]}", "а и б". Использовать 'одинарные кавычки' для кода или литерала $'s: 'Стоит 5 долларов США', ssh host 'эхо "$HOSTNAME"'. Видеть
http://mywiki.wooledge.org/Цитаты
http://mywiki.wooledge.org/Аргументы
http://wiki.bash-hackers.org/syntax/words

Maxime avatar
флаг cn
Спасибо, Жиль, с Here Doc все работает. Merci beaucoup tout fonctionne avec Here Doc et c'est plus propre!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.