使用循环导入多个数据库的Bash脚本

时间:2014-10-23 06:02:23

标签: mysql bash

我有一个包含许多DB.sql.gz文件的文件夹,我想将它们全部导入MySQL Server的新安装中。

我认为使用bash脚本会是一个好主意。

到目前为止,我将此文件作为可执行文件。

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

出现问题的是,在使用'文件名'在for循环中,我不能使用字符串 操作以删除扩展,我想这样做因为数据库文件被命名为数据库。 (只想删除.sql.gz以获取数据库名称)

帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

#!/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应为$filename
  2. 分配中=周围没有空格
  3. 在许多变量使用之前,您错过了$
  4. 要执行CREATE DATABASE命令,请使用-e选项mysql
  5. 使用gzcat.gz文件展开为stdout。
  6. ${tempfile%.*}应为${tempfile%%.*}%删除模式的最短匹配,%%删除最长匹配。这将删除所有后缀。