[shell] while read line 與for循環的區別


while read line 與for循環的區別 ---轉載整理

while read line 是一次性將文件信息讀入並賦值給變量line ,while中使用重定向機制,文件中的所有信息都被讀入並重定向給了整個while 語句中的line 變量。

for是每次讀取文件中一個以空格為分割符的字符串。

如下示例腳本:

 

#/bin/bash
IPS="10.1.1.10 3001
10.1.1.10 3003
10.1.1.11 3001
10.1.1.11 3002
10.1.1.11 3004
10.1.1.11 3005
10.1.1.13 3002
10.1.1.13 3003
10.1.1.13 3004
10.1.1.14 3002"
echo "====while test ===="
i=0

echo $IPS | while read line
do
    echo $(($i+1))
    echo $line
done


echo "====for test ===="
n=0
for ip in $IPS ;
do
   n=$(($n+1))
   echo $ip
   echo $n
done

 

輸出結果如下:

[root@harbor-server script]# bash for_while.sh 
====while test ====
1
10.1.1.10 3001 10.1.1.10 3003 10.1.1.11 3001 10.1.1.11 3002 10.1.1.11 3004 10.1.1.11 3005 10.1.1.13 3002 10.1.1.13 3003 10.1.1.13 3004 10.1.1.14 3002
====for test ====
10.1.1.10
1
3001
2
10.1.1.10
3
3003
4
10.1.1.11
5
3001
6
10.1.1.11
7
3002
8
10.1.1.11
9
3004
10
10.1.1.11
11
3005
12
10.1.1.13
13
3002
14
10.1.1.13
15
3003
16
10.1.1.13
17
3004
18
10.1.1.14
19
3002
20
點擊(此處)折疊或打開

 

[root@node02 cfg]# docker ps -a   | grep -v "grep" | awk '{print $1}' | sed 1d | while read line; do echo $line; done
94f9cddc37ff
0610512ce45d
957559991e8e
c27f3200affe
[root@node02 cfg]# 

 

 

當文件中有多行文字,在while循環中再一次調用read語句,就會讀取到下一條記錄。而$line中的最后一行已經讀完,無法獲取下一行記錄,從而退出 while循環。

若使用while循環,想每次讀取其中1行內容到變量$line,則可以使用以下方法:

#!/system/bin/sh
busybox cat /data/data/1.txt | while read LINE
do
adb shell gsr -m -p /data/data/$LINE 10000
done

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM