2017-09-24 136 views
-1

我想製作一個簡單的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時,我檢查數據庫並且它是空的,並且將文本文件加載到表中的部分表明我有語法錯誤。

我在代碼中找不到錯誤。

謝謝你的幫助。

+0

確切的錯誤是否分類?我無法真正理解,爲什麼共享確切的錯誤信息總是有助於找出問題的根本原因並不明顯...... – Shadow

回答

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服務器加載敏感文件。默認配置取決於您的操作系統。請參閱https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv

相關問題