Unix Code - Detail View


Date

Name

Plattform

Language

Kurzbeschreibung

Owner

Link

19.10.2001

iostat.ksh

Unix

Shell

Executing iostat Command

IBM Corp. 2000

ftp://www.redbooks.ibm.com/redbooks/sg246012

DB2 ist ein Produkt der
IBM Corporation. Bitte
Copyright-  und Trademark-Hinweise beachten!

#!/bin/ksh
# iostat.ksh
# Raanon Reutlinger, IBM Israel, May 2000

display_syntax()
{
echo "\
SYNTAX: `basename $0` -c \"comment\" [-i m] [-p] [-o N] [-s n ] [-r] [-b]
Summerize the output of iostat.
-c:   Comment placed on first line of Summary output file (required).
-i:   Interval for iostat (default=1).
-p:   Only display peak values, when they change, for all disks, etc.
              Default is to display all values, as they change.
-o:   Save output in dir N under \$RESULTS (-1=current dir, default).
-s:   Save iostat output with n in the filename (0=dont save,default).
-r:   Don't get iostat, reuse iostat output specifies by -s.
-b:   DONT save prior (old) results to bak directory (default=save)
(Not saved anyway unless -o is greater than 0)
Notes:
Stop the utility by hitting Ctrl-C.
Values for -i, -s and -p are part of Summary output filename.
In most cases, best viewed in window-width which is multiple of 10.
"
}

# Constants

RESULTS=~/results
RESULTS_FILE="`basename $0 .ksh`"
RES_EXT=".out"
SUM_EXT=".sum"
AWKSCRIPT="`dirname $0`/`basename $0 .ksh`.awk"

# Defaults

RESULTS_DIR=-1# -1 defaults to current dir
REUSE_OUT=0
SAVE_OLD_RESULTS=1
PARSE_ERROR=""
PARAMS=$*

INTERVAL=1
SAVE_NAME=0
ONLYPEAKS=0

# Parse parameters

while [ "$1" != "" ]
do
case "$1" in
"-c") shift; COMMENT=$1; shift;;
"-i") shift; INTERVAL=$1; shift;;
"-p") shift; ONLYPEAKS=1;;
"-o") shift; RESULTS_DIR=$1; shift;;
"-s") shift; SAVE_NAME=$1;   shift;;
"-r") shift; REUSE_OUT=1; ;;
"-b") shift; SAVE_OLD_RESULTS=0;;
*) shift; PARSE_ERROR="Invalid Param";;
esac
done

# Verify parameters

[ "$COMMENT" = "" ] && \
PARSE_ERROR="${PARSE_ERROR} -Comment is required"

[ $RESULTS_DIR -ge -1 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -o param"

[ $INTERVAL -ge 1 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -i param"

[ $SAVE_NAME -ge 0 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -s param"

[ $REUSE_OUT -eq 1 -a $SAVE_NAME -eq 0 ] && \
PARSE_ERROR="${PARSE_ERROR} -Cant use -r with -s 0 or missing -s"

if [ "$PARSE_ERROR" != "" ]
then
echo ""
echo $PARSE_ERROR
echo ""
display_syntax
exit
fi

RES_EXT="_${INTERVAL}${SAVE_NAME}${RES_EXT}"
SUM_EXT="_${INTERVAL}${SAVE_NAME}${ONLYPEAKS}${SUM_EXT}"

if [ $RESULTS_DIR -ge 0 ]
then
RES_OUT=${RESULTS}/${RESULTS_DIR}/${RESULTS_FILE}${RES_EXT}
SUM_OUT=${RESULTS}/${RESULTS_DIR}/${RESULTS_FILE}${SUM_EXT}
RES_BAK=${RESULTS}/${RESULTS_DIR}/bak/${RESULTS_FILE}${RES_EXT}.$$
SUM_BAK=${RESULTS}/${RESULTS_DIR}/bak/${RESULTS_FILE}${SUM_EXT}.$$

mkdir $RESULTS 2>/dev/null
mkdir $RESULTS/$RESULTS_DIR 2>/dev/null
if [ $SAVE_OLD_RESULTS -eq 1 ]
then
mkdir $RESULTS/$RESULTS_DIR/bak2>/dev/null
[ $REUSE_OUT -eq 0 ] && \
cp $RES_OUT $RES_BAK 2>/dev/null && echo "[Created: $RES_BAK]"
cp $SUM_OUT $SUM_BAK 2>/dev/null && echo "[Created: $SUM_BAK]"
fi
else
RES_OUT=${RESULTS_FILE}${RES_EXT}
SUM_OUT=${RESULTS_FILE}${SUM_EXT}
fi

export ONLYPEAKS

# BEGIN .......

[ $SAVE_NAME -eq 0 ] && TEE_OUT="" || TEE_OUT="| tee -a $SUM_OUT"
rm $SUM_OUT 2>/dev/null

[ $SAVE_NAME -ne 0 ] && echo "[Creating: $SUM_OUT]"

eval echo "$COMMENT"$TEE_OUT
eval echo "----------------------------------------"$TEE_OUT
eval echo "Invocation: $0 $PARAMS"$TEE_OUT
eval echo "            `date`"$TEE_OUT
eval echo $TEE_OUT

if [ $REUSE_OUT -eq 1 ]
then
[ ! -f $RES_OUT ] && echo "Can't reuse $RES_OUT - Missing" && exit

awk -f $AWKSCRIPT $RES_OUT | tee -a $SUM_OUT
else
echo "Hit Ctrl-C to stop..."
trap "" 1 2 3
if [ $SAVE_NAME -eq 0 ]
then
echo "iostat output and summary not saved"
echo "Waiting for disk i/o ..."

iostat $INTERVAL | awk -f $AWKSCRIPT
else
echo "[Creating: $RES_OUT]"
echo "Waiting for disk i/o ..."

iostat $INTERVAL | tee $RES_OUT | awk -f $AWKSCRIPT
awk -f $AWKSCRIPT $RES_OUT >> $SUM_OUT
fi
fi

© Gernot Ruban