Вы создаете оператор SQL в строке в одинарных кавычках:
'UPDATE user SET password=PASSWORD("$mysql_passwd") WHERE User="root";flush privileges;'
Bash заменяет имена переменных ($mysql_passwd
) только тогда, когда они пустые или в строке в двойных кавычках.В одиночной строке в кавычках это трактуется как «$ mysql_passwd».Например:
mysql_passwd="abcdef"
echo $mysql_passwd # prints abcdef
echo "$mysql_passwd" # prints abcdef
echo '$mysql_passwd' # prints $mysql_passwd
Так что вам нужно либо поменять одинарные кавычки на двойные кавычки, и экранировать существующие двойные кавычки:
"UPDATE user SET password=PASSWORD(\"$mysql_passwd\") WHERE User=\"root\";flush privileges;"
Или завершить строку в одинарных кавычках, добавитьстрока в двойных кавычках с $mysql_passwd
, а затем выполнить остальную часть запроса в другой строке в одинарных кавычках (bash объединяет строки, которые расположены рядом друг с другом, вот так):
'UPDATE user SET password=PASSWORD("'"$mysql_passwd"'") WHERE User="root";flush privileges;'