主要内容: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循环才能真正的逐行处理文件。