因为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循环