為什麼要用循環結構
在shell運維中,很多時候我們都要重複的執行某個功能,而計算機比人的優勢大的地方就在于适合執行确定的功能。利用計算機的強大計算能力完成自動化腳本工作。
比如我要建立一批使用者cat1、cat2、...、cat100。密碼是使用者名加上後六位随機數。這個過程如果手動完成是非常耗時,要重複執行useradd添加使用者并用passwd配置設定密碼。但是使用循環腳本就非常友善了,如果将使用者量增大到100台伺服器,每台伺服器配置設定1000個人使用者,就可以顯示出循環語句的威力。
for循環
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
for i in 1 2 3 hello abc
do
echo $i
done
輸出目前路徑下所有檔案名
for i in `ls`
do
echo $i
done
輸出序列1-10
for i in $(seq 1 10)
do
echo $i
done
for i in {1..10}
do
echo $i
done
輸出字母a-z
for i in {a..z}
do
echo $i
done
for ((…;…;…)) do…done
for ((i=1;i<=10;i+=2))
do
echo $i
done
while循環
while 循環用于不斷執行一系列指令,也用于從輸入檔案中讀取資料。
while condition
do
command
done
偶數和
sum=0
i=0
while [ $i -le 50 ]
do
let sum+=i
let i+=2
done
echo "0-50的偶數和為:$sum"
循環輸入名字,檔案結束符為Ctrl+d,輸入檔案結束符後read指令傳回false。
while read -p "Please input your name: " name
do
echo $name
done
until 循環
until 循環執行一系列指令直至條件為 true 時停止。
until 循環與 while 循環在處理方式上剛好相反。
一般 while 循環優于 until 循環,但在某些時候—也隻是極少數情況下,until 循環更加有用。
until 文法格式:
until condition
do
command
done
condition 一般為條件表達式,如果傳回值為 false,則繼續執行循環體内的語句,否則跳出循環。
以下執行個體我們使用 until 指令來輸出 0 ~ 9 的數字:
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
跳出循環
在循環過程中,有時候需要在未達到循環結束條件時強制跳出循環,Shell 使用兩個指令來實作該功能:break 和 continue。
break 指令
break 指令允許跳出所有循環(終止執行後面的所有循環)。
下面的例子中,腳本進入死循環直至使用者輸入數字大于5。要跳出這個循環,傳回到shell提示符下,需要使用break指令。
while true
do
read -p "請輸入1-5虹之間的數字:" n
case $n in
1|2|3|4|5) echo "你輸入的數字為$n"
;;
*) echo "請輸入正确的數字範圍"
break
;;
esac
done
continue
continue 指令與 break 指令類似,隻有一點差别,它不會跳出所有循環,僅僅跳出目前循環。
對上面的例子進行修改:
while true
do
read -p "請輸入1-5之間的數字:" n
case $n in
1|2|3|4|5) echo "你輸入的數字為$n"
;;
*) echo "請輸入正确的數字範圍"
continue
echo "遊戲結束,這句話永遠不會被執行"
;;
esac
done
視訊講解
視訊加載中...
相關推薦
- 什麼是Linux系統?我們是否要用Linux
- 學習Linux指令行,用手就行!
- Linux革命性工具,shell腳本自動化
- Linux革命性工具,shell腳本選擇結構讓程式更加智能
- 什麼是C++變量,就是存儲資料的盒子
- C++輸入輸出流,輸出是調試程式最重要的方法