我的bash脚本不会创建数据库。我在这做错了什么? 请看一下:
#!/bin/bash -x
set -x
function deebee() {
EXPECTED_ARGS=2
E_BADARGS=65
MYSQL=`which mysql`
Q1="CREATE DATABASE IF NOT EXISTS $1;"
Q2="GRANT USAGE ON *.* TO $2@localhost IDENTIFIED BY '$3';"
Q3="GRANT ALL PRIVILEGES ON $1.* TO $2@localhost;"
Q4="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}${Q3}${Q4}"
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 dbname dbuser dbpass"
exit $E_BADARGS
fi
$MYSQL -uroot -p -e "$SQL"
}
deebee $1 $2 $3
我正在调用脚本,因为我把它放在一个函数中,但它只是吐出了预期的参数告诉我语法,即我应该键入bashscrip名称,dbname,dbuser dbpass,但很明显'我的登录权限或用户的脚本有问题,所以我无法自动化...发生了什么,我很想知道! 谢谢!
答案 0 :(得分:0)
我会做什么:
使用凭据创建mysql
配置文件(现在更容易自动化):
cat ~/.my.cnf
[client]
host = localhost
user = root
password = xxx
脚本:
#!/bin/bash
set -x
deebee() {
EXPECTED_ARGS=3
E_BADARGS=65
MYSQL=$(type -p mysql)
if (($# != $EXPECTED_ARGS))
then
echo "Usage: $0 dbname dbuser dbpass"
exit $E_BADARGS
fi
$MYSQL <<EOF
CREATE DATABASE IF NOT EXISTS '$1';
GRANT USAGE ON *.* TO '$2'@'localhost' IDENTIFIED BY '$3';
GRANT ALL PRIVILEGES ON '$1'.* TO '$2'@'localhost';
FLUSH PRIVILEGES;
EOF
}
# TODO tests on input args
deebee "$1" "$2" "$3"
和Denis中的comments一样,注意用户可以作为参数来阻止sql注入。
您应该在输入参数上添加一些测试。