简体   繁体   中英

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM