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 08:36
下一篇 2016-08-19 08:36

相關推薦

  • 雙主模型的Nginx高可用負載均衡集群

    實驗目的:使用keepalived實現Nginx的雙主高可用負載均衡集群 實驗環境:兩臺Nginx proxy(雙主Nginx,各需要兩塊網卡,eth0連接內網,eth1連接外網)、兩臺web server(請求的負載均衡)、一臺client用于驗證結果。 注意:為了不影響實驗結果,在實驗開始前先關閉iptables和selinux 操作步驟: 一、配置IP…

    2017-05-13
  • 對防火墻的初步認識

      防火墻,就是用于實現Linux下訪問控制的功能的,它分為硬件的或者軟件的防火墻兩種。無論是在哪個網絡中,防火墻工作的地方一定是在網絡的邊緣。而我們的任務就是需要去定義到底防火墻如何工作,這就是防火墻的策略,規則,以達到讓它對出入網絡的IP、數據進行檢測。    目前市面上比較常見的有3、4層的防火墻,叫網絡層的防火墻,還有7…

    Linux干貨 2017-06-15
  • 【典韋文章】zabbix實現微信報警

    作者 典韋,追馬代發 一、注冊微信公眾號 首先申請微信公眾平臺https://mp.weixin.qq.com/一個人最多申請5個公眾號,所以還是可以的 申請完之后就可以根據騰訊的提示使用微信公眾號了,然后用你自己的微信掃描關注微信號。 就可以看到用戶數了,接下來的就要使用的用戶的微信ID號了。點擊用戶查看用戶的微信ID號。在瀏覽器查看用戶的微信ID號。就是…

    Linux干貨 2015-08-24
  • 第六周

      第6周   1 復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit ; sed -i 's@^[[:space:]]\+@#@g&#03…

    Linux干貨 2017-02-13
  • lvs–各類型的原理及實現—(原理篇)

    前言:    LVS即是linux虛擬服務器,是一個虛擬的服務器集群系統,目的是使用集群技術和linux操作系統實現一個高性能、高可用的服務器。采用IP負載均衡技術和基于內容請求分發技術,將請求負載均衡地轉移到不同的服務器上執行,從而將一組服務器構成一個高性能、高可用的虛擬服務器。此篇的內容只包含兩種較為常用的LVS技術,分別是LVS-N…

    Linux干貨 2016-10-27
  • shell腳本2——順序選擇語句

    流程控制      順序執行      選擇執行      循環執行 順序執行:     條件選擇:if語句 if語句為選擇執行 注意:if語句可嵌套 單分支 if  判斷條件:t…

    Linux干貨 2016-08-18

評論列表(1條)

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

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

欧美性久久久久