📄 uf_onstatd.sh.txt
字号:
#!/usr/bin/ksh################################################################################# Module: uf_onstatd.sh# Author: Peter R. Schmidt# Description: User friendly onstat -d (uses sysmaster)## Change Log## Date Name Description.................# 07/09/99 Peter R. Schmidt Start Program# 07/27/99 Peter R. Schmidt Option to show % free or % used################################################################################OUTPUT=uf_onstatd.outTMPFILE=uf_onstatd.tmpXDATE=`date +%D-%T`MACHINE=`uname -n`BG=falseBOLD=`tput smso`NORM=`tput rmso`###############################################################################if [ $# != 0 ]then ARG1=$1 case $ARG1 in 1|2|3|4) OPTION1=$ARG1;; *) OPTION1=2;; esac ARG2=$2 case $ARG1 in 1|2) OPTION2=$ARG2;; *) OPTION2=1;; esac BG=trueelse while true do echo echo "1 = Report in Megs" echo "2 = Report in Kbytes" echo "3 = Report in Pages" echo "4 = Report in Bytes" echo "0 = Exit this program" echo echo "Enter reporting unit desired (0,1,2,3,4)" read OPTION1 case $OPTION1 in 0|1|2|3|4) break;; esac echo echo "Error - you must enter 0,1,2,3 or 4!" echo done while true do echo echo "1 = Print Percent USED" echo "2 = Print Percent FREE" echo "0 = Exit this program" echo echo "Enter display option desired (0,1,2)" read OPTION2 case $OPTION2 in 0|1|2) break;; esac echo echo "Error - you must enter 0, 1 or 2!" echo donefi case $OPTION1 in 0) echo "End requested by user"; exit;; 1) UNIT=M; UNITDESC=Mbytes;; 2) UNIT=K; UNITDESC=Kbytes;; 3) UNIT=P; UNITDESC=Pages;; 4) UNIT=B; UNITDESC=Bytes;;esaccase $OPTION2 in 0) echo "End requested by user"; exit;; 1) PERCENT_TYPE=Used;; 2) PERCENT_TYPE=Free;;esacif [ -f $OUTPUT ]then rm -f $OUTPUTfi#----------------------------------------------------------------------echo "Collecting dbs/chunk info from the sysmaster database..." dbaccess << EOFdatabase sysmaster;unload to '$TMPFILE' delimiter "|"select syschktab.dbsnum, syschktab.chknum, syschktab.chksize, syschktab.nfree, (chksize - nfree) nused, syschktab.flags, syschktab.fname, sysdbstab.namefrom syschktab, sysdbstabwhere syschktab.dbsnum = sysdbstab.dbsnum and sysdbstab.name <> "sysmaster"order by 1,2EOFecho echo "Completed - formatting report..."echo#----------------------------------------------------------------------awk ' \BEGIN { pagesize=2 pre_dbs_num=0 pre_dbs_name="" chunk_cnt = 0 FS="|"}{ if (NR == 1) { split (xdate,b,"-") udate=b[1] utime=b[2] printf "\n%s %s Informix Disk Report for %s@%s\n", udate, utime, server, machine printf " (Numbers in %s)\n\n", unitdesc print "DBS Chk Allocated Used Free Percent Dbspace" printf "Num Num Space Space Space %s Chunk\n\n", percent_type } dbs_num = $1 chunk_num = $2 chunk_size_P = $3 chunk_free_P = $4 chunk_used_P = $5 chunk_flags = $6 chunk_name = $7 dbs_name = $8 #------------ BEFORE GROUP ----------------------------------------- if (dbs_num != pre_dbs_num) { #-------- PRINT DBSPACE SUBTOTALS IF MULTIPLE CHUNKS ------- if ((pre_dbs_num != 0) && (chunk_cnt > 1)) { dbs_percent=0 if (dbs_size_P > 0) { dbs_percent_used = ((dbs_used_P/dbs_size_P)*100) dbs_percent_free = ((dbs_free_P/dbs_size_P)*100) if (percent_type == "Used") { dbs_percent = dbs_percent_used } else { dbs_percent = dbs_percent_free } } if (unit == "B") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_B, dbs_used_B, dbs_free_B, dbs_percent, pre_dbs_name } if (unit == "P") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_P, dbs_used_P, dbs_free_P, dbs_percent, pre_dbs_name } if (unit == "K") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_K, dbs_used_K, dbs_free_K, dbs_percent, pre_dbs_name } if (unit == "M") { printf "%3d %10.1f*%10.1f*%10.1f*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_M, dbs_used_M, dbs_free_M, dbs_percent, pre_dbs_name } } chunk_cnt = 0 if (pre_dbs_num != 0) { print "" } dbs_size_P = 0 dbs_size_K = 0 dbs_size_M = 0 dbs_size_B = 0 dbs_free_P = 0 dbs_free_K = 0 dbs_free_M = 0 dbs_free_B = 0 dbs_used_P = 0 dbs_used_K = 0 dbs_used_M = 0 dbs_used_B = 0 printf "%3d Dbspace: %s\n",dbs_num, dbs_name } #------------ ON EVERY ROW ------------------------------------- chunk_size_K = chunk_size_P*pagesize chunk_size_M = chunk_size_K/1024 chunk_size_B = chunk_size_K*1024 chunk_free_K = chunk_free_P*pagesize chunk_free_M = chunk_free_K/1024 chunk_free_B = chunk_free_K*1024 chunk_used_K = chunk_used_P*pagesize chunk_used_M = chunk_used_K/1024 chunk_used_B = chunk_used_K*1024 chunk_percent=0 if (chunk_size_P > 0) { chunk_percent_used = ((chunk_used_P/chunk_size_P)*100) chunk_percent_free = ((chunk_free_P/chunk_size_P)*100) } if (percent_type == "Used") { chunk_percent = chunk_percent_used } else { chunk_percent = chunk_percent_free } dbs_size_P += chunk_size_P dbs_size_K += chunk_size_K dbs_size_M += chunk_size_M dbs_size_B += chunk_size_B dbs_free_P += chunk_free_P dbs_free_K += chunk_free_K dbs_free_M += chunk_free_M dbs_free_B += chunk_free_B dbs_used_P += chunk_used_P dbs_used_K += chunk_used_K dbs_used_M += chunk_used_M dbs_used_B += chunk_used_B tot_size_P += chunk_size_P tot_size_K += chunk_size_K tot_size_M += chunk_size_M tot_size_B += chunk_size_B tot_free_P += chunk_free_P tot_free_K += chunk_free_K tot_free_M += chunk_free_M tot_free_B += chunk_free_B tot_used_P += chunk_used_P tot_used_K += chunk_used_K tot_used_M += chunk_used_M tot_used_B += chunk_used_B if (unit == "B") { printf "%3d %3d %10d %10d %10d %5.1f %s\n", dbs_num, chunk_num, chunk_size_B, chunk_used_B, chunk_free_B, chunk_percent, chunk_name } if (unit == "P") { printf "%3d %3d %10d %10d %10d %5.1f %s\n", dbs_num, chunk_num, chunk_size_P, chunk_used_P, chunk_free_P, chunk_percent, chunk_name } if (unit == "K") { printf "%3d %3d %10d %10d %10d %5.1f %s\n", dbs_num, chunk_num, chunk_size_K, chunk_used_K, chunk_free_K, chunk_percent, chunk_name } if (unit == "M") { printf "%3d %3d %10.1f %10.1f %10.1f %5.1f %s\n", dbs_num, chunk_num, chunk_size_M, chunk_used_M, chunk_free_M, chunk_percent, chunk_name } pre_dbs_num = dbs_num pre_dbs_name = dbs_name chunk_cnt++}END { #-------- PRINT DBSPACE SUBTOTALS IF MULTIPLE CHUNKS ------- if ((pre_dbs_num != 0) && (chunk_cnt > 1)) { dbs_percent=0 if (dbs_size_P > 0) { dbs_percent_used = ((dbs_used_P/dbs_size_P)*100) dbs_percent_free = ((dbs_free_P/dbs_size_P)*100) } if (percent_type == "Used") { dbs_percent = dbs_percent_used } else { dbs_percent = dbs_percent_free } if (unit == "B") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_B, dbs_used_B, dbs_free_B, dbs_percent, pre_dbs_name } if (unit == "P") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_P, dbs_used_P, dbs_free_P, dbs_percent, pre_dbs_name } if (unit == "K") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_K, dbs_used_K, dbs_free_K, dbs_percent, pre_dbs_name } if (unit == "M") { printf "%3d %10.1f*%10.1f*%10.1f*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_M, dbs_used_M, dbs_free_M, dbs_percent, pre_dbs_name } } #-------- PRINT FINAL TOTALS ------------------------------------ print "" tot_percent=0 if (tot_size_P > 0) { tot_percent_used = ((tot_used_P/tot_size_P)*100) tot_percent_free = ((tot_free_P/tot_size_P)*100) } if (percent_type == "Used") { tot_percent = tot_percent_used } else { tot_percent = tot_percent_free } if (unit == "B") { printf "Total * %10d %10d %10d %5.1f ** Final Totals\n", tot_size_B, tot_used_B, tot_free_B, tot_percent } if (unit == "P") { printf "Total * %10d %10d %10d %5.1f ** Final Totals\n", tot_size_P, tot_used_P, tot_free_P, tot_percent } if (unit == "K") { printf "Total * %10d %10d %10d %5.1f ** Final Totals\n", tot_size_K, tot_used_K, tot_free_K, tot_percent } if (unit == "M") { printf "Total * %10.1f %10.1f %10.1f %5.1f ** Final Totals\n", tot_size_M, tot_used_M, tot_free_M, tot_percent }}' xdate=$XDATE machine=$MACHINE unit=$UNIT unitdesc=$UNITDESC server=$INFORMIXSERVER percent_type=$PERCENT_TYPE $TMPFILE > $OUTPUTrm -f $TMPFILEif [ $BG = false ]then pg $OUTPUTfiechoecho "Note: Output report is in $OUTPUT"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -