【问题标题】:How to run MySQL command on bash?如何在 bash 上运行 MySQL 命令?
【发布时间】:2013-11-30 18:26:53
【问题描述】:

以下代码在命令行上运行

mysql --user='myusername' --password='mypassword' --database='mydatabase' --execute='DROP DATABASE myusername; 
CREATE DATABASE mydatabase;'

但是,它在执行时对 bash 文件不起作用

#!/bin/bash
user=myusername
password=mypassword
database=mydatabase

mysql --user='$user' --password='$password' --database='$database' --execute='DROP DATABASE $user; CREATE DATABASE $database;'

我收到以下错误:

错误 1045 (28000): 用户 '$user'@'localhost' 的访问被拒绝(使用密码:YES)

如何让bash文件作为命令行运行?

【问题讨论】:

    标签: mysql bash unix terminal special-characters


    【解决方案1】:

    我编写了一个 shell 脚本,它将从属性文件中读取数据,然后在 shell 脚本上运行 mysql 脚本。分享这可能对其他人有所帮助。

    #!/bin/bash
        PROPERTY_FILE=filename.properties
    
        function getProperty {
           PROP_KEY=$1
           PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2`
           echo $PROP_VALUE
        }
    
        echo "# Reading property from $PROPERTY_FILE"
        DB_USER=$(getProperty "db.username")
        DB_PASS=$(getProperty "db.password")
        ROOT_LOC=$(getProperty "root.location")
        echo $DB_USER
        echo $DB_PASS
        echo $ROOT_LOC
        echo "Writing on DB ... "
        mysql -u$DB_USER -p$DB_PASS dbname<<EOFMYSQL
    
        update tablename set tablename.value_ = "$ROOT_LOC" where tablename.name_="Root directory location";
        EOFMYSQL
        echo "Writing root location($ROOT_LOC) is done ... "
        counter=`mysql -u${DB_USER} -p${DB_PASS} dbname -e "select count(*) from tablename where tablename.name_='Root directory location' and tablename.value_ = '$ROOT_LOC';" | grep -v "count"`;
    
        if [ "$counter" = "1" ]
        then
        echo "ROOT location updated"
        fi
    

    【讨论】:

      【解决方案2】:

      当 $user 和 $password 在单引号之外时,这个有效,双引号。在单引号语句中使用单引号。

      mysql --user="$user" --password="$password" --database="$user" --execute='DROP DATABASE '$user'; CREATE DATABASE '$user';'
      

      【讨论】:

        【解决方案3】:

        在使用 BASH 变量时使用双引号。

        mysql --user="$user" --password="$password" --database="$database" --execute="DROP DATABASE $user; CREATE DATABASE $database;"
        

        BASH 不会用单引号扩展变量。

        【讨论】:

          猜你喜欢
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-16
          • 2013-07-11
          • 2010-11-06
          相关资源
          最近更新 更多