Linux之while、until語句

來源:互聯網
上載者:User

標籤:declare   let   linux   until   while   

一、while的文法格式

二、until的文法格式

三、樣本與練習

四、補充

 

一、while的文法格式

------------------------------------------

while 測試條件; do   

    語句1

    語句2

    ······

done

------------------------------------------

條件滿足時就迴圈,直到條件不滿足,則退出迴圈

退出迴圈的方法之一:在迴圈體中改變測試條件相應變數的值,如樣本1中,$I的值大於100則退出迴圈

 

常用於遍曆檔案每一行內容,如樣本3

while read LINE; do

    語句1

    語句2

    ······

done < /path/to/somefile

 

二、until的文法格式

------------------------------------------

until 測試條件;do

    語句1

    語句2

    ······

done

------------------------------------------

條件不滿足就迴圈,直到滿足時退出迴圈,例如樣本5,直到I大於100時,退出迴圈

 

三、樣本與練習

 

樣本1:計算100以內所有正整數的和

#!/bin/bash#Sum=0    #如果希望變數中儲存的值為整數型,最好使用let Sum=0或declare -i Sum=0這種形式I=1while [ $I -le 100 ];do    let Sum+=$I    #算術運算寫成這種格式要注意不要漏掉let    let I++    #算術運算寫成這種格式要注意不要漏掉letdoneecho "Sum:$Sum"

 

樣本2:計算100以內所有偶數的和

#!/bin/bash#EvenSum=0    #如果希望變數中儲存的值為整數型,最好使用let EvenSum=0或declare -i EvenSum=0這種形式I=0while [ $I -le 100 ]; do    let EvenSum+=$I    let I++    let I++doneecho "EvenSum:$EvenSum"或#!/bin/bash#EvenSum=0I=0while [ $I -le 100 ]; do    if [ $[$I%2] -eq 0 ]; then    #除二取餘為0時        let EvenSum+=$I    fi    let I++done

樣本3:如果使用者的ID號為偶數,則顯示其名稱和shell;對所有使用者執行此操作

#!/bin/bash#while read Line; do    Uid=`echo $Line | cut -d: -f3`    if [ $[$Uid%2] -eq 0 ]; then    #除二取餘為0時        echo $Line | cut -d: -f3,7    fidone < /etc/passwd    #此時while語句實現了一行一行遍曆整個檔案內容

 

樣本4:轉換使用者輸入的字元為大寫,輸入quit時則退出

#!/bin/bash#read -p "A string [quit for quiting]:" String        while  [ "$String" != quit ]; do    #一定要用雙引號,字串有空格時會報錯    echo $String | tr ‘a-z‘ ‘A-Z‘    read -p "Next String [quit for quiting]:" Stringdone


樣本5:計算100以內所有正整數的和

#!/bin/bash#Sum=0I=1until [ $I -gt 100 ]; do    #直到I的值大於100才退出    let Sum+=$I    let I++doneecho "Sum:$Sum"

 

樣本6:每隔5秒查看hadoop使用者是否登入,如果登入,顯示其登入並退出;否則,顯示目前時間,並說明hadoop尚未登入(while 簡寫)

#!/bin/bash#until who | grep "^hadoop" &> /dev/null; do    date    sleep 5doneecho "hadoop is logged in."或#!/bin/bash#who | grep "^hadoop" &> /dev/nullRet=$?until [ $Ret -eq 0 ]; do    #grep匹配到時,命令執行狀態傳回值是0,未匹配到則是非0    date    sleep 5doneecho "hadoop is logged in."或#!/bin/bash#who | grep "^hadoop" &> /dev/nullRet=$?while [ $Ret -ne 0 ]; do    date    sleep 5    who | grep "^hadoop" &> /dev/null     Ret=$?    #再次取得命令執行狀態的傳回值 doneecho "hadoop is logged in."

 

練習1:寫一個指令碼:  
1) 顯示一個菜單給使用者:  
d|D) show disk usages.  
m|M) show memory usages.  
s|S) show swap usages.  
*) quit.       
2) 當使用者選擇完成,顯示相應資訊後,不退出;而讓使用者再一次選擇,再次顯示相應內容;除了使用者使用quit

#!/bin/bash# Date: 2015-04-20# Author: ArvinLau# Description: # Version: 1.0cat << EOF    d|D) show disk usages.m|M) show memory usages.s|S) show swap usages.*) quit.EOFRet=0    #自訂退出的命令執行狀態傳回值,通過until語句的直到滿足條件,否則一直迴圈完成練習until [ "$Ret" -eq 9 ];do    read -p "Give a choice:" Choice    case $Choice in    d|D)        df -lh;;    m|M)        free -m;;    s|S)        cat /proc/swaps;;    quit)        echo "Quit."        exit 9;;    #自訂命令執行狀態傳回值    *)        echo -n "Invalid input,";;    esac    Ret=$?    #只要不是自訂的9,就會不斷迴圈done或#!/bin/bash# Date: 2015-04-20# Author: ArvinLau# Description: # Version: 1.0cat << EOF    d|D) show disk usages.m|M) show memory usages.s|S) show swap usages.*) quit.EOFuntil [ "$Choice" == quit ];do    #當變數字串是quit時,退出迴圈  read -p "Give a chioce:" Choice       case $Choice in    d|D)        df -lh;;    m|M)        free -m;;    s|S)        cat /proc/swaps;;    quit)        echo "Quit."        exit 9;;    *)        echo -n "Invalid input,";;    esacdone

四、算術運算子

下面每行的運算運算式,運算結果都相同

Sum=$[$Sum+$M]            let Sum+=$M          

------------------------------------------

Sum=$[$Sum+1]             let Sum+=1           let Sum++    #變數自身+1

------------------------------------------

Sum=$[$Sum-$M]            let Sum-=$M

------------------------------------------

Sum=$[$Sum*$M]            let Sum*=$M

------------------------------------------

Sum=$[$Sum/$M]            let Sum/=$M

------------------------------------------

Sum=$[$Sum%$M]            let Sum%=$M

本文出自 “Arvin Lau” 部落格,請務必保留此出處http://64314491.blog.51cto.com/2784219/1636240

Linux之while、until語句

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.