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