循環:重復執行所指定的代碼片段,直到循環條件不滿足,則退出循環
一、for循環
語法格式:
for 變量名 in 列表
do
循環體
done
for循環運行格式,依次將列表中的元素賦值給變量名,而后執行一次循環體,直到列表中的元素耗盡 則退出循環
列表的生成:
1.直接給出列表
2.整數列表:seq 1 n或{1..100}
3.命令引用
4.變量引用
[root@CentOS6 ~]# cat for.sh #!/bin/bash # for I in {1..10} do echo $I done [root@CentOS6 ~]# bash for.sh 1 2 3 4 5 6 7 8 9 10 [root@CentOS6 ~]#
for特殊用法:
for ((控制變量初始值;條件判斷表達式;修正表達式))
do
循環體
done
循環之前判斷條件表達式是否成立,如果成立,則執行一次循環體,然后執行修正表達式做修正,再吃判斷條件表達式是否成,成立則循環,否則退出
[root@CentOS6 ~]# cat for.sh #!/bin/bash # for ((I=1;I<=10;I++)) do echo $I done [root@CentOS6 ~]# bash for.sh 1 2 3 4 5 6 7 8 9 10 [root@CentOS6 ~]#
for創建死循環:
for ((;1;))
do
echo "hello"
done
無限輸出hello,按Ctrl+c退出循環
二、while循環
語法格式:
while CONDITION
do
循環體
done
在做循環之前CONDITION是否成立,如果條件成立,執行一次循環體,直到條件不滿足為止,因此,在循環體中我們一般會對CONDITION做修正
進入條件:CONDITION為true
退出條件:CONDITION為false
[root@CentOS6 ~]# cat while1.sh #!/bin/bash # declare -i I=1 while [ $I -le 10 ] do echo $I let I++ done [root@CentOS6 ~]# bash while1.sh 1 2 3 4 5 6 7 8 9 10 [root@CentOS6 ~]#
while特殊用法:
while read 變量名
do
循環體
done < /PATH/TO/SOMEFILE
依次讀取SOMEFILE文件中的每一行,并賦值給所指定的變量,而后執行循環體
我們在處理文本文件時經常會用到這種格式
[root@CentOS6 ~]# cat whilefile.sh 顯示/root/for.sh文件中的每一行 #!/bin/bash # while read LINE do echo $LINE done < /root/for.sh [root@CentOS6 ~]# bash whilefile.sh #!/bin/bash # for ((;1;)) do echo "hello" done [root@CentOS6 ~]#
while死循環:
while true
do
循環體
done
條件測試語句永久為真,循環體將永久執行,按Ctrl+c退出循環
三、until循環
語法格式:
until CONDITION
do
循環體
done
循環之前判斷CONDITION是否為假,如果為假,執行一次循環體,直至CONDITION為真結束循環
進入條件:CONDITION為假
退出條件:CONDITION為真
[root@CentOS6 ~]# cat until.sh #打印1到10之間的整數 #!/bin/bash # declare -i I=1 until [ $I -gt 10 ] do echo $I let I++ done [root@CentOS6 ~]# bash until.sh 1 2 3 4 5 6 7 8 9 10 [root@CentOS6 ~]#
until創建死循環
until false
do
循環體
done
CONDITION條件永久為假,循環體永久執行,按Ctrl+c停止循環
循環控制語句:
continue:當滿足一定條件時,提前結束第N層的循環,而直接進入下一次循環判斷
break:當滿足一定條件時,提前結束第N層循環
下面我們來做幾個示例:
1.添加user1-user10是個用戶密碼同用戶名
[root@CentOS6 ~]# cat user.sh #!/bin/bash # for I in $(seq 1 10) do if ! id user$I &> /dev/null;then useradd user$I echo user$I:user$I | chpasswd echo "Add user$I finishd." else echo "user$I exists." fi done [root@CentOS6 ~]# bash user.sh #添加10個用戶完成 Add user1 finishd. Add user2 finishd. Add user3 finishd. Add user4 finishd. Add user5 finishd. Add user6 finishd. Add user7 finishd. Add user8 finishd. Add user9 finishd. Add user10 finishd. [root@CentOS6 ~]# bash user.sh #如果用戶已添加,則顯示用戶已經存在 user1 exists. user2 exists. user3 exists. user4 exists. user5 exists. user6 exists. user7 exists. user8 exists. user9 exists. user10 exists. [root@CentOS6 ~]#
2.編寫腳本,測試10.1.252.1-254所有主機在線狀態
[root@CentOS6 ~]# cat ip.sh #!/bin/bash # echo "測試10.1.252.1-254所有主機在線狀態" NETWORK="10.1.252." Red="\033[31m" Green="\033[32m" End="\033[0m" declare -i UP=0 declare -i DOWN=0 for I in $(echo ${NETWORK}{1..254}) do if ping -c 1 -W 1 $I &> /dev/null;then echo -e "${Green}$I IP is up.$End" echo $I >> /root/up.txt let UP++ else echo -e "${Red}$I IP is down.$End" echo $I >> /root/down.txt let DOWN++ fi done echo "host up is $UP." echo "host down is $DOWN." [root@CentOS6 ~]# [root@CentOS6 ~]# bash ip.sh 測試10.1.252.1-254所有主機在線狀態 10.1.252.1 IP is down. 10.1.252.2 IP is down. 10.1.252.3 IP is down. 10.1.252.4 IP is down. 10.1.252.5 IP is down. 10.1.252.6 IP is down. 10.1.252.7 IP is up. 10.1.252.8 IP is down. ...
3.打印99乘法表
[root@CentOS6 ~]# cat 99.sh #!/bin/bash # for I in $(seq 1 9) do for J in $(seq 1 $I) do echo -n -e "${J}X${I}=$[${J}*${I}]\t" done echo done [root@CentOS6 ~]# bash 99.sh 1X1=1 1X2=2 2X2=4 1X3=3 2X3=6 3X3=9 1X4=4 2X4=8 3X4=12 4X4=16 1X5=5 2X5=10 3X5=15 4X5=20 5X5=25 1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36 1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49 1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64 1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81 [root@CentOS6 ~]#
4.打印nn金字塔
[root@CentOS7 bin]# cat jinzita.sh #!/bin/bash # read -p "請輸入要打印的行數:" INT for ((LINES=1;LINES<=INT;LINES++)) do for ((Space=0;Space<=$[$INT-$LINES];Space++)) do echo -n " " done for ((Xing=1;Xing<=$[$LINES*2-1];Xing++)) do echo -n -e "\033[31m*\033[0m" done echo done [root@CentOS7 bin]# bash jinzita.sh 請輸入要打印的行數:10 * *** ***** ******* ********* *********** ************* *************** ***************** ******************* [root@CentOS7 bin]#
原創文章,作者:zhai796898,如若轉載,請注明出處:http://www.www58058.com/39519