How to run MySQL command on bash? How to run MySQL command on bash? unix unix

How to run MySQL command on bash?


Use double quotes while using BASH variables.

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

BASH doesn't expand variables in single quotes.


This one worked, double quotes when $user and $password are outside single quotes. Single quotes when inside a single quote statement.

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


I have written a shell script which will read data from properties file and then run mysql script on shell script. sharing this may help to others.

#!/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