shell腳本的各種循環

For循環

For循環格式

     For   變量名  in    列表    ;   do

           循環體

     Done

執行機制:

依次將列表中的元素賦值給變量名,每次賦值后即執行一次循環體,知道列表中的元素耗盡,循環結束。

列表中可以是各種各樣的空格隔開的字符,數字,單詞都可以,列表中有多少個字符,將執行多少遍循環。在執行循環的時候,第一次執行循環,將匹配列表中的第一個值,比如說列表中有a b c d四個字母,當第一次執行循環的時,這個變量的值將等于a。循環體可以執行很多指令。

例如:

blob.png 

列表生成方式:

1)整數列表:

              {1..10}  生成110的數   但是不可以加變量

              Seq 1  10  生成110的數  可以加變量

              步進 seq 1 2 10   每次加2進行遞增

            blob.png

由于seq是命令,在for循環里要調用命令,即命令調命令,需要用反向單引號包住。

  egfor id in `seq  1  10`,也可以用$()。

(2)返回列表命令

           $(COMMAND)

3)使用glob  如:“*.sh

       例如:#!/bin/bash

               For file in  /root/bin/*.sh

               匹配該路徑下所有是.sh結尾的文件

               do

               echo the filename is $file

 

(4)變量引用    $*  $@

           $* $@的區別

新建腳本test.sh

blob.png 

執行結果

blob.png 

$*a  b  c看成了一個獨立的整體。

新建腳本test2.sh

blob.png 

執行結果

blob.png 

$@a  b  c看成了三個獨立的字符串。

但是,這只是將$@  $*用引號引起來才有區別,不用引號則二者都將a  b  c看成三個獨立的字符串,沒有區別。

While循環

通用性更好,適合范圍廣

While格式:

        While  CONDITION do

        循環體

Done

COMDITTON:循環控制條件,進入循環之前,先做一次判斷,每一次循環之后再做一次判斷,條件為true,則執行一次循環。直到條件測試狀態為“false”終止循環。

因此,COMDITION一般應該有循環控制變量。而此變量的值會在循環體不斷的被修正。

進入條件:CONDITIONtrue

退出條件:CONDITIONfalse

COMDITION不僅是執行循環的條件,也是進入循環的條件。

 

例如:

blob.png 

執行結果

blob.png 

先判斷10是否大于1,大于1則打印“da yu 1”并10-1=9再進入循環,直到等于1則退出循環。

Until循環

格式:

    Until  CONDITION  ;  do

    循環體

Done

進入條件:CONDITIONfalse

退出條件;CONDITIONtrue

    先判斷CONDITION是否為真,如果為真,則退出循環,如果CINDITION為假,才

才進入循環體,執行完循環體,再判斷CONDITION是否為假,如果為假,則再進入循

環體,直到條件結果為真時,才退出循環。

例如:

blob.png 

執行結果

blob.png 

i=10小于1條件為假時,進入循環,并輸出‘da yu 1’,并10-1=9繼續進入循環。直到結果等于1時,循環結束,輸出yyy。

循環控制語句

  Continue[N]:提前結束第N層的本輪循環,而直接進入下一輪循環判斷,最內層為第一層。Continue是退出當次循環。

例如:

blob.png 

10小于1為假時,進入循環,10除以2余數為0且余數不等于1,為假,則打印$i也就是10。然后10-1=9進入循環。9除以2余數為1且余數等于1,為真。則執行9-1,并退出本次循環,進入下一次循環,依次類推,直到$i小于1為真時,退出循環,并打印yyy。

 

 

Break[N]提前結束第N層循環,break是退出整個循環,例如:

shell腳本的各種循環blob.png 

執行結果:

blob.png 

10小于1為假時,進入循環,10的余數是0,不等于1,為假。將10打印輸出并減1進入下一輪循環。9小于1為假時,進入循環,9的余數是1,為真,則break退出整個循環,并打印yyy。

While的特殊用法

遍歷文件的每一行。

While  read  line ;do

       循環體

Done  < /PATH/FROM/SOMEFILE

依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line。

例如:

blob.png 

這是一個死循環。

 

 

例如:while read passwd ; do echo $passwd |cut -d: -f1,3;done < /etc/passwd

輸入一個變量$passwd。當每次讀一個文件進來后,每一行的內容就賦值給了$passwd這個變量,并將取出的行顯示出來。以“:”作為分隔符,取出其第一列和第三列,然后重定向輸出給/etc/passwd。是一行一行處理的,讀一行打印一遍。

雙小括號的特殊用法 ((…….))

雙小括號方法,即((……..))格式,也可以用來算數運算,雙小括號也可以使用bash shell實現c語言風格的變量操作。

#i=10

#((i++))

例如:

blob.png 

For循環的特殊格式

for((控制變量初始化;條件判斷表達式;控制變量的修正表達式))

do

                 循環體

Done

控制變量初始化:僅在運行到循環代碼段時執行一次,只執行一次。

控制變量的修正表達式:每輪循環結束,會先進行控制變量的修正運算,然后再條件判斷。

例如:

For  ((cmd1;cmd2;cmd3))

Do

Cmd4

Done

    先執行cmd1(不管真假),執行完后再執行cmd2,判斷cmd2是否為真,為真則執行cmd4,如果為假,則退出循環。

    Cmd4執行完后接著執行cmd3。執行完cmd3后,接著執行cmd2,判斷cmd2

真假,為真則繼續循環。

    Cmd1只執行一次,作為for循環的初始化語句,若cmd1為假,則退出。

    Cmd2才是進入循環和退出循環的判斷條件,cmd3cmd4只是執行,不管真假。

例如:

blob.png 

執行結果 :6

Select循環與菜單case

格式:

    Select  variable  in  list

        Do

              循環體命令

        Done

Select循環主要用來創建菜單。按數字順序排列的菜單項將顯示在標準錯誤傷,并顯示PS3提示符,等待用戶輸入。

用戶輸入菜單列表中的某個數字,將執行相應的命令。

用戶輸入被保存在內置變量ERPLY中。

例如:

blob.png 

執行結果

blob.png 

Select是個無限循環,因此要記住使用break命令退出循環,或用exit命令終止腳本,也可以按Ctrl+C退出循環。

Select經常和case聯合使用。

for循環類似,可以省略in  list,此時使用位置變量。例如:$1  $2  $3

 

原創文章,作者:zzd,如若轉載,請注明出處:http://www.www58058.com/37905

(1)
zzdzzd
上一篇 2016-08-21
下一篇 2016-08-21

相關推薦

  • 軟件包管理

    軟件包管理 軟件運行和編譯 ABI:應用程序二進制接口;直接給編譯好的二進制使用; windows與linux不兼容, windows: ELF linux: PE 庫級別的虛擬化: linux:WINE windows:Cywin API:定義了和庫之間的接口;編寫應用程序時調用的函數之類的; 編譯程序源代碼(.c) –> 預編譯(.i)…

    Linux干貨 2017-04-21
  • 進入linux世界的初步認識

    1、 描述計算機的組成及其功能.
    2、 按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別.
    3、 描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述.
    4、 說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述.
    5、 如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的.
    6、 請羅列Linux發行版的基礎目錄名稱命名法則及功用規定.

    Linux干貨 2018-02-25
  • 搭建雙主模型lpvs的高可用集群

    一、實驗要求: 1、基于LVS-DR模型上實踐; 2、調度器高可用(雙主模型); 二、實驗拓撲圖: 三、實驗步驟: 1、  設置RS (a)設置http主頁 Yum install httpd Vim /var/www/html/index.html <h1>172.18.24.3 server 1或者172.18.24.5server…

    2017-05-15
  • lvs負載集群實驗(實現wordpress)

    項目要求: (1) lvs 調度兩臺 nginx+php-fpmreal-server,采用 dr 模型,調度算法為 rr (2) mariadb 為 real-server 提供數據庫,nfs 掛載至 2 臺 real-server 提供文件服務 (3) 由于實驗環境地址沖突將VIP替換為172.18.60.60 實施步驟: 一、配置NFS+mariadb…

    2017-05-10
  • CentOS系統安裝

    centos系統安裝        安裝程序:anaconda,Anaconda是RedHat、CentOS、Fedora等Linux的安裝管理程序。它可以提供文本、圖形等安裝管理方式,并支持Kickstart等腳本提供自動安裝的功能。此外,其還支持許多啟動參數,熟悉這些參數可為安裝帶來很多方便。該程序的功能是把位于光…

    Linux干貨 2016-09-23
  • N22-第一周作業

    1、描述計算機的組成及功能      計算機系統由硬件系統和軟件系統組成。硬件系統(Hardware system)是計算機完成計算工作  的物質基礎。軟件系統(Software system):是在計算機硬件設備上運行的各種程序,是介于用戶  和硬件系統之間的界面。1.1 計算機的硬件系…

    Linux干貨 2016-08-22

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-21 23:12

    文章對shell循環語句的語法總結的很好,同時也通過簡單的練習加深了自己與各語法的運用,課堂練習都是老師精心挑選出來的,也是筆試中常會遇到的經典試題,需要認真完成哦。

欧美性久久久久