⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cm_cfg_0007.ksh

📁 ksh 实现的基于hpux下的性能数据以及故障的采集程序。可以作为新手练手使用
💻 KSH
📖 第 1 页 / 共 2 页
字号:
#!/bin/ksh#(@)  紧急类型的配置文件下载与格式转换# 本程序调用不需要参数# 功能 查询字典中的字段含义(完全匹配)# 用法: seek 单词(中文或英文)# 返回 0 -- 单词在数据字典中找到  其他 -- 错误function seek{if [[ ${#1} = 0 ]] then   echo 用法: seek  中文或英文   return 1finame=$1if [[ `expr "$1" : '[a-zA-Z0-9_.]*' ` = ${#1} ]] then   name=`echo $1 | tr "[:upper:]" "[:lower:]"`fidigit=0if [[ `expr "$1" : "[[:digit:]]*" ` = ${#1} ]] then  digit=1fiif [[ $digit = 0 ]] then  awk '    BEGIN {     label=0;   }   $1!~/^#/ {     $2 = tolower( $2 );   }    $1!~/^#/ && ( $1~/^'"$name"'$/ || $2~/^'"$name"'$/ ) {      label = 1;      printf("%30s  %12s %20s    %s %s\n", $1, $2,$3,$4,$5) ;      while( 1 ){          if( getline == 0 )            break;          if( $1~/^#/ )            print $0;          else {            $2 = tolower( $2 );            if( index( $1, "#" ) == 0 && ( index( $1, "'"$name"'" ) || index( $2, "'"$name"'" ) ) ){              printf("%30s  %12s %20s    %s %s\n", $1, $2,$3,$4,$5) ;            }            break;          }      }  }  END {    if( label == 0 ){      print "与 \"'"$1"'\" 完全匹配的字段不在数据字典中 "      exit 1    }  }  ' $HOME/hpux/dict/dict.datelse  awk '    BEGIN {     label=0;     nubr=0;   }   $1~/^#/ || length( $0 ) == 0 {     continue;   }   {     nubr++;     $2 = tolower( $2 );     if( nubr == '"$1"' ){       printf("%30s  %12s %20s    %s %s\n", $1, $2,$3,$4,$5) ;       label = 1;       while( 1 ){            if( getline == 0 )              break;            if( $1~/^#/ )              print $0;            else               break;       }     }     if( label == 1 )       exit( 1 );  }  END {    if( label == 0 )      print "'"$1"' 不在数据字典中 "      exit 1  }  ' $HOME/hpux/dict/dict.datfi}# 功能: 检查输入字段的内容是否合法 # 用法: getTaskFmt 任务号如  CM_CFG_0007# 返回 0 -- 字段合法  其他 -- 字段检查不合法function chkInputField{  dictName=$1  dictValue=$2  seek $dictName | head -1 | read -r f1 f2 fldType rest  if [[ `expr "$fldType" : '.*\(不在\).*$'` = "不在" ]] then    logit "WARN" "$dictName 不在数据字典中"    echo "$dictName 不在数据字典中"    return 1  fi   echo $fldType | tr "[[:upper:]]" "[[:lower:]]" | read -r domainType    case "$domainType" in    int)       if [[ `expr "$dictValue" : '[[:digit:]+-]*'` != ${#dictValue} ]] then          logit "WARN" " $dictName 要求全部是数字,$dictValue 含有其他字符"          echo "$dictName 要求全部是数字,$dictValue 含有其他字符"          return 2       fi        ;;    char)       ;;    dec)       if [[ `expr "$dictValue" : '[[:digit:]+-.]*'` != ${#dictValue} ]] then          logit "WARN" " $dictName 要求全部是数字与小数点以及正负号组成的字符串,$dictValue 含有其他字符"          echo "$dictName 要求全部是数字与小数点以及正负号组成的字符串,$dictValue 含有其他字符"          return 3       fi        ;;  esac  return 0}# 功能: 得到指定任务的配置信息# 用法: getTaskFmt 任务号如  CM_CFG_0007# 返回 0 -- 获取成功  其他 -- 失败function getTaskFmt{  # 必须输入参数, 任务号如 CM_CFG_0007  if [[ $# != 1 ]] then     logit "WARN" "调用函数 getTaskFmt 时没有输入任务号,如CM_CFG_0007"     return 1  fi    taskSqno=$1  fmtfile=${FMTPATH}/I_${taskSqno}.fmt  # 如果文件不存在,则退出  if [[ ! -s $fmtfile ]] then     logit "WARN" "输入文件格式定义文件 $fmtfile 不存在或无内容"     return 2  fi  # label 0 -- 输入格式文件中无字典项 1 -- 输入格式文件中有字典项  label=0  # 从输入文件格式定义文件中得到数据字典项  while read -r f1 f2 rest  do     # 不处理注释行     if [[ `expr "$f1" : '\(.\).*$'` = "#" ]] then        continue     fi       # 如果字段长度为 0 ,则不处理     if [[ ${#f1} = 0 ]] then        continue     fi       # 字典项的必须为 [a-zA-Z0-9_.] 格式 ,大小写字母,0-9数字,下划线, .      if [[ `expr "$f1" : '[a-zA-Z0-9_.]*'` = ${#f1} ]] then        label=1       if [[ $f1 = mesg || $f1 = mesgId ]] then          continue       fi         echo "$f1 \c"     elif [[ `expr "$f2" : '[a-zA-Z0-9_.]*'` = ${#f2} ]] then       label=1       if [[ $f2 = mesg || $f2 = mesgId ]] then          continue       fi       echo "$f2 \c"     fi    done < $fmtfile  # 如果输入格式文件中有字典项,则  if [[ $label = 1 ]] then    echo ""    return 0  else     logit "WARN" "输入文件格式定义文件 $fmtfile 无任何字典项,需检查该文件"    return 1  fi  return 0}# 功能: 下载指定类型任务最新的输入文件# 用法: getOmsFile 任务号如  CM_CFG_0007# 返回 0 -- 存在最新的输入文件,并且下载成功  1 -- 没有符合条件的文件 2 -- 文件存在但是下载不成功function getOmsFile{   sleepperiod=$FTPRESTTIME   # 默认间隔时间为 60 秒   if [[ ${#sleepperiod} = 0 || ${sleepperiod} = 0 ]] then      sleepperiod=60   fi   loop=0      if [[ ${#1} = 0 ]] then      logit WARN "任务号不能为空"      return 9   fi   ftpfile=`basename $1`   # 默认下载 5 次   if [[ ${#RETRYTIMES} = 0 || ${RETRYTIMES} = 0 ]]  then      RETRYTIMES=5   fi   tmpfile=$TMPPATH/ftp.tmp   tmpfile1=$TMPPATH/ftp.tmp1   tmpfile2=$TMPPATH/ftp.tmp2   # 判断有无当前最新的指定任务对应的输入文件   #  从 OMS 服务器,取出当前的 压缩文件   ftp -i -n $OMSIP <<!  > $tmpfile  2>/dev/null        user $OMSUSER $OMSPSWD        bin        cd  $OMSCFGPATH        ls  I_${ftpfile}*.gz        bye!#        ls -lrt I_${ftpfile}*.gz   # 将符合条件的文件生成临时文件1   grep -e "I_${ftpfile}.*.gz" $tmpfile > $tmpfile1   rm -f $tmpfile   # 如果没有符合条件的文件,则退出   if [[ ! -s $tmpfile1 ]] then      rm -f $tmpfile1 2>/dev/null      return 1   fi   # 删除临时文件   rm -f  $tmpfile 2>/dev/null   # 对其进行排序,最新的在最后一个   awk ' { print $NF; } ' $tmpfile1  | sort  >  $tmpfile2    # 删除临时文件1   rm -f  $tmpfile1 2>/dev/null   tail -1 $tmpfile2 | read -r inputFile   # label 成功标识 1 -- 不成功 0 -- 成功   label=1   loop=1   # 进行文件下载,直到到了一定次数或下载成功   while (( loop < RETRYTIMES ))   do      ftp -i -n $OMSIP <<!  > /dev/null 2>/dev/null        user $OMSUSER $OMSPSWD        lcd $INPATH        cd  $OMSCFGPATH        bin        get $inputFile         bye!     (( loop = loop + 1 ))     if [[ $? = 0 ]] then        label=0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -