迴圈通常用在重覆執行,直到某一條件成立或失敗為止。
有三種迴圈:for、while、until,說明如下:
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
|