当前位置: 技术问答>linux和unix
不懂这个脚本,每解析一行得2分.
来源: 互联网 发布时间:2016-08-08
本文导语: 不懂这个脚本,每解析一行得2分. 除了注释,空白行和输出行. #!/bin/bash # # The following shell variables have to be defined and exported before this shell script is called. # Example values are show below the variable name # # EnvSH # ...
不懂这个脚本,每解析一行得2分. 除了注释,空白行和输出行.
#!/bin/bash
#
# The following shell variables have to be defined and exported before this shell script is called.
# Example values are show below the variable name
#
# EnvSH
# '/cib/uxprod/java/bin/env.sh'
# ScriptName
# 'loadTxnHistory.sh'
# OnException
# 'doMail_oper "CIB0123E %Y%m%d %T ($ScriptName:exception)"'
# OnComplete
# 'doMail "CIB0113I %Y%m%d %T ($ScriptName:completed)"'
# OnCompleteAfterDelay
# 'doMail "CIB0113I %Y%m%d %T ($ScriptName:completed after delay)"'
# OnMissingFile
# 'doMail "CIB0112E %Y%m%d %T ($ScriptName:file missing)"'
# OnFileDelay
# 'doMail "CIB0111I %Y%m%d %T ($ScriptName:file not ready yet)"'
# MaxWaitMinutes
# 240
# AlertMinutes
# 60
# OneMinute
# 60
# LogFilePath
# '/project/CIB/log/loadTxnHistory.%Y%m%d%H%M%S.log'
# InputDir
# '/project/CIB/ftp/rcv/'
# BackupDir
# '/project/CIB/ftp/backup/rcv/'
# BackupExtension
# '.%Y%m%d%H%M%S'
# WaitFileSet
# 'DLDHY[0-9][0-9].EOF'
# InputFileSetReplace
# 's/DLDHY(..).EOF/KKKHY1.TXT:LLLHY1.TXT/'
# WaitFileSet2
# 'ABC2XYZ.RRR.D[0-9][0-9][0-9][0-9][0-9][0-9].EOF'
# InputFileSet2Replace
# 's/ABC2XYZ/UVW2XYZ/; s/.EOF/.TXT/'
# doImportCallback() { ... }
# a shell function to be exported from the caller shell script
#
# To call this script, type the following statements
#
# export ScriptName OnException OnComplete OnCompleteAfterDelay ...
# export -f doImportCallback
# ./GenericImport.sh
#
is_defined() {
eval val="${$1}"
if [ "$val" = "" ]; then return 1; else return 0; fi
}
is_defined EnvSH && . $EnvSH
is_defined OneMinute || OneMinute=60
MailContent="$cronjob_subject_prefix Refer to CCB Manual for the Recovery Procedure"
EOFFilelist=""
InputSetList=""
DelayFlag=""
doMail() {
echo $MailContent | mailx -s "$*" $cronjob_maillist
}
doMail_oper() {
echo $MailContent | mailx -s "$*" $cronjob_maillist $oper_maillist
}
doMail_attach() {
file=$1 ; shift
if [ -r "$file" ]; then
cmd="echo $MailContent; uuencode $file `basename $file`"
else
cmd="echo $MailContent; echo $file not found"
fi
eval "$cmd" | mailx -s "$*" $cronjob_maillist
}
doBackup() {
file="$1"
#[ -r "$file" ] && mv $InputDir/$file $BackupDir/$file$BackupExt
}
handle_when_defined() {
eval command="${$1}"
if [ "$command" = "" ]; then
return 1
else
eval `date +"$command"`
fi
}
wait_for_files() {
elapsed_time=0
while :
do
# convert to input file list
cd $InputDir
for j in $WaitFileSet; do
if test -r "$j" ; then
t=`echo "$j" | sed "$InputFileSetReplace"`
InputSetList="$InputSetList $j:$t"
fi
done
for j in $WaitFileSet2; do
if test -r "$j" ; then
t=`echo "$j" | sed "$InputFileSet2Replace"`
InputSetList="$InputSetList $j:$t"
fi
done
is_defined InputSetList && return 0
if [ $elapsed_time -ge $MaxWaitMinutes ] ; then
echo "== OnMissingFile:eof"
handle_when_defined OnMissingFile
return -1;
elif [ $elapsed_time -eq $AlertMinutes ] ; then
echo "== OnFileDelay"
handle_when_defined OnFileDelay
AlertMinutes=`expr $AlertMinutes + $AlertMinutes`
DelayFlag=1
fi
sleep $OneMinute;
elapsed_time=`expr $elapsed_time + 1`
done
}
OrigDirectory=`pwd`
cd $InputDir
LogFilePath=`date +"$LogFilePath"`
BackupExt=`date +"$BackupExtension"`
exec >$LogFilePath 2>&1
echo "$ScriptName starts at "`date`
if wait_for_files; then
for InputSet in $InputSetList; do
EOFFile=""
InputFiles=`echo $InputSet | tr ':' ' '`
InputSetReady=true
ImportCommand="doImportCallback"
echo "InputSet=$InputSet"
echo "InputFiles=$InputFiles"
for f in $InputFiles ; do
[ ! -r "$f" ] && InputSetReady=""
if is_defined EOFFile ; then
ImportCommand="$ImportCommand $f"
else
EOFFile=$f
echo "EOFFile=$EOFFile"
fi
done
if is_defined InputSetReady
then
# run the import command and move files to backup folder
# the doImportCallback() function is run in a subshell to prevent changes within doImportCallback()
# to affect other part of this script
echo "$ImportCommand"
( eval "$ImportCommand" )
for f in $InputFiles ; do
doBackup $f
done
else
echo "== OnMissingFile:input"
handle_when_defined OnMissingFile
fi
done
# check for exception
if grep Exception $LogFilePath > /dev/null; then
echo "== OnException"
handle_when_defined OnException
else
# complete w/o exception
if is_defined DelayFlag ; then
echo "== OnCompleteAfterDelay"
handle_when_defined OnCompleteAfterDelay
else
echo "== OnComplete"
handle_when_defined OnComplete
fi
fi
fi
echo "$ScriptName ends at "`date`
|
is_defined EnvSH && . $EnvSH
expr1 && expr2 的意思是:先执行expr1。如果expr1成功,继续执行expr2;如果expr1失败,那么就不执行expr2
在shell里面,返回值为0表示成功,非0表示失败。这和c语言正好相反,所以我开始学到这的时候经常犯晕。
如果EnvSH此前有定义,is_defined函数返回0,就执行后面的. $EnvSH,相当于source $EnvSH,把EnvSH定义的环境变量导入当前的shell。
is_defined OneMinute || OneMinute=60
expr1 || expr2 的意思是:先执行expr1。如果expr1失败,继续执行expr2;如果expr1成功,那么就不执行expr2
如果OneMinute此前有定义,is_defined函数返回0,就保持原来的定义不变;如果以前没有定义,就给它赋值60;
以is_defined EnvSH为例:
如果EnvSH是一个变量而且已经赋值,返回值就是0,表示执行成功;否则返回1表示失败。
is_defined() {
eval val="${$1}"
如果EnvSH没有被定义过,$val就是一个空值,[ "$val" = "" ]这个比较成立,返回1;如果EnvSH被定义过就返回0
if [ "$val" = "" ]; then return 1; else return 0; fi
}
下面这个函数也用到了类似的技巧
handle_when_defined() {
eval command="${$1}" 把后面的参数赋值给command
if [ "$command" = "" ]; then
return 1 如果原来的参数没有定义,那么command就会是一个空值,返回1表示失败
else 如果原来的参数有定义,那就继续执行下面一行的命令
eval `date +"$command"`
fi
}
expr1 && expr2 的意思是:先执行expr1。如果expr1成功,继续执行expr2;如果expr1失败,那么就不执行expr2
在shell里面,返回值为0表示成功,非0表示失败。这和c语言正好相反,所以我开始学到这的时候经常犯晕。
如果EnvSH此前有定义,is_defined函数返回0,就执行后面的. $EnvSH,相当于source $EnvSH,把EnvSH定义的环境变量导入当前的shell。
is_defined OneMinute || OneMinute=60
expr1 || expr2 的意思是:先执行expr1。如果expr1失败,继续执行expr2;如果expr1成功,那么就不执行expr2
如果OneMinute此前有定义,is_defined函数返回0,就保持原来的定义不变;如果以前没有定义,就给它赋值60;
以is_defined EnvSH为例:
如果EnvSH是一个变量而且已经赋值,返回值就是0,表示执行成功;否则返回1表示失败。
is_defined() {
eval val="${$1}"
如果EnvSH没有被定义过,$val就是一个空值,[ "$val" = "" ]这个比较成立,返回1;如果EnvSH被定义过就返回0
if [ "$val" = "" ]; then return 1; else return 0; fi
}
下面这个函数也用到了类似的技巧
handle_when_defined() {
eval command="${$1}" 把后面的参数赋值给command
if [ "$command" = "" ]; then
return 1 如果原来的参数没有定义,那么command就会是一个空值,返回1表示失败
else 如果原来的参数有定义,那就继续执行下面一行的命令
eval `date +"$command"`
fi
}
|
OrigDirectory=`pwd`
把当前路径赋值给OrigDirectory
LogFilePath=`date +"$LogFilePath"`
此前LogFilePath的值是 /project/CIB/log/loadTxnHistory.%Y%m%d%H%M%S.log
这行的结果是把其中的年月日格式替换成当前日期和时间,变成 /project/CIB/log/loadTxnHistory.20100206005420.log
BackupExt=`date +"$BackupExtension"`
把当前时间赋值给BackupExt,格式由BackupExtension指定(%Y%m%d%H%M%S)
结果类似于20100206005420
把当前路径赋值给OrigDirectory
LogFilePath=`date +"$LogFilePath"`
此前LogFilePath的值是 /project/CIB/log/loadTxnHistory.%Y%m%d%H%M%S.log
这行的结果是把其中的年月日格式替换成当前日期和时间,变成 /project/CIB/log/loadTxnHistory.20100206005420.log
BackupExt=`date +"$BackupExtension"`
把当前时间赋值给BackupExt,格式由BackupExtension指定(%Y%m%d%H%M%S)
结果类似于20100206005420
|
楼主口气好帅
|
口气还有帅的,吼吼
|
# 功能:判断变量是否已定义
# 输入:变量名
# 输出:1(未定义)
# 0(已定义)
is_defined() {
# 取参数中第一个值,如:is_defined first second third,则val=first;如果想取最后一个参数,可用$#替换$1,即:eval val="${$#}"
eval val="${$1}"
# 如果参数未定义(即val为空),返回1,is_defined执行失败;反之,返回0,is_defined执行成功
if [ "$val" = "" ]; then return 1; else return 0; fi
}
# 如果EnvSH已定义,则将EnvSH定义的环境变量添加到当前shell中;. $EnvSH 相当于 source $EnvSH
is_defined EnvSH && . $EnvSH
# 如果OneMinute未定义,设置OneMinute=60;否则使用已定义的值
is_defined OneMinute || OneMinute=60
# 设置邮件内容
MailContent="$cronjob_subject_prefix Refer to CCB Manual for the Recovery Procedure"
EOFFilelist=""
InputSetList=""
DelayFlag=""
# 未完,待续
|
学习中!
回复内容 回复内容太短了!
回复内容 回复内容太短了!
|
太长了 现在没时间
|
哎,对脚本不了解。帮顶了。