15.迴圈 語法結構

迴圈通常用在重覆執行,直到某一條件成立或失敗為止。

有三種迴圈:for、while、until,說明如下:

for 的迴圈

for 迴圈格式:

for 變數 in 範圍
do
    命令1
    命令2
    .....
done

例:

for char in A B C D E F G
do
    echo "$char"
done

例: 以下在 /home/us1 ~ /home/us4 的目錄下,開啟一個 index.html 檔

for usr in /home/us[1-4]; do 

   # 開啟 html 目錄做為網頁存放空間
   htmldir="$usr/html"

   # 若目錄不存在,則開啟一個新目錄
   if [ ! -d "$htmldir" ]; then
       mkdir -p "$htmldir"
   fi

   # 產生 index.html 
   echo "您是 $usr" >  "$usr/html/index.html"

   # 改變擁有者為該使用者
   chown -R "$usr.$usr" "$htmldir"

done

注意:
1.記得使用 root 權限來做
2.本例可再改寫成:具自動開啟帳號/網頁空間、幫使用者寫好第一個首頁檔 的功能


另,Bash 也有以下迴圈寫法:
for ((i=1; i<=10; i++))
do
    echo "$i"
done

注意! i=1; i<=10; i++ 須放在二個 () 之中




#
# 大量建帳號的實列:
#

#! /bin/sh

# 適合大量開設有規則的帳號名字

for ((n=1; n<=10; n++))
do
        username="st$n"
        adduser $username
	mkdir -p "/home/$username/html"
        echo "這是您 $username 的第一個首頁檔 index.html" > "/home/$username/html/index.html"
        chown -R "$username.$username" "/home/$username/html"
        echo "已開設 $username"
done


# 適合沒有規則的帳號名字
# 假設 teachers.txt 內含教師的帳號,如下所示:
ya1
mo6
po2
yu8
ru0

以下程式可以大量來處理沒有規則的帳號

#! /bin/sh
r=`cat teachers.txt`

for th in $r
# 上式就等於 for th in ya1 mo6 po2 yu8 ru0 一樣
do
        username="$th"
        adduser $username
	mkdir -p "/home/$username/html"
        echo "您 $username 的第一個首頁檔是 index.html" > "/home/$username/html/index.html"
        chown -R "$username.$username" "/home/$username/html"
        echo "己開設 $username"
done


#
# for 的無窮迴圈:
#

for ((;;))
do
   echo "Hi"
   sleep 2
done

或

# 只要讓條件判斷永遠為真,即可形成無窮迴圈。

for ((i=1; i>0; i++))
do
   echo "Hi"
   sleep 2
done