
Я пытаюсь создать bash-скрипт для изменения пароля root в MySQL. Ниже приведен текущий фрагмент кода, с которым я работаю:
#!/bin/sh
clear
echo "Enter the current password for the root mysql account."
read oldrootpass
echo "Enter a new password for the root mysql account."
read newrootpass
mysql -u root -p$oldrootpass -Bse 'UPDATE user SET password=PASSWORD("$newrootpass") WHERE User="root"'
Синтаксис выше для изменения пароля root может быть неверным, но я застрял на этапе генерации однострочной команды для работы с MySQL. Если команда превышает 2 строки, то вводится приглашение MySQL, и команды MySQL в скрипте bash выполняются после закрытия приглашения MySQL с помощью команды «exit».
Моя цель — собрать необходимую информацию о пароле с помощью скрипта bash, выполнить одну команду для изменения пароля root, а затем вернуться к скрипту bash или к командной строке bash, если скрипт завершится.
решение1
Если вы спрашиваете, как выполнить несколько операторов с помощью одной mysql
команды, вы можете просто разделить их точкой с запятой:
$ mysql -e 'select 1; select 2'
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+
или вы можете создать файл, содержащий операторы SQL, и запустить его:
$ mysql < change_password.sql
решение2
Используйте mysqladmin вместо запуска запроса в mysql.
mysqladmin -u root -p'$oldrootpass' password '$newrootpass'
Должно сработать, но, возможно, придется немного повозиться с кавычками.