当前位置:  技术问答>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
}

|
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

|
楼主口气好帅

|

口气还有帅的,吼吼

|
# 功能:判断变量是否已定义
# 输入:变量名
# 输出: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=""

# 未完,待续

|
学习中!
回复内容     回复内容太短了! 

|
太长了 现在没时间

|
哎,对脚本不了解。帮顶了。

    
 
 

您可能感兴趣的文章:

  • 请教shell脚本中, 如何保证一行执行成功之后,再执行下一行?
  • 在bash里,脚本的第一行怎么write?(sorry,keyboard damaged)
  • 一个小小脚本程序,只有一行,但报错
  • 这个脚本问题出在哪里??? 为什么只读一行。
  • CSS属性参考手册 iis7站长之家
  • 如果在脚本里面循环读一个文件中的每一行?
  • 今天看到 shell脚本里面有这么一行不懂是什么意思
  • 如何用脚本语言实现在n行数据中随机删掉j-k行中的一行数据
  • 问题:在linux系统中,怎么使用shell脚本,在文件的第三行和第四行之间新增一行(插入一段字符,或者一个变量的值)?
  • 问一个很菜的问题,如何在脚本里把一个text文件的字符一行行的取出来
  • sed删除文件中的一行内容的脚本代码
  • 很多脚本文件第一行为什么都会加一句特定的注释?
  • 本人新手想写个shell脚本 其中一段内容想替换某文件中某一行文字为变量但用sed未能成功请大家指点。
  • Python linecache.getline()读取文件中特定一行的脚本
  • shell脚本解析
  • 请问脚本语言 解析器的工作原理?
  • 求教脚本高手:如何解析如下文件
  • 在Shell脚本中有没有方便的XML解析方法阿
  • 大家好,我想问下有人用过"linux进程的内存使用解析"中推荐使用的"Ben Maurer写的perl脚本"查看内存么
  • linux下oracle的自启动脚本解析
  • linux命令解析,开发中遇到的一个启动脚本的语句
  • 牛人来帮忙解析一个shell脚本(用于统计一个进程的内存使用情况)
  • php提供解析php脚本的api吗?哪里有这样的开发包?==〉〉分数不够可以另开贴子;up有分!
  • 求助Linux脚本解析文本内容--几个细节不知如何实现
  • python用于url解码和中文解析的小脚本(python url decoder)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 红帽redhat下通过脚本和yum安装docker容器引擎的详细步骤
  • 脚本1调用脚本2,脚本2必须输入回车,如何在调用过程中自动输入回车
  • HTML 脚本语言介绍及<script>标签用法
  • 脚本中如何调用另外的一个脚本?
  • 脚本调用脚本出异常
  • shell 脚本中命令别名在脚本外无法使用
  • 想用shell脚本定时执行另一个脚本
  • shell脚本问题 关于父脚本和子脚本的问题
  • centos系统运行脚本,显示bash进程,能否以脚本名字显示?
  • 求救:修改系统启动脚本 不过脚本里面误写了阻塞命令
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • 定时跑脚本编译C文件就报错,手动跑脚本就编译成功了.
  • 脚本如何自动输入密码??交互式脚本如何编写?
  • 请问在 LINUX下如何编辑脚本(可以直接运行脚本访问WINDOW系统)
  • 请问在脚本里怎么得到一个程序运行的返回值,脚本怎么返回值?
  • C语言调用shell脚本后,通过何种方法能获取脚本中变量的值
  • 请教一个问题,CRONTAB执行脚本和SSH登陆后调用脚本有什么不同?
  • windows上脚本调用UNIX的脚本
  • shell脚本如何调用另外一个shell脚本的函数?
  • 急救!关于Shell脚本删除过期文件的问题,Shell脚本达人乱入
  • 如何给shell脚本加密,脚本中有密码。最好是比较直接的,不要说让用 shc


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3