Deano
Deano

Reputation: 155

Bash script to Import Multiple Databses using Loop

I have a folder with many DB.sql.gz files, i want to import them all into a new installation of MySQL Server in one go.

I thought using bash script would be a good idea.

So Far, I have this file as an executable.

#!/bin/sh
for filename in *.gz; 
do
tempfile="${z##*/}";
database_name = "${tempfile%.*}";
echo database_name;
mysql -pPASS -u USER;
CREATE DATABASE database_name;
unzip z | mysql -pPASS -uUSER database_name;
done

Whats going wrong is that when taking the 'filename' in the for loop, i cant string manipulate to to remove the extension, I want to do this because the database files are named as the database. ( just want to remove the .sql.gz to get the db name )

Help appreciated

Upvotes: 0

Views: 1641

Answers (1)

Barmar
Barmar

Reputation: 781096

#!/bin/sh
for filename in *.gz; 
do
    tempfile="${filename##*/}"
    database_name="${tempfile%%.*}"
    echo $database_name
    mysql -pPASS -u USER -e "CREATE DATABASE $database_name"
    gzcat $filename | mysql -pPASS -uUSER $database_name
done
  1. $z should be $filename.
  2. No spaces around = in assignments
  3. You were missing $ before many variable uses.
  4. To execute the CREATE DATABASE command, use the -e option to mysql
  5. Use gzcat to expand a .gz file to stdout.
  6. ${tempfile%.*} should be ${tempfile%%.*}. % removes the shortest match of the pattern, %% removes the longest match. This will remove all the suffixes.

Upvotes: 1

Related Questions