背景
從一個數據庫中導出了 N 個表的 SQL 語句,匯總到一個文件夾下。然后,再導入到目標數據庫中。這個過程中,如果逐個敲 source 命令太繁瑣了,不如寫個腳本來搞定、順便練練手。
本文將介紹一個遍歷文件夾下文件的 Shell 應用。
腳本編寫
批量導入目標文件夾下的 SQL 文件,核心是,得到目錄下所有 SQL 文件的名稱,循環執行導入語句。
所以,一個 ls 命令就搞定了。
curDir=$1
cd $curDir
echo 'Start import .sql file in directory '$curDir
fileTmp=`ls`
fileNames=($(echo $fileTmp))
for fileName in ${fileNames[@]}
do
echo 'current file '$fileName
MySQL -h localhost -uroot -p123456 < ./$fileName
echo ''
done
echo 'Finished import .sql file.'
腳本分析
- ls 命令輸入所有的文件名稱;
- 用 $ 命令按空格拆分,將 ls 的輸出值拆分成數組;
- ${數組名[@]} 將數組擴展成列表,用 for in 遍歷。
命令分解輸出示例:

啟示錄
值得注意的是,SQL 語句如果是插入操作,必須使用 use database; 指定目標數據庫。
其實也就選擇地導出了 8 張表的 SQL 語句,逐個敲文件名也不是個事兒,這也是最簡單的處理方法,但是這不符合好開發解決問題的風格啊,就是一個遍歷文件名的命令,網上沒找到現成的腳本,就自己寫一個!
寫腳本也花了十分鐘,但好歹比復制粘貼文件名有技術含量得多,順便也練習了一下 Shell 數組的語法。再說了,腳本到了運維同事手里,說不定會暗自夸這腳本的作者貼心呢!