首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库自动创建bash脚本:出什么问题了?

数据库自动创建bash脚本:出什么问题了?
EN

Stack Overflow用户
提问于 2014-01-13 04:49:16
回答 1查看 111关注 0票数 0

我的bash脚本不会创建数据库。我在这里做错了什么?请看一下:

代码语言:javascript
复制
#!/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,但显然我的登录权限或用户的脚本有问题,因此我无法自动执行此操作……怎么回事,我很想知道!谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-01-13 06:17:34

我会怎么做:

使用凭据创建mysql配置文件(现在更容易实现自动化):

代码语言:javascript
复制
cat ~/.my.cnf 
[client]
host     = localhost
user     = root
password = xxx

和脚本:

代码语言:javascript
复制
#!/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"

就像Deniscomments中所说的那样,要注意用户可以将什么作为参数来防止sql注入。

您应该在输入参数上添加一些测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21080117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档