从shell界面将数据加载到mysql数据库中
问题描述:
我想制作一个简单的shell脚本来帮助我管理数据库,它使用菜单界面。从shell界面将数据加载到mysql数据库中
#!/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
,创造一个DB和擦除分贝的工作就好了剧本的部分,但是,创造一个表,并装载到表在DB不工作的部分,即包装箱表中的部分运行,但是当我进入MySQL CLI时,我检查数据库并且它是空的,并且将文本文件加载到表中的部分表明我有语法错误。
我在代码中找不到错误。
谢谢你的帮助。
答
在第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服务器加载敏感文件。默认配置取决于您的操作系统。请参阅https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
确切的错误是否分类?我无法真正理解,为什么共享确切的错误信息总是有助于找出问题的根本原因并不明显...... – Shadow