shell腳本之while和until

bash編程的循環:while和until


while 測試條件; do

語句1

語句2

...

done


Count=2


if [ $Count -le 5 ]; then


fi


while [ $Count -le 5 ]; do


let Count++

done


條件滿足時就循環,直到條件不再滿足,則退出循環;


for如何退出循環?遍歷列表中的元素完成;

while循環呢?在循環體改變測試條件相應變量等的值。


補充:算術運算符

Sum=$[$Sum+$I]

Sum+=$I

+=

-=

*=

/=

%=


Sum=$[$Sum+1]

Sum+=1

let Sum++

let Count--




and --> AND

exit --> EXIT

quit




計算100以內所有正整數的和;

Sum=0

for I in {1..100}; do

Sum+=$I

done

echo $Sum


#!/bin/bash

Sum=0

Count=1


while [ $Count -le 100 ]; do

let Sum+=$Count

let Count++

done


echo $Sum



計算100以內所有偶數的和;

#!/bin/bash

#

EvenSum=0

Count=0


while [ $Count -le 100 ]; do

let Sum+=$Count

let Count+=2

done


while [ $Count -le 100 ]; do

if [ $[$Count%2] -eq 0 ]; then

Sum+=$Count

fi

let Count++

done


while循環遍歷文件的每一行:

while read LINE; do

statement1

statement2

...

done < /path/to/somefile


練習:如果用戶的ID號爲偶數,則顯示其名稱和shell;對所有用戶執行此操作;


while read LINE; do

Uid=`echo $LINE | cut -d: -f3`

if [ $[$Uid%2] -eq 0 ]; then

echo $LINE | cut -d: -f1,7

fi

done < /etc/passwd



練習:轉換用戶輸入的字符爲大寫,除了quit(遇見quit退出);


read -p "A string: " String


while [ "$String" != 'quit' ]; do

echo $String | tr 'a-z' 'A-Z'

read -p "Next [quit for quiting]: " String

done



until 測試條件; do

語句1

語句2

...

done


條件不滿足就循環,直到滿足時,退出循環;


例子:計算100以內所有正整數的和;

Sum=0

Count=1


until [ $Count -gt 100 ]; do

let Sum+=$Count

let Count++

done


echo $Sum


練習:轉換用戶輸入的字符爲大寫,除了quit(遇見quit退出);


read -p "A string: " String


until [ "$String" == 'quit' ]; do

echo $String | tr 'a-z' 'A-Z'

read -p "Next [quit for quiting]: " String

done




練習:每隔5秒查看hadoop用戶是否登錄,如果登錄,顯示其登錄並退出;否則,顯示當前時間,並說明hadoop尚未登錄:


who | grep "^hadoop" &> /dev/null

RetVal=$?


until [ $RetVal -eq 0 ]; do

date

sleep 5

who | grep "^hadoop" &> /dev/null

RetVal=$?

done


echo "hadoop is here."





until who | grep "^hadoop" &> /dev/null; do

date

sleep 5

done


echo "hadoop is here."





who | grep "^hadoop" &> /dev/null

RetVal=$?


while [ $RetVal -ne 0 ]; do

date

sleep 5

who | grep "^hadoop" &> /dev/null

RetVal=$?

done


echo "hadoop is here."


練習:使用while循環統計/etc/rc.d/init.d/functions中#開頭的行數;


let Count=0

declare -i Count=0


#!/bin/bash

Count=0

while read LINE ; do

if echo $LINE | grep "^[[:space:]]*#" &> /dev/null ; then

let Count++

fi

done < /etc/rc.d/init.d/functions

echo -e "\n\ttotal $Count lines start with #.\n"


#!/bin/bash

#

Num=0

while read LINE; do

echo $LINE |grep "^#.*" &> /dev/null && let Num++

done < /etc/rc.d/init.d/functions

echo "#Number: $Num"



計算100以內所有偶數的和以及奇數的和;在一個循環中實現;

要求:分別使用while和until各自獨立實現。


#!/bin/bash

Evensum=0

Oddsum=0

Count=0

while [ $Count -le 100 ];do

if [ $[$Count%2] -eq 0 ];then

let Evensum+=$Count

else

let Oddsum+=$Count

fi

let Count++

done

echo "The Evensum is : $Evensum"

echo "The Oddsum is : $Oddsum"


#!/bin/bash

Evensum=0

Oddsum=0

Count=0

until [ $Count -gt 100 ]; do

if [ $[$Count%2] -eq 0 ];then

let Evensum+=$Count

else

let Oddsum+=$Count

fi

let Count++

done

echo "The Evensum is : $Evensum"

echo "The Oddsum is : $Oddsum"


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章