我正在尝试创建一个简单的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我检查数据库并且它是空的,将文本文件加载到表中的部分说我有语法错误。
我无法在代码中找到错误。
感谢您的帮助。
答案 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