bash ----循環控制

bash腳本編程:順序執行  選擇分支   循環執行


進入條件:

for:列表元素非空;

while:條件測試結果爲“真”

unitl:條件測試結果爲“假”

退出條件:

for:列表元素遍歷完成;

while:條件測試結果爲“假”

until:條件測試結果爲“真”



循環控制語句:

continue:提前結束本輪循環,而直接進入下一輪循環判斷;

while  CONDITION1; do

CMD1

...

if  CONDITION2; then

continue

fi

CMDn

...

done


            示例:求100以內所有偶數之和;

#!/bin/bash

#

declare -i evensum=0

declare -i i=0


while [ $i -le 100 ]; do

let i++

if [ $[$i%2] -eq 1 ]; then

continue 注:當eq=1就開始不往下執行了,開始新一輪循環

fi

let evensum+=$i

done

                echo "Even sum: $evensum"



break:提前跳出循環

退出方式:某個測試條件滿足時,讓循環體執行break命令;

格式: while  CONDITION1; do

CMD1

...

if  CONDITION2; then

break

fi

done

創建死循環:

while true; do

循環體

done

示例:求100以內所奇數之和

#!/bin/bash

#

declare -i oddsum=0

declare -i i=1


while true; do

let oddsum+=$i

let i+=2

if [ $i -gt 100 ]; then

break 注:當$i大於100時退出循環

fi

done




sleep命令:程序的睡眠時間


格式:sleep NUMBER

練習:每隔3秒鐘到系統上獲取已經登錄用戶的用戶的信息;其中,如果logstash用戶登錄了系統,則記錄於日誌中,並退出;

#!/bin/bash

#

while true; do

if who | grep "^logstash\>" &> /dev/null; then

break

fi

sleep 3

done


echo "$(date +"%F %T") logstash logged on" >> /tmp/users.log

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

#!/bin/bash

#

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

sleep 3

done

echo "$(date +"%F %T") logstash logged on" >> /tmp/users.log





while循環的特殊用法(遍歷文件的行):

格式:

while  read  VARIABLE; do

循環體;

done  <  /PATH/FROM/SOMEFILE

依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將基賦值給VARIABLE變量;


示例:找出ID號爲偶數的用戶,顯示其用戶名、ID及默認shell;

#!/bin/bash

#

while read line; do

userid=$(echo $line | cut -d: -f3)

username=$(echo $line | cut -d: -f1)

usershell=$(echo $line | cut -d: -f7)


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

echo "$username, $userid, $usershell."

fi

done < /etc/passwd




for循環的特殊用法:


格式: for  ((控制變量初始化;條件判斷表達式;控制變量的修正語句)); do

循環體

done

控制變量初始化:僅在循環代碼開始運行時執行一次;

控制變量的修正語句:每輪循環結束會先進行控制變量修正運算,而後再做條件判斷;

示例:求100以內所有正整數之和

#!/bin/bash

#

declare -i sum=0


for ((i=1;i<=100;i++)); do

let sum+=$i

done


echo "Sum: $sum."

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

示例:打印九九乘法表

#!/bin/bash

#

for ((j=1;j<=9;j++)); do

for ((i=1;i<=j;i++)); do

echo -e -n "${i}X${j}=$[${i}*${j}]\t"

done

echo

done


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