因爲SHELL腳本起源於上個世紀70、80年代,所以可讀性比當前的編程語言通常要差一些,所以下面對這個腳本中的內容做一下簡單的說明:編程
1. 第4行-20行的for循環是對650個文件依次進行處理。(對於分隔符,原本是想用分號,或者逗號,或者空格。結果這些字符在註冊信息裏全出現了,後來選了「~」號)。編程語言
2. 第7-15行是while循環,執行的基本功能是把每一個信息文件拼成一行。xml
3. 16行是執行cut命令,提取文件中冒號右邊的內容,把輸出做爲Here Documents送給while循環。文檔
4. 在while循環中,第8行是使用read命令,每次讀取一行,使用「~」拼成一行。注意這裏有個特殊的處理:由於在信息文件中某一項註冊項多是空的,這樣16行的輸出可能中間有空行。所以,判斷read的結束不能使用if [ "$line" == ""] 的方法。通過調查,發現能夠從read的返回值獲取是否到達行末的狀態。若是是遇到Ctrl-D結束,那麼返回值是1。若是是正常的回車鍵結束,即便沒有任何內容,返回值也是0。所以,正確的判斷是 if [ "$?" == "1" ];字符串
5. 17行的EOF是表明Here Documents的結束。注意此處不能像寫C程序同樣,爲了美觀而把EOF向右縮進,由於SHELL規定EOF必須是該行惟一出現的內容,連空格都不能有。所以,這個EOF就暫時突出在這一行了。(經過將輸入操做符改成「<<-」能夠解決這個問題,可是這裏也無傷大雅)。it
6. 文件中的toline.sh是自已編寫的另一個經常使用腳本,用於把輸入的若干文本行拼成一行,而且以「~」分隔。這個腳本的實現比較簡單,建議留給讀者本身練習編寫。for循環