首页 > 技术文章 > Shell脚本for循环实现逐行处理文件

lvclass 2021-02-20 15:54 原文

主要内容:Shell脚本中的for循环实现逐行处理文件

==========================================

说到通过Shell实现逐行处理文件,学过Shell脚本的人会告诉你使用while循环更适合逐行处理文件;

一般来说,以逐行处理文件为例,确认while循环确认把你for循环更加优秀;

但是while循环中存在一个弊端:如果脚本执行机器到目标机器配置过互信,则while循环执行一次就会直接退出,进一步讲这种情况不能实现我们的需求。

想要了解的可以参考:https://www.cnblogs.com/lvclass/p/14420139.html

 

接下讲解如何通过for循环实现逐行处理文件【存在两种情况】:

情况一:处理的文件只有一列数据【数据中间不存在空格、制表符;以创建用户为例,创建3个用户,如下脚本可以正常执行】

情况二:处理的文件存在多列数据【以创建用户同时初始化密码为例,创建3个用户】:

以上脚本执行完成之后,你会发现操作系统实际上创建了6个系统用户并且密码均为空,这并不满足需求

原因:for循环默认是按照空格、制表符、换行符来分个处理的。所以第一列用户名、第二列为密码,在for循环看来都是用户名,而密码为空。

           for循环的解析结果如下:for username in user1 pass1 user2 pass2 user3 pass3,因此会创建6个用户。

           所以,以上的脚本执行编写的是有问题的。for实现逐行处理文件需要重新定义字段分割符IFS。

 正确的脚本编写入下:

通过上面的这个脚本则可以实现创建用户的同时初始化密码。

 

总结:for循环默认分隔符为空格、制表符以及换行符,需要逐行处理文件【文件中具备多个列值】时,需要重新定义IFS默认分隔符,此时for循环才能真正的逐行处理文件。

 

推荐阅读