平平庸庸

shell scripts notes

上一篇 / 下一篇  2009-05-12 10:05:38 / 个人分类:随便写写

 //hello world
#指定用来执行此脚本的shell程序为bash
1 vi test.sh

#! /bin/bash

echo "hello world"

(可能碰到 interperer错误。使用perl -i -pe's/\r$//;' <file name here>命令去除windows环境中带来的多余字符
2 chmod +x test.sh 为test.sh添加可执行权限

./tesh.sh 执行此脚本

一般刚刚建立的shell脚本通过sh 命令来调试 添加-x参数显示所执行的命令。
sh 命令的参数如下
  -e:如果一个命令失败就立即退出

  -n:读入命令但是不执行它们

  -u:置换时把未设置的变量看作出错

  -v:当读入shell输入行时把它们显示出来

  -x:执行命令时把命令和它们的参数显示出来

//很好的性能监控脚本

#!/bin/bash
# (C) 2006 Mark Boddington,http://www.badpenguin.co.uk
# Licensed under the GNU GPL Version 2.

# ***** Version 0.2 *****
# TODO -- Create CSV parsing rules for the netstat.

# *****  Configuration *****
# set LOG to the directory you want to write the performance data to.
# set SLEEP to the number of seconds you want to sleep between samples
# set HDD to the number of had disks in your machine.

LOG=/home/mark/PerfMon/LIVE
SLEEP=10
HDD=2

HTYPE=$(uname -s)

genStat()
{
 now=$( date +%S )
 while [ "$now" -ne "30" ]
 do
  sleep 1
  now=$( date +%S )
 done
 while :;
 do
  dat=$(date +%Y%m%d,%H:%M:%S)
  day=$(date +%Y%m%d )
  iostat -x 1 2 |  sed -e"s/^\(.*\)/$dat \1/" | grep "[0-9]\." | tail -${HDD} >> ${LOG}/io.${day}.log &
  vmstat 1 2 | awk "{ print \"$dat\", \$0 }" | tail -1 >> ${LOG}/vm.${day}.log &
  netstat -i | grep -v Iface | awk "{ print \"$dat\", \$0 }" >> ${LOG}/netstat.${day}.log &
  uptime >> ${LOG}/uptime.${day}.log &
  sleep $SLEEP
 done
}

mkcsv()
{
 dat=$1

 if [ "$HTYPE" == "SunOS" ]
 then
 
  #IO CSV
  echo date,time,device,r/s,w/s,kr/s,kw/s,wait,actv,wsvc_t,asvc_t,%w,%b > ${LOG}/io.${dat}.csv
  cat ${LOG}/io.${dat}.log | egrep -v "extended|device" | awk '{ FS=","; print $1,$12,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11 }' >> ${LOG}/io.${dat}.csv
  #VM csv
  echo date,time,k[r],k[b],k[w],swap,free,pg[re],pg[mf],pg[pi],pg[po],pg[fr],pg[de],pg[sr],m0,m1,m2,m1,interupt,syscall,ctxswt,cpu[us],cpu[sys],cpu[idl] > ${LOG}/vm.${dat}.csv
  cat ${LOG}/vm.${dat}.log | awk '{for(l=1;l<23;l++) { printf("%s,", $l) }; print $23 }' >> ${LOG}/vm.${dat}.csv
  #uptime csv
  echo time,users,5min,10min,15min > ${LOG}/uptime.${dat}.csv
  cat ${LOG}/uptime.${dat}.log | awk '{ FS=","; if ( $6 ~ /^[hm][ri]/) { print $1,$7,$11$12$13 } else if ( $6 ~/^user/) { print $1,$5,$9$10$11} else { print $1,$6,$10$11$12} }' >> ${LOG}/uptime.${dat}.csv

 elif [ "$HTYPE" == "Linux" ]
 then
  #IO CSV
  echo "date,time,device,rrqm/s,wrqm/s,r/s,w/s,rsec/s,wsec/s,rkB/s,wkB/s,avgrq-sz,avgqu-sz,await,svctm,%util" > ${LOG}/io.${dat}.csv
  cat ${LOG}/io.${dat}.log | egrep -v "extended|device" | awk '{for(l=1;l<15;l++) { printf("%s,", $l) }; print $15}' >> ${LOG}/io.${dat}.csv
  #VM csv
  echo date,time,r,b,swp,free,buff,cache,si,so,bi,bo,in,cs,us,sy,id,wa > ${LOG}/vm.${dat}.csv
  cat ${LOG}/vm.${dat}.log | awk '{for(l=1;l<17;l++) { printf("%s,", $l) }; print $17 }' >> ${LOG}/vm.${dat}.csv
  #uptime csv
  echo time,users,5min,10min,15min > ${LOG}/uptime.${dat}.csv
  cat ${LOG}/uptime.${dat}.log | awk '{ FS=","; if ( $4 ~ /^min/) { print $1,$5,$9$10$11 } else { print $1,$4,$8$9$10} }' >> ${LOG}/uptime.${dat}.csv
 else

  echo "Hmmm - An unexpected error occured. Have you change the host type?"
 
 fi

}

if [ "$HTYPE" != "SunOS" -a "$HTYPE" != "Linux" ]
then
 echo "Error - This script. has no knowlege of the System $HTYPE"
 echo "        You will need to do some tweaking."
 exit
fi

case $1 in

 run)
  genStat
  ;;
 csv)
  if [ $# -lt 2 ]
  then
   echo "Error - You must supply a date in the form. YYYYMMDD"
   exit
  fi
  mkcsv $2
  ;;
 *)
  echo -e ":::: Usage ::::"
  echo -e "$0 run             : Collect stats"
  echo -e "$0 csv YYYYMMDD    : Generate CSV from stats"
  echo ""
  ;;
esac


TAG:

 

评分:0

我来说两句

Open Toolbar