Добавление пользователя через bash в MySQL

0

Это моя первая попытка передать команду bash в терминале mysql, я делаю это много:

создавая фиктивного пользователя каждый раз, когда я устанавливаю приложение для взаимодействия с базой данных.

однако все мои попытки не удались, и вот моя строка кода:

new_user(){ mysql -u"$1" -p"$2" -e 'CREATE USER "$3"@"$4" IDENTIFIED BY "$5";
            GRANT ALL PRIVILEGES ON "$6".* TO "$3"@"$4";
            FLUSH PRIVILEGES; 
            exit;' &&
        echo 'new MySQL USER has been created ..
            name:"$3" server:"$4" password:"$5" database:"$6"' ; }

однако, это дает мне эту ошибку:

 ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version
 for the right syntax to use near '"$4".* TO "$1"@"$2"' at line 1

Я попытался использовать -e но, как показано, не повезло.

как передать переменные bash в mysql?

Обновить:

благодаря комментариям, я обновил свой код для кавычек, однако я до сих пор не могу передать переменные в терминал mysql.

new_user() {
    SQL="CREATE USER\"$3\"@\"$4\" IDENTIFIED BY \"$5\"; GRANT ALL PRIVILEGES ON \"$6\".* TO \"$3\"@\"$4\"; FLUSH PRIVILEGES; exit;"
    mysql -uroot -p1 -e "$SQL" &&
    echo new MySQL USER has been created ..  name:\"$3\" server:\"$4\" password:\"$5\" database:\"$6\"

}

  • 0
    У меня mysql в качестве псевдонима, поэтому я обновил вопрос, чтобы быть в порядке с кавычками.
  • 0
    @tadman Я передал все переменные в другой 1, как этот new_user() { SQL="CREATE USER\"$3\"@\"$4\" IDENTIFIED BY \"$5\"; GRANT ALL PRIVILEGES ON \"$6\".* TO \"$3\"@\"$4\"; FLUSH PRIVILEGES; exit;" mysql -uroot -p1 -e "$SQL" && echo new MySQL USER has been created .. name:\"$3\" server:\"$4\" password:\"$5\" database:\"$6\" } однако переменные не были переданы в MySQL
Теги:

1 ответ

1
Лучший ответ

Вы можете избежать выяснения того, как избежать кавычек, используя HEREDOC.

Для отладки, возможно, попробуйте разбить свою функцию на две части.

gen_user_sql(){
  cat <<HEREDOC
   CREATE USER '$1'@'$2' IDENTIFIED BY '$3';
   GRANT ALL PRIVILEGES ON $4.* TO '$1'@'$2';
   FLUSH PRIVILEGES;

HEREDOC
}
new_user(){
   sqluser="$1"; shift
   sqlpswd="$1"; shift
   mysql -u"$sqluser" -p"$sqlpswd" -e "$(gen_user_sql $@)"
   echo "new user: $@"
}
# see the query
gen_user_sql user host id db
# actually run it
new_user sqlu sqlp user host id db

некоторые заметки в случае появления нового синтаксиса:

  • $@ - все переменные, переданные в. shift удаляет то, что было бы $1 от $@. (после shift, $1 возвращает то, что было $2 до shift)
  • $(command) фиксирует вывод command и в этом случае использует ее как ввод строки в mysql
  • 0
    потрясающее объяснение и код ... но есть кое-что, что я все еще застрял в .. ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''database'.* TO 'user'@'localhost'' at line 1 пока пользователь создан; нет никаких привилегий. это ; прошло также в HEREDOC как переменные?
  • 0
    Я выяснил проблему, мне нужно настроить 2 строки .. одна из 4 долларов, а не 4 доллара, а вторая была выходом, у меня ускользнуло то, что если я отправляю -e мне не нужно выходить, так как я просто отправляю некоторые команды.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню