From 64e11d789a787afdfd334575adc588918a8a692c Mon Sep 17 00:00:00 2001 From: Victor LABORIE Date: Thu, 5 Jan 2017 11:27:36 +0100 Subject: [PATCH] mysql: rewrite of my-add.sh --- mysql/files/my-add.sh | 163 ++++++++++++++++++++++++++---------------- 1 file changed, 101 insertions(+), 62 deletions(-) diff --git a/mysql/files/my-add.sh b/mysql/files/my-add.sh index fc31bc8a..baea9a5c 100755 --- a/mysql/files/my-add.sh +++ b/mysql/files/my-add.sh @@ -4,19 +4,44 @@ usage() { echo "Usage: $0 [ -d -u [-p ] [-f] ]" } -if [ $# = 0 ]; then - is_interactive="true" +interactive() { echo "Add an account / database in MySQL" echo "Enter the name of the new database" read db + if ( is_db $db ); then + echo "Database $db already exist !" >&2 + exit 1 + fi + echo "Enter account with all right on this new database" echo "(you can use existant account)" read user -else + + if ( is_user $user ); then + echo "Warning, account already exists, update password ? [N/y]" + read confirm + if [ "${confirm}" = "y" ] || [ "${confirm}" = "Y" ]; then + echo -n "Enter new password for existant MySQL account (empty for random): " + read password + if [ -z "${password}" ]; then + password=$(apg -n1) + fi + fi + else + echo -n "Enter new password for new MySQL account (empty for random): " + read password + if [ -z "${password}" ]; then + password=$(apg -n1) + fi + fi + mysql_add $db $user $password +} + +cli() { while getopts ":d:u:p:f" opt; do case "$opt" in - d) + d) db=$OPTARG ;; u) @@ -35,7 +60,7 @@ else esac done shift $((OPTIND-1)) - + if [ -z "${db}" ]; then usage exit 1 @@ -45,76 +70,90 @@ else usage exit 1 fi -fi -is_db=$(mysql mysql -Ne "SELECT COUNT(Db) FROM db WHERE Db='${db}';") -if [ $is_db -gt 0 ]; then - echo "Database $db already exist !" >&2 - exit 1 -fi - -is_user=$(mysql mysql -Ne "SELECT COUNT(User) from user WHERE User='${user}';") -if [ $is_user -gt 0 ]; then - if [ -n ${is_interactive} ]; then - echo "Warning, account already exists, update password ? [N/y]" - read confirm - if [ "${confirm}" = "y" ] || [ "${confirm}" = "Y" ]; then - force="update" - echo -n "Enter new password for existant MySQL account (empty for random): " - read password - fi - else + if ( is_db $db ); then + echo "Database $db already exist !" >&2 + exit 1 + fi + + if ( is_user $user ); then if [ -z "${force}" ]; then if [ -n "${password}" ]; then echo "User $user already exist, update password with -f !" >&2 exit 1 fi else - force="update" + if [ -z "${password}" ]; then + password=$(apg -n1) + fi + fi + else + if [ -z "${password}" ]; then + password=$(apg -n1) fi fi -else - echo -n "Enter new password for new MySQL account (empty for random): " - read password - echo "" + mysql_add $db $user $password +} -fi +is_db() { + db=$1 + mysql mysql -Ne "SHOW DATABASES;"|grep -q "^${db}$" + exit $? +} -if [ -z "${password}" ]; then - password=$(apg -n1) - random="yes" -fi - -if [ -z "${force}" ]; then - -mysql << END_SCRIPT - CREATE DATABASE \`${db}\`; - GRANT ALL PRIVILEGES ON \`${db}\`.* TO \`${user}\`@localhost; - FLUSH PRIVILEGES; -END_SCRIPT - - if [ $? = 0 ]; then - if [ $is_user -gt 0 ]; then - echo "Database ${db} created" - else - echo "User ${user} and database ${db} created" - fi +is_user() { + user=$1 + nb_user=$(mysql mysql -Ne "SELECT COUNT(User) from user WHERE User='${user}';") + if [ $nb_user -gt 0 ]; then + exit 0 + else + exit 1 fi +} -else +mysql_add() { + db=$1 + user=$2 + password=$3 -mysql << END_SCRIPT - CREATE DATABASE \`${db}\`; - GRANT ALL PRIVILEGES ON \`${db}\`.* TO \`${user}\`@localhost IDENTIFIED BY "${password}"; - FLUSH PRIVILEGES; -END_SCRIPT - - if [ $? = 0 ]; then - echo "Database ${db} created and password of ${user} updated" + echo -n "Create '${db}' database ..." + mysql -e "CREATE DATABASE ${db};" + if [ $? -eq 0 ]; then + echo "OK" + else + echo "KO" + exit 1 fi + if [ -z "${password}" ]; then + echo -n "Grant '${user}' to '${db}' database ..." + mysql -e "GRANT ALL PRIVILEGES ON ${db}.* TO ${user}@localhost;" + grant=$? + else + echo -n "Grant '${user}' to '${db}' database with password '${password}' ..." + mysql -e "GRANT ALL PRIVILEGES ON ${db}.* TO ${user}@localhost IDENTIFIED BY '${password}';" + grant=$? + fi + if [ $grant -eq 0 ]; then + echo "OK" + else + echo "KO" + exit 1 + fi + echo -n "Flush Mysql privileges ..." + mysql -e "FLUSH PRIVILEGES;" + if [ $? -eq 0 ]; then + echo "OK" + else + echo "KO" + exit 1 + fi +} -fi - -if [ -n "${random}" ]; then - echo "Password : ${password}" -fi +main() { + if [ $# = 0 ]; then + interactive + else + cli $@ + fi +} +main $@