(一)假如我们有个脚本monitor中的函数search调用searchfile.sh脚本中的searchlog函数,例如:
截取searchfile.sh的一部分:
searchlog()
{
local searchas=$1
asinfo=(`getAsInfo $1`)
local searchfile=$2
local keyword="$3"
local linenum=1000
if [ ! -z $4 ]
then
linenum=$4
fi
searchcount=`sh "$sordir"remote-exec.sh "ssh ${asinfo[1]}@${asinfo[0]} tail -$linenum $searchfile" ${asinfo[2]} | grep "$keyword" |wc -l | tail -1| tr -d '\n\r'`
if [ $searchcount -gt 0 ]
then
echo $searchcount
else
echo 0
fi
}
searchlog "$1" "$2" "$3" "$4"
而monitor中的函数调用searchfile.sh的部分:
search()
{
ip=$1
file=$2
keyword=$3
logfile=$4
local oc4j=`basename $2`
searchcount=`sh "$sordir"/searchfile.sh "$ip" "$file" "$keyword" $5`
echo "$ip" `date`" "$keyword"===="$searchcount >> $logfile
if [ $searchcount -gt 0 ]
then
:
#
echo "$ip" `date`" "$keyword"===="$searchcount >> $logfile".error"
echo "1" > $logfile".alert"
echo "0" > /opt/oracle/sor/monitor/log/cps.log.alert
#sh "$sordir"/sender/mobileSender.sh `date "+%m%d_%H:%M"`"$ip $keyword =$searchcount" $telnum
sh "$sordir"/sender/mobileSender.sh "$ip $oc4j $keyword =$searchcount" $telnum
fi
}
我们可以看出$5是个空值,那么在searchfile.sh中的searchlog部分就会出现判断语句,如果
if [ ! -z $4 ]
then
linenum=$4
fi
那么就searchlog "$1" "$2" "$3" "$4"中的$4的值就用默认的local linenum=1000~
假如$5存在的话,我们就会将$4的值传给$linenum
(二)下面只是截取的部分,循环的参数是从一个配置文件中读入:
getip()}
getip
while read ip
do
clear_control ${ip}
done<ip.conf
这里主要是先通过一个函数获取所有主机的ip配置文件,然后再通过一个循环,one by one的读入ip~
(三)下面的是一个判断语句,在脚本执行的时候一般只有一个参数,脚本自动进入某个目录选择文件;
如果要是两个参数的话,第二个参数必须是那个目录下面的一个文件~
if [ $# -eq 2 ]
then
FileName=$2
else
if [ $# -ne 1 ]
then
echo "usage:sh $0 FilePath"
exit
fi
fi