背景
從一個數(shù)據(jù)庫中導(dǎo)出了 N 個表的 SQL 語句,匯總到一個文件夾下。然后,再導(dǎo)入到目標(biāo)數(shù)據(jù)庫中。這個過程中,如果逐個敲 source 命令太繁瑣了,不如寫個腳本來搞定、順便練練手。
本文將介紹一個遍歷文件夾下文件的 Shell 應(yīng)用。
腳本編寫
批量導(dǎo)入目標(biāo)文件夾下的 SQL 文件,核心是,得到目錄下所有 SQL 文件的名稱,循環(huán)執(zhí)行導(dǎo)入語句。
所以,一個 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 的輸出值拆分成數(shù)組;
- ${數(shù)組名[@]} 將數(shù)組擴展成列表,用 for in 遍歷。
命令分解輸出示例:

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