385 瀏覽數

Bash shell script – while 迴圈

while 迴圈的使用有好幾種方式,先來看第一種

while [ condition ]

語法如下

while [ condition ]
do
     statements
done

i變數需要在 while 前面先宣告.
$i != 10 i變數需要不等於 10 才會執行迴圈內容.
i=$(($i+1)) , $((計算式))) 主要是用於計算式的,讓 i 每次都增加 1.

root@ubuntu:~# vi while.sh
#!/bin/bash
i=1
while [ $i != 5 ]
do
   echo i=$i
   i=$(($i+1))
done

執行結果會顯示每次 i 變數的值.

root@ubuntu:~# chmod a+x while.sh 
root@ubuntu:~# ./while.sh 
i=1
i=2
i=3
i=4

while [ condition1 -a,-o condition2 …]

語法如下

while [ condition1 -a,-o  condition2 ]
do
     statements
done

-a (and) 兩個條件必須同時都成立.
-o (or) 兩個條件任何一個成立皆可.

while read line

如果要處理檔案的可以使用下面 while 語法.

while read line           
do           
     statements         
done <file 

while 會依據指定的檔案內容每次讀取一行 (儲存在變數 $line)等待處理.一直到檔案結束
下面範例讀取 /etc/passwd 檔案,並擷取使用這出來.

每一次讀取一行的資料儲存在變數 $line , 接著使用 awk 來處理.
awk 在執行時就會先把第一行的資料讀取進來等待處理,所以 FS(Fields splits) 的定義 (冒號 “:” 來作欄位的分隔) 必須透過 BEGIN{} 事前先定義好.
print 列印出 \t (tab) 與 $1 第一欄的資料.

root@ubuntu:~# vi while.sh
#!/bin/bash
while read line
do
   echo $line| awk 'BEGIN{FS=":"} {print "User:\t"$1}'
done < /etc/passwd
root@ubuntu:~# ./while.sh 
User:	root
User:	daemon
User:	bin
User:	sys
User:	sync
User:	games
User:	man
User:	lp
User:	mail
User:	news
User:	uucp
User:	proxy

發表迴響