从shell接口将数据加载到mysql数据库中

时间:2017-09-24 22:07:33

标签: mysql linux bash shell

我正在尝试创建一个简单的shell脚本来帮助我管理数据库,它使用菜单界面。

#!/bin/bash
#Menu SQL 
PS3='Make a choice:'
options=("Create db" "Load into db" "Erase db" "Exit")
select opt in "${options[@]}"
do
    case $opt in
        "Create db")
            echo "Enter the db name for creating"
            read nom_db
        mysql -u root -p -e "create database ${nom_db}"
        ;;
        "Load into db")
            echo "Choose a db:" 
        mysql -u root -p -e "show databases"
        echo "Write the name of the db to use:"
        read selec_db                           
        mysql -u root -p -e "use ${selec_db} create table student(nom_id char(25) not null, ape_id char(25) not null, sexo_id char(9) not null, sem_id int(2) not null)"
        mysql -u root -p -e "use ${selec_db}; load data infile'/Data.txt' into table student"   
            ;;
     "Erase db")
            echo "These are the dbs in system:"
        mysql -u root -p -e "show databases
        echo "Write the name of db to erase:"
        read borr_db                            
        mysql -u root -p -e "drop database ${borr_db}"  
            ;;
        "Exit")
                break
            ;;
        *) echo Invalid option;;
    esac
done

创建数据库并擦除数据库的脚本部分工作正常,但是创建表并加载到数据库中的表的部分不起作用,创建表的部分运行,但是我进入MySQL CLI我检查数据库并且它是空的,将文本文件加载到表中的部分说我有语法错误。

我无法在代码中找到错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在第26行中,您尚未关闭引号:

    mysql -u root -p -e "show databases <MISSING DOUBLE-QUOTE HERE>

线索是错误,表示无法找到匹配的双引号:

test.sh: line 32: unexpected EOF while looking for matching `"'

但这不是唯一的错误。

在第20行中,use ${selec_db}后没有分号,因此忽略了create table语句:

    mysql -u root -p -e "use ${selec_db} <MISSING SEMICOLON HERE> create table student(nom_id char(25) not null, ape_id char(25) not null, sexo_id char(9) not null, sem_id int(2) not null)"

在第21行中,您加载文件/Data.txt,这意味着该文件必须存在于根目录中。这是一个不寻常的位置,通常人们不会将文件放在根目录下。

此外,为了安全起见,MySQL服务器可能被配置为仅允许默认情况下从某些位置加载数据。您不希望MySQL Server加载敏感文件。默认配置取决于您的操作系统。见https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv