1. 程式人生 > >循環控制及狀態返回值的應用實踐(分析apache日誌)

循環控制及狀態返回值的應用實踐(分析apache日誌)

循環語句 ns3 總結 字段 順序 awk 字節數 shell 訪問日誌

12.1 break,continue,exit,return的區別和對比


break和continue在條件語句以及循環語句(for,while,if等)中用於控制程序的走向;exit用戶終止所有語句並退出當前腳本,除此之外,exit還可以返回上一次程序或命令的執行狀態值給當前shell;return類似於exit,只不過return僅用在函數返回值函數執行的狀態值。

break n 如果省略n,則表示跳出整個循環,n表示跳出循環的層數

continue n 如果省略n,則表示跳過本次循環,省略本次省略的剩余代碼,進入循環的下一次循環,n表示退出第n層繼續循環

exit n 推出當前的shell程序,n為上一層程序執行的返回值,n也可以省略,在下一個shell裏通過"$?"接收exit的n值

return n 用於函數裏作為函數的返回值,以判斷函數執行是否正確


12.2 break,continue,exit功能(總結上面的)

在while和for中

break用於退出當前循環語句,以為著循環結束

continue用於退出當前的循環層次,繼續下次循環

exit用戶直接退出腳本,不在執行shell

開發shell腳本為服務器臨時配置多個ip,ip的範圍是192.168.116.150-192.168.116.160,但是不創建192.168.116.155

#!/bin/bash
#ip:192.168.116.150-192.168.116.160

a=150
for i in `seq 10`
do
  if [ $a -eq 155 ]; then
    ((a++))
    continue

  fi
  ip=192.168.116."$a"

  ifconfig ens33:$i $ip netmask 255.255.255.0 up
  ((a++))

done

分析apache訪問日誌,把日誌中的每行數據的訪問字節數所對應的字段數字相加,計算出總的訪問量,給出實現順序,請用while循環結構實現。

#!/bin/bash
#logfile=/var/log/httpd/access_log
sum=0
exec <  /var/log/httpd/access_log
while read line
do
#  sum=0
  b=`echo "$line" | awk '{print $10}'`
  a=$?
  expr $a + 5 >/dev/null
  if [ $? -eq 0 ]; then
   sum=$(($sum+$b))
  fi
done
echo $sum


循環控制及狀態返回值的應用實踐(分析apache日誌)