shell腳本的if語句

                              第一篇  shell腳本中的if語句

一、shell腳本的語句控制

       □前面提到了過程式編程語言有三種過程:

            順序執行:按照順序一條一條語句執行;

            選擇執行:按照條件進行選擇執行;

            循環執行:按照給定的循環條件進行循環執行。

       □其中,順序不需要特定的控制,只需按照語句依次執行即可;選擇執行,則需要特定的控制語句(如:if,case)來判斷執行;循環執行則需要特定的循環控制控制(如:for,while等)。


二、使用read 命令來接受輸入

       □在bash腳本編程過程當中有時程序需要與用戶之間進行交互,如提示用戶輸入一些參數等,此時,我們可以使用read命令來完成此功能

       □語法:read [option]…[name]

                 -p :“說明信息”  (指示要顯示的提示)   

                 -t :TIMEOUT

       注意:read從標準輸入中讀取值,給每個單詞分配一個變量,所有剩余單詞都被分配給最后一個變量

       示例:read -p “Enter a filename:“ FILE

三、條件選擇if語句

     □選擇執行:

       注意:if語句可嵌套(if是一個關鍵字,不是一個命令。)

     ?單分支

           if 判斷條件;then

           條件為真的分支代碼

           fi

     ?雙分支

           if 判斷條件; then

           條件為真的分支代碼

           else

           條件為假的分支代碼

           fi

?  □多分支

          if CONDITION1; then

              if-true

          elif CONDITION2; then

              if-ture

          elif CONDITION3; then

              if-ture

               …

          else

              all-false

          fi

    從上而下逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句

   示例:

?    根據命令的退出狀態來執行命令

          if ping-c1-W2station1 &> /dev/null;then

          echo 'Station1isUP' 

          elif grep"station1"~/maintenance.txt &> /dev/null;then

          echo 'Station1isundergoingmaintenance‘

          else 

          echo'Station1isunexpectedlyDOWN!' exit1

          fi

四、條件判斷case語句(離散值的匹配)

     □ case 變量引用in

         PAT1)

              分支1

          ;;

        PAT2)

              分支2

          ;;

        …

        *)

            默認分支

          ;;

        esac

     □case支持glob風格的通配符:

           *: 任意長度任意字符

           ?: 任意單個字符

          []:指定范圍內的任意單個字符[adc](也可以表示范圍[1-10])

          a|b: a或b



注意:1.if語句在使用過程中,可以實現多重嵌套,這里一定要注意書寫的格式,分好層次,不要寫亂了

        2.case一般是在離散值的匹配當中用的較多,一定要注意書寫格式,不要寫錯了

        3.在寫腳本的時候不能著急,要構思清新,每一種情況都要考慮到。



練習:

      1、寫一個腳本/root/bin/createuser.sh,實現如下功能:使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息

練習1.png

      2、寫一個腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息

練習2.png

      3、寫一個腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)

      4、寫一個腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否為正整數

練習4.png


五、循環語句

    □循環執行

        將某代碼段重復運行多次

    □重復運行多少次:

            循環次數事先已知

            循環次數事先未知

    □有進入條件和退出條件

    □for, while, until

六、for循環

    □語法:for 變量名in 列表;do

           循環體

            done

    ?執行機制

       依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束

    □列表生成方式

          (1) 直接給出列表

          (2) 整數列表:

          (a) {start..end}

          (b) $(seq[start [step]] end)

          (3) 返回列表的命令

               $(COMMAND)

          (4) 使用glob,如:*.sh

          (5) 變量引用;

               $@, $*

六、while循環

     □語法:while CONDITION; do

              循環體

                done

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

       因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

     ?進入條件:CONDITION為true;

     ?退出條件:CONDITION為false


七、until循環

    □語法until CONDITION; do

        循環體

        done

    ?進入條件:CONDITION 為false

    ?退出條件:CONDITION 為true


八、循環控制語句

    1.用于循環體中

        continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層

        break [N]:提前結束第N層循環,最內層為第1層

    2.創建無限循環

        ?while true; do

            循環體

             done

        ?until false; do

            循環體

             done

for練習

   1、判斷/var/目錄下所有文件的類型

練習for1.png

   2、添加10個用戶user1-user10,密碼同用戶名

練習for2.png

   3、/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的文件輸出為文件加stop,以S開頭的文件輸出為文件名加start;

        “K34filename stop”

        “S66filename start”

for3.png

   4、寫一個腳本,提示輸入正整數n的值,計算1+2+3+…n的總和

for4.png

   5、寫一個腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態

練習for5.png

   6、打印九九乘法表

練習for6.png

6.png

while練習

   1、求100以內所有正整數之和

while1.png

   2、通過ping命令探測172.16.250.1-254范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。

while2.png

   3、打印九九乘法表

while3.png

   4、利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者

while4.png

while4-1.png

   5、打印國際象棋棋盤

while5.png

while5-1.png

while5-2.png

while5-3.png

until練習

   1、每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。

until1.png

   2、隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出。

until2.png


                                

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

(1)
zhumengxiaotaozhumengxiaotao
上一篇 2016-08-19
下一篇 2016-08-19

相關推薦

  • Linux路由實驗

    一    實驗背景:路由器的功能是將不同網段的主機建立通信,本次試驗是在使用linux主機當作路由器,完成主機間通信。如下圖所示 二、實驗環境:主機A和B為CentOS7.2,主機C和D為CentOS6.8,且C和D上分別都有兩塊網卡 三、實驗步驟     注意:為避免干擾項,需將每臺主機…

    Linux干貨 2016-09-07
  • 硬鏈接與軟鏈接的區別

    硬鏈接與軟連接                本文僅用于個人學習參考:         簡單介紹了硬鏈接與軟連接的區別。  &nb…

    Linux干貨 2016-10-20
  • 計算機基礎知識點

    說明:(僅僅記錄個人認為重要的內容) CPU的相關概念 主頻:主頻是cpu的時鐘頻率(cpu clock speed),是cpu運算時的工作頻率(1秒內發生的同步脈沖數) 的簡稱。單位是HZ,一般 來說,主頻越高,cpu的速度越快。由于內部結構的不同,并非所有的時鐘頻率 相同的cpu的性能都一樣  外頻:系統…

    Linux干貨 2017-02-14
  • CentOS系統啟動流程

    概述:系統啟動流程是Linux一個重要的內容,深入了解啟動流程會對我們學習Linux起到一個順水推舟的作用。因為CentOS 7改動較大,所以下面的內容只是針對CentOS 5和6來說的。下面進入正題。 啟動流程:  第一步:POST加電自檢    此過程的就是為了檢測一下外界的硬件設備是否能夠正常運行,如CPU,內存設備,硬盤…

    Linux干貨 2016-09-13
  • 搭建雙主模型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
  • DNS

    配置緩存服務器: #vim /etc/named.conf Options { Listen-on port 53 { 127.0.0.1;172.16.0.68;}; //listen-on-v6 port 53 {::1;}; ……. Allow-query {any;}; …… Dnssec-enable…

    2017-06-04

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-22 13:23

    都循環語句語法總結的較好,作業也完成的很出色,我們可以嘗試著在寫腳本的同時總結一些各個循環語句所適應的場景,以便于在以后使用過程中選擇最好的語句,這樣有利于我們節約腳本運行的時間,提高我們的工作效率哦。

欧美性久久久久