Shell教程(四):條件陳述式、迴圈語句、break/continue_Shell

來源:互聯網
上載者:User

在編寫shell指令碼,有可能是一種情況,當你需要採取一個路徑兩條路徑。所以,需要利用條件陳述式,讓程式作出正確的決策和執行正確的動作。

UNIX Shell支援條件陳述式,從而根據不同的條件下執行不同的操作。在這裡,我們將解釋以下兩個決策語句:

·        if...else 語句

·        case...esac 條件陳述式 if...else 語句:

if else語句是有用的決策語句,可以用來從一個給定的選項中選擇一個選項。

UNIX Shell支援以下形式的if.. else語句:

·        if...fi 語句

·        if...else...fi 語句

·        if...elif...else...fi 語句

大部分的 if 語句檢查前面的章節中討論的關係運算子的關係。 case...esac 語句:

if...elif 可以使用多個 elif  語句執行多分支。然而,這並不總是最佳的解決方案,尤其是當所有的分支依賴於一個單一的變數的值。

UNIX Shell支援 case...esac 語句處理正是由於這個情況,它這樣做更有效地比 if...elif 語句。

目前只有一種形式的情況下,這裡詳細case...esac 語句:

·        case...esacstatement

UNIX shell 的 case...esac 語句,比較像其他程式設計語言裡的 switch...case ,如C或C+ +和Perl等非常相似。

 

 

迴圈是一個強大的編程工具,使您能夠重複執行一組命令。在本教程中,您將學習以下類型的迴圈Shell程式:

·        while 迴圈

·        for 迴圈

·        until 迴圈

·        select 迴圈

你會根據不同情況使用不同的迴圈。例如用 while 迴圈執行命令,直到給定的條件下是 ture ,迴圈直到執行到一個給定的條件為 false。

有良好的編程習慣,將開始使用方式的基礎上適當的迴圈。這裡while和for迴圈類似在大多數其他的程式設計語言,如C,C++ 和 Perl 等。 嵌套迴圈:

所有支援嵌套迴圈的概念,這意味著可以把一個迴圈內其他類似或不同的迴圈。這種嵌套可以去高達無限數量的時間根據需要。

嵌套的while迴圈和類似的方式,可以嵌套其他迴圈的基礎上的編程要求下面是一個例子: 嵌套while迴圈:

作為另一個while迴圈的身體的一部分,這是可以使用一個while迴圈。 文法:

while command1 ; # this is loop1, the outer loop
do
   Statement(s) to be executed if command1 is true
 
   while command2 ; # this is loop2, the inner loop
   do
      Statement(s) to be executed if command2 is true
   done
 
   Statement(s) to be executed if command1 is true
done
例如:

這裡是迴圈嵌套一個簡單的例子,讓我們添加另一個倒計時迴圈內的迴圈,數到九:

#!/bin/sh
 
a=0
while [ "$a" -lt 10 ]    # this is loop1
do
   b="$a"
   while [ "$b" -ge 0 ]  # this is loop2
   do
      echo -n "$b "
      b=`expr $b - 1`
   done
   echo
   a=`expr $a + 1`
done

這將產生以下結果。重要的是要注意 echo -n 是如何工作。在這裡,-n選項echo ,以避免列印一個新行字元。

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

 

 

到目前為止,我們已經看到了,建立迴圈和使用迴圈來完成不同的任務。有時候,你需要停止迴圈或跳過迴圈迭代。

在本教程中,您將瞭解以下兩個語句用於控制 Shell 迴圈:

1.  break 語句

2.  continue 語句 無限迴圈:

迴圈有限的生命,他們跳出來,一旦條件是 false 還是 false 取決於迴圈。

由於所需的條件是不符合一個迴圈可能永遠持續下去。永遠不會終止執行一個迴圈執行無限次數。出於這個原因,這樣的迴圈被稱為無限迴圈。 例子:

下面是一個簡單的例子,使用while迴圈顯示數字0到9:

#!/bin/sh
 
a=10
 
while [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

這個迴圈將永遠持續下去,因為常是大於10,它永遠不會成為小於10。所以這是無限迴圈真實的例子。 break語句:

break語句用於終止整個迴圈的執行,完成後所有行代碼break語句的執行。然後,它逐級的代碼跟在迴圈結束。 文法

將用於以下break語句退出迴圈:

break

將用於以下break語句退出迴圈:

break n

這裡n指定的第n個封閉的迴圈退出。 例子:

下面是一個簡單的例子展示了迴圈將終止只要一變為5:

#!/bin/sh
 
a=0
 
while [ $a -lt 10 ]
do
   echo $a
   if [ $a -eq 5 ]
   then
      break
   fi
   a=`expr $a + 1`
done

這將產生以下結果:

0
1
2
3
4
5

下面是一個簡單的嵌套迴圈的例子。這個指令碼打破兩個迴圈,如果的 var1 等於2 和 var2 等於0:

#!/bin/sh
 
for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ]
      then
         break 2
      else
         echo "$var1 $var2"
      fi
   done
done

這將產生以下結果。內迴圈有一個 break 命令與參數2。這表明,如果條件得到滿足應該跳出外迴圈,並最終從內迴圈跳出。

1 0
1 5
continue 語句:

continue語句break命令類似,但它會導致當前迭代的迴圈退出,而不是整個迴圈。

這種參數是有用的,當一個錯誤已經發生,但你想嘗試執行下一個迴圈迭代。 文法

continue

和break語句一樣,一個整數參數可以給continue命令跳過嵌套迴圈的命令。

continue n

這裡n指定第n個封閉迴圈 continue 。 例子:

下面的迴圈利用continue語句返回,並開始處理下一個語句:

#!/bin/sh
 
NUMS="1 2 3 4 5 6 7"
 
for NUM in $NUMS
do
   Q=`expr $NUM % 2`
   if [ $Q -eq 0 ]
   then
      echo "Number is an even number!!"
      continue
   fi
   echo "Found odd number"
done

這將產生以下結果:

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd numberfrom: http://www.yiibai.com/shell/what_is_shell.html#
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.