天天看點

shell小腳本 --綜合小例子通路目前機器22端口的tcp連接配接數

[[email protected] /]$ top -d 1 -n 5 -b | grep -i -E "\b24959\b" --line-buffer | awk 'BEGIN{print "cpu","mem"}{print $9,$10;total+=$9;total2+=$10} END{{print "-----";print total/5,total2/5}}'
           

這條指令可以用來統計某個程序的cpu和mem的情況

grep --line-buffer 可以實時輸出不用等到 設定的5次結果全部結束才顯示解雇

top -d 1 -n 5 -b : 1秒間隔執行5次 batchmode

[[email protected] /]$ top -d 1 -n 5 -b | grep -i -E "\b24959\b" --line-buffer | awk 'BEGIN{print "cpu","mem"}{print $9,$10;total+=$9;total2+=$10} END{{print "-----";print total/5,total2/5}}'
cpu mem
6.2 1.6
1.0 1.6
2.0 1.6
1.0 1.6
2.0 1.6
2.44 1.6
           

比較一下更好的思路

top -b -d 1 -n 3|grep '^[ 0-9][1-9]'|less 先過濾掉頭部資訊隻篩選出 程序資訊行

[[email protected] /]$ perf_get(){ top -b -d 1 -n 3|grep '^[ 0-9][1-9]'| awk '{print $1,$9,$10,$NF}'|grep -i "$1"| awk 'BEGIN{print "CPU","MEM"}{cpu+=$2;mem+=$3;print$0}END{print "";print "avg",cpu/NR,mem/NR}'; }

再來格式化
[[email protected] /]$ perf_get(){ top -b -d 1 -n 3|grep '^[ 0-9][1-9]'| awk '{print $1,$9,$10,$NF}'|grep -i "$1"| awk 'BEGIN{OFS="\t";print "CPU","MEM"}{cpu+=$2;mem+=$3;print$0}END{print "";print "avg",cpu/NR,mem/NR}'; }

           

awk數組計數

shell小腳本 --綜合小例子通路目前機器22端口的tcp連接配接數

總結函數

函數裡定義local變量 更好

shell小腳本 --綜合小例子通路目前機器22端口的tcp連接配接數

shell抽獎小腳本

  1. 了解怎麼生産随機數 echo $RANDOM
  2. date +%s 取末尾也可以得到類似的随機數
  3. echo $((RANDOM%6+1)) 骰子6面 一次随機的點數 1-6
  4. 從一個檔案讀取user;uniq username.txt | grep -v “^$”| wc -l
  5. 假設讀到了某人a,那麼a之後就要被去除不能再抽獎
[[email protected] swh]$ a1=(a b c)
[[email protected] swh]$ echo $a1
a
[[email protected] swh]$ echo ${a1[0]}
a
[[email protected] swh]$ echo ${a1[1]}
b
[[email protected] swh]$ echo ${a1[2]}
c
[[email protected] swh]$ a1+=(d)
[[email protected] swh]$ echo ${a1[3]}
[[email protected] swh]$ for i in "${a1[@]}"; do echo $i ;done
a
b
c
d
[[email protected] swh]$ for i in "${!a1[@]}"; do echo $i ;done
0
1
2
3
           
  1. all=(KaTeX parse error: Expected group after '^' at position 31: …txt | grep -v “^̲”)) 檔案裡所有的資料存到了變量all裡
  2. for i in “${!all[@]}”; do echo $i; done 打出數組下标 注意!号
  3. for i in “${!all[@]}”; do ((RANDOM%6+1 >3)) && echo $i; done 如果骰子結果大于3 進入下一輪
  4. for i in " ! a l l [ @ ] " ; d o ( ( R A N D O M {!all[@]}"; do ((RANDOM%6+1 >3)) && sub+=( !all[@]";do((RANDOMi); done
  5. echo ${sub[@]} 驗證是一個存放進入到下一輪的下标的數組
    shell小腳本 --綜合小例子通路目前機器22端口的tcp連接配接數

調試shell

set -x

調用shell腳本

通路目前機器22端口的tcp連接配接數

function tcp_connections(){

netstat -tn 2>/dev/null |

grep “^tcp” |

grep -v ‘127.0.0.1’ |

awk ‘ 4   / : 22 4~/:22 4 /:22/ {print $5}’ |

wc -l

}

繼續閱讀