Shell腳本編程 流程控制—循環

循環:重復執行所指定的代碼片段,直到循環條件不滿足,則退出循環

一、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

(0)
zhai796898zhai796898
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • 第一周

    1、描述計算機的組成與功能 計算器是由運算器,控制器,存儲器,輸入設備和輸出設備五大部件組成;每一部件分別按要求執行特定的功能,具體功能如下: (1)運算器:完成各種算術運算和邏輯運算的裝置,能進行加、減、乘、除等數學運算,也能作比較、判斷、查找、邏輯運算等。 (2)控制器:控制器是計算機機指揮和控制其它各部分工作的中心,其工作過程和人的大腦指揮和控制人的各…

    Linux干貨 2017-01-02
  • 馬哥M20-1第一周作業

    作業1:通過echo實現字體閃爍,添加下劃線,改變顏色      (1)添加下劃線    (2)字體閃爍   (3)改變顏色 作業2:顯示前10天的年月日 作業3:screen的使用

    Linux干貨 2016-07-29
  • grep簡述

    grep(Globel Search Regular Expression and Printing out the line) 它能使用正則表達式搜索文本,并把匹配的行打印出來。 grep包括grep、egrep和fgrep。 egrep表示擴展的grep,相比grep支持更多的匹配模式, “grep -E”相當于egrep。 fgrep是fast gre…

    2017-04-06
  • 馬哥教育網絡班25期-第4周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ~]# cp -r /etc/skel/ /home/tuser1 ~]# cd /home/tuser1 tuser1]# ll -a 總用量…

    Linux干貨 2016-12-26
  • SQL優化大全

    1. 優化SQL步驟 1. 通過 show status和應用特點了解各種 SQL的執行頻率        通過 SHOW STATUS 可以提供服務器狀態信息,也可以使用 mysqladmin extende d-status 命令獲得。 SHOW STATUS 可以根據需要顯示 session 級別的統計結果和 g…

    Linux干貨 2015-04-13
  • Linux程序包管理之RPM

    Linux程序包管理之RPM RPM概念 rpm是什么 RPM 是Ret Hat Package Manager(RPM軟件包管理器)的縮寫,遵循GPL協議,可以運行在各種Linux上,公認的行業標準。 rpm干什么 對于終端用戶來說 簡化了Linux系統的安裝、卸裝、更新和升級的過程,用命令完成 對于開發者來說 RPM允許把軟件編碼包裝成源代碼和程序包提供…

    Linux干貨 2016-11-22
欧美性久久久久