[英]Adding user through bash in MySQL
这是我第一次尝试在mysql终端中传递bash命令,我正在这样做:
每次安装应用程序与数据库进行交互时, 都会创建一个虚拟用户 。
但是,我所有的尝试都失败了,这是我的代码行:
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
但显示不成功。
如何在MySQL中传递bash变量?
感谢评论,我已经更新了引号的代码,但是仍然无法将变量传递给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\"
}
您可以避免使用HEREDOC
弄清楚如何对引号进行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
返回调用shift
之前的$2
) $(command)
捕获的输出command
,在这种情况下,使用它作为字符串输入到mysql
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.