Shell編程(for循環、while循環、break、continue、exit)

for循環

語法:for 變量名 in 條件; do …; donehtml

案例1: 需求:計算1-100求和 腳本實現:shell

#!/bin/bash
sum=0
for i in `seq 1 100` #設置遍歷條件爲1-100
do
  sum=$[$sum+$i]
  echo $i
done
echo $sum

案例2: 需求:遍歷出指定目錄下的目錄名稱 腳本實現:bash

#!/bin/bash
cd /tmp/ #進入目錄這一步很重要
for a in `ls /tmp/`
do
  if [ -d $a ]
  then 
    ls -d $a
  fi
done

while循環

語法:while 條件; do … ; done性能

案例1: 需求:監控腳本,實現每隔30s檢查一次負載,當系統的負載大於10的時候,發一封郵件(監控腳本),最小單元是任務計劃 cron 腳本實現:code

#!/bin/bash
while : # 冒號 : 表示死循環的意思,或者1,或者 true都是死循環
do
   load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`
   if [ $load -gt 10 ]
   then
       /usr/local/sbin/mail.py xxx@qq.com "load high" "$load"
   fi
   sleep 30 #休眠30秒,由於檢查系統負載,不須要一直監控,節省性能
done

ps :防止意外終止,能夠打開screen,在screen運行腳本htm

上面腳本腳本用到的知識:字符串

  • w //查看系統負載 ;
  • uptime 能夠直接顯示 w 系統負載的第一行,就能夠省去 head -1
  • head -1 //取第一行
  • awk -F 'load average: ' '{print $2}' // 以'load average: '分隔,輸出第二段
  • cut -d . -f1 // 以 . 分隔 取第一段

案例2: 需求:須要用戶輸入一個數字;輸入的不是數字,是數字,輸入爲空;迴應相應的結果 腳本實現:get

#!/bin/bash
while :
do
   read -p "please input a number:" n
   if [ -z "$n" ]
   then 
       echo "you need input sth."
       continue #結束本次循環,進行下次循環
   fi
   n1=`echo $n|sed 's/[0-9]//g'`
   if [ -n "$n1" ]
   then
	echo "you just only input numbers."
        continue
   fi
   break # 退出循環
done
echo $n

break跳出循環

break 經常使用於循環語句中,跳出整個循環語句,直接結束全部循環input

腳本示例:it

#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ] #比較數字,用-eq ;如果比較的是字符串,那須要用 ==
    then
       break
    fi
    echo $i
done
echo aaaaa

continue結束本次循環

結束本次循環,進行下一次循環

腳本示例:

#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
       continue
    fi
    echo $i
done
echo aaaaa

執行腳本:3輸出一次跳出,進行了下次循環

[root@yolks3 shell]# sh continue.sh 
1
1
2
2
3
4
4
5
5
aaaaa

exit退出整個腳本

exit直接結束退出整個腳本,能夠定義退出的數值,能夠用於肯定腳本運行到什麼地方的時候,結束

腳本示例:

#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
       exit
    fi
    echo $i
done
echo aaaaa

運行:執行到3後面的再也不執行,直接退出腳本

[root@yolks3 shell]# sh exit.sh 
1
1
2
2
3

拓展

select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html

相關文章
相關標籤/搜索