[shell]while read line 與 for迴圈的區別
阿新 • • 發佈:2019-02-20
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
-
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
點選(此處)摺疊或開啟
-
====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.
-
====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
- ....
當檔案中有多行文字,在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
--------------------------------------------------------------------------------------------------------------------
原作者的【解決方法】---存疑,不太理解,後續學習
1 使用ssh -n "command"
2 ssh "cmd" < /dev/null 將ssh 的輸入重定向輸入。