dear sir,
I am new to unix zone. need some explanation on the function used.
cat /apps/prd/venue/code/bin/std.funcs
#!/usr/bin/ksh
#-------------------------------------------------------------------
# printmsg: prints the message given in arg 1 with timestamp to
# stdout or APPENDS to a file
# if printing to a file, arg 2 should be the file name
# and arg 3 is the number of tabs, otherwise if printing to
# stdout, then arg 2 will be the number of tabs.
# if numtabs is omitted, default is 0
#
# NOTE: filename must contain at least one character
# or printmsg will assume that it is tab argument
#
# if numTabs=0 then entire date/time is printed
# if numTabs>0 then only time is printed
#
# input: message=$1 appendfile=$2 numtabs=$3
# message=$1 numtabs=$2
# message=$1 appendfile=$2
#
#-------------------------------------------------------------------
function printmsg
{
set +x
set +u #allow unset variables so input parameters can be omitted
#declare local variables
typeset -i numTabs maxLen prefixLen currLen
typeset -t msg argTWO argTHREE fileName
typeset -t margin gap dt
typeset -t inLine chunk nextWord firstLine
# Constant Variables
maxLen=78
gap=' ' #set to four spaces
# Input variables & initilizations
msg=$1
argTWO=$2
argTHREE=$3
fileName=''
margin=''
margin2=''
firstLine=TRUE
chunk=""
if [[ $(echo $argTWO | tr -d '[-0-9]') = "" ]] then
numTabs=${argTWO:=0}
else
numTabs=${argTHREE:=0}
fileName=$argTWO
fi
if [[ $numTabs -le 0 ]] then
dt=$(date)
else
dt=$(date +%H:%M:%S)
fi
while [[ $numTabs -gt 0 ]];
do
margin=${margin}${gap}
numTabs=$numTabs-1
done
## Build margin for extra line(s) that is as wide as the prefix.
## Extra lines will not have date on them, they will be blank.
prefix="${margin}${dt}${gap}"
prefixLen=${#prefix}
while [[ $prefixLen -gt 0 ]];
do
margin2=${margin2}' '
prefixLen=$prefixLen-1
done
inLine=${msg}
## Loop through each word in $inLine. Print lines that will fit
## within the $maxLen limit.
for word in $inLine
do
currLen=$((${#prefix}+${#chunk}+1+${#word}))
if [[ -z $chunk ]] then
chunk=$word
elif [[ $currLen -lt $maxLen ]] then
chunk=$chunk' '$word
else
if [[ -z $fileName ]] then
print "${prefix}${chunk}"
else
print "${prefix}${chunk}" >> $fileName
fi
chunk=$word
if [[ $firstLine = "TRUE" ]] then
firstLine=FALSE
prefix=$margin2
fi
fi
done
# Print the last line.
if [[ -z $fileName ]] then
print "${prefix}${chunk}"
else
print "${prefix}${chunk}" >> $fileName
fi
return 0
} # end printmsg
#------------------------------------------------------------------------------
# Function: trim_file
# Description:
#
# This function shortens a specified file to a maximum number of lines.
# It will remove lines at the beginning of the file to satisfy the max
# line constraint.
#
# If the file already has less than the maximum number of lines, it will
# be unchanged.
#
# Input:
# FILE ($1) - The file to shorten.
# MAX_LENGTH ($2) - The length to shorten FILE.
#
# Output:
# FILE will be shortened to contain a maximum of MAX_LENGTH number of lines.
#
# Return Codes:
# SUCCESS - is returned if the number of lines in the FILE is greater than
# MAX_LENGTH and the FILE is shortened to contain the last MAX_LENGTH
# lines.
# SUCCESS - is also returned if the number of lines in the FILE is less
# than or equal to MAX_LENGTH. In this case the FILE will be
# unchanged.
# FAIL - signifies an error with function. Status messages are
# printed to standard error.
#
#------------------------------------------------------------------------------
function trim_file
{
typeset FUNCTION=$0
typeset FILE=$1
typeset MAX_LENGTH=$2
typeset SUCCESS=0
typeset FAIL=1
# Local Variables
typeset TEMP_FILE
# Initalize TEMP_FILE. TEMP_FILE will be used to hold the filename for
# a file that will hold a temporary shortened version of FILE.
TEMP_FILE=$(mktemp -d/tmp -p$FUNCTION)
RC=$?
if [[ $RC -ne $SUCCESS ]] then
print -u2 "mktemp -d/tmp -ptrim_file, failed. RC=$RC"
return $FAIL
fi
# This command will print the last MAX_LENGTH lines in FILE to TEMP_FILE.
tail -n $MAX_LENGTH $FILE > $TEMP_FILE
RC=$?
if [[ $RC -ne $SUCCESS ]] then
print -u2 "tail -n $MAX_LENGTH $FILE > $TEMP_FILE, failed. RC=$RC"
return $FAIL
fi
# Replace FILE with its shortened version TEMP_FILE.
cp $TEMP_FILE $FILE
RC=$?
if [[ $RC -ne $SUCCESS ]] then
print -u2 "cp $TEMP_FILE $FILE, failed. RC=$RC"
return $FAIL
fi
rm -f $TEMP_FILE
return $SUCCESS
} ## end trim_file
#-----------------------------------------------------------------------------
# function: error_check
# This function is called to determine if the previous process exited with a
# nonzero return value.
# If it did, then send mail to mailgroup with
# appropriate message $2 and subject $3
#
# Note: LOGFILE and MAILGROUP will be exported from the calling script
#-----------------------------------------------------------------------------
function error_check
{
# Set INDENT variable used with printmsg to write in the $LOGFILE
INDENT=${INDENT:-0} ## if INDENT unset, then default to 0
let INDENT=INDENT+1
if [[ $1 -ne 0 ]] then
printmsg "$2 RC=$1" $LOGFILE $INDENT
echo "$2 RC=$1" | mailx -s "$3" $MAILGROUP
exit $1
fi
return
}