📄 cm_cfg_0007.ksh
字号:
break else # 睡眠一段时间 sleep $sleepperiod continue fi done # 如果下载文件不成功,则退出 if [[ $label = 1 ]] then # 返回 2 -- 文件存在但是下载不成功 return 2 else if [[ -s $INPATH/$inputFile ]] then /usr/contrib/bin/gunzip -f $INPATH/$inputFile downTaskFile="${inputFile%.gz}" fi fi # 清理旧的文件,将其改名,改成格式如 I_CM_CFG_0007_${TMSTAMP}.txt.gz.old # 保证处理过的文件不再重新处理 for i in `cat $tmpfile2` do ftp -i -n $OMSIP <<! > /dev/null 2>/dev/null user $OMSUSER $OMSPSWD cd $OMSCFGPATH bin # rename $i ${i}.old bye! done rm -f $tmpfile2 2>/dev/null return 0}# 功能: 将 从 OMS 服务器下载的文件转换成 各个实例可以使用的配置文件# 用法: translateFile 任务号 转换文件名称# 返回: 0 -- 转换成功 其他 -- 转换不成功function translateFile{ if [[ $# != 2 ]] then logit "WARN" "输入参数个数不够,用法 translateFile 任务号 转换文件名称" fileName=$taskId fileLineNo=0 errMsg="输入参数个数不够,用法 translateFile 任务号 转换文件名称" infoline "010706" "输入参数个数不够,用法 translateFile 任务号 转换文件名称" "$taskId" "$fileName" "$fileLineNo" "$errMsg" return 1 fi fileType=$1 currFile=$2 fmtFile=${fileType}.fmt # 根据不同情况,进行文件转换,先转换成临时的配置文件,根据实际情况生成正式的配置文件 # $currFile 为从OMS服务器下载的输入文件 # $targetFile 为临时的格式转换文件,主要供正式转换使用 # $cfgFile 正式转换后生成的临时文件,格式与正式文件相同,只是存放路径不同 # $cfgNormalFile 正式配置文件 mv $cfgFile $cfgNormalFile # 转换路线 $currFile -> $targetFile -> $cfgFile -> $cfgNormalFile case "$fileType" in # CM_CRON_0001 任务调度服务 # CM_CRON_0001 输入文件名称无特殊要求 # 紧急类型的文件上传 ${CFGPATH}/urgent.cfg CM_EXCH_0002) targetFile=${TMPPATH}/${fileType}.cfg cfgNormalFile=${CFGPATH}/urgent.cfg cfgFile=${TMPPATH}/urgent.cfg1 rm -f $cfgFile 2>/dev/null touch $cfgFile ;; # 进程清理服务 ${CFGPATH}/process.cfg CM_CLR_0003) targetFile=${TMPPATH}/${fileType}.cfg cfgNormalFile=${CFGPATH}/process.cfg cfgFile=${TMPPATH}/process.cfg1 rm -f $cfgFile 2>/dev/null touch $cfgFile ;; # 日志文件清理服务 $CFGPATH/logcycle.cfg CM_LOG_0004) targetFile=${TMPPATH}/${fileType}.cfg cfgNormalFile=${CFGPATH}/logcycle.cfg cfgFile=${TMPPATH}/logcycle.cfg1 rm -f $cfgFile 2>/dev/null touch $cfgFile ;; # 统一文件清理机制,清理上传的文件 $CFGPATH/ftpcycle.cfg CM_FILE_0005) targetFile=${TMPPATH}/${fileType}.cfg cfgNormalFile=${CFGPATH}/ftpcycle.cfg cfgFile=${TMPPATH}/ftpcycle.cfg1 rm -f $cfgFile 2>/dev/null touch $cfgFile ;; # CM_EXCH_0006 普通文件传输机制 # CM_EXCH_0006 输入文件名称无特殊要求 # CM_CFG_0007 紧急类型的配置文件下载与格式转换 # CM_CFG_0007 输入文件名称无特殊要求 # CM_CFG_0008 普通类型的配置文件下载与格式转换 # CM_CFG_0008 输入文件名称无特殊要求 *) targetFile=${TMPPATH}/${fileType}.cfg cfgNormalFile=${CFGPATH}/${fileType}.cfg cfgFile=${TMPPATH}/${fileType}.cfg1 rm -f $cfgFile 2>/dev/null touch $cfgFile ;; esac # 判断文件是否存在 if [[ ! -s ${INPATH}/${currFile} ]] then logit "WARN" "输入文件 ${INPATH}/${currFile} 不存在" fileName=$currFile fileLineNo=0 errMsg="输入文件 ${INPATH}/${currFile} 不存在" infoline "010707" "输入文件 ${INPATH}/${currFile} 不存在" "$taskId" "$fileName" "$fileLineNo" "$errMsg" return 2 fi OLDIFS=$IFS # 判断输入文件的成功标志 # 返回标识 retFlag # 0 -- 成功 1 -- 失败 2 -- 警告信息 read -r line < ${INPATH}/$currFile echo $line | tr -d " " | tr "|" " " | read -r f1 f2 f3 f4 f5 retFlag retCode retMesg rest if [[ $retCode != 000000 ]] then logit "WARN" "输入文件 ${INPATH}/$currFile 返回码不为 000000,内容错误" fileName=$currFile fileLineNo=0 errMsg="输入文件 ${INPATH}/$currFile 返回码不为 000000,内容错误" infoline "010708" "输入文件 ${INPATH}/$currFile 返回码不为 000000,内容错误" "$taskId" "$fileName" "$fileLineNo" "$errMsg" return 3 fi # 将输入格式文件中的数据字典单词列表放在临时配置文件,作为第一行内容。 getTaskFmt $fileType > $targetFile if [[ $? != 0 ]] then logit "WARN" "调用任务 $fileType的输入文件格式函数 getTaskFmt 返回错误,获取输入文件格式不成功" fileName=$currFile fileLineNo=0 errMsg="调用任务 $fileType的输入文件格式函数 getTaskFmt 返回错误,获取输入文件格式不成功" infoline "010709" "调用任务 $fileType的输入文件格式函数 getTaskFmt 返回错误,获取输入文件格式不成功" "$taskId" "$fileName" "$fileLineNo" "$errMsg" return 4 fi # 转换成临时的配置文件,没有进行合法性检查 awk -v taskNo=$fileType ' BEGIN { FS="|"; OFS=" "; # print "taskNo is " taskNo; } # 不处理标题行,从第二行开始转换 NR > 1 { if ( taskNo != "WK_LOG_1013" && taskNo != "WK_LOG_1015" \ && taskNo != "WK_LOG_1016" && taskNo != "WK_LOG_1017" ){ start=3; } else { start=1; } # 如果字段的内容全为空格或为空,则置为 NA for ( i = start; i <= NF-1; i++ ){ if ( length ( $i ) == 0 ){ $i = "NA"; } printf "%s ", $i; } printf "\n"; } ' ${INPATH}/$currFile >> $targetFile # 任务号 taskId=$fileType # 文件名称 fileName=$currFile # 对转换成的临时配置文件进行合法性检查 (( recNo = 1 )) while read -r line do # 第一行为数据字典单词行 if (( recNo == 1 )) ; then set -A wordList $line (( recNo = recNo + 1 )) continue # 其他行为明细行 else set -A valueList $line fi # 输入文件中的行号,如第 1000 行 fileLineNo=$recNo logit "DEBUG" "比较输入文件的字段个数 ${#valueList[*]} 与格式文件中的字段个数 ${#wordList[*]} 是否相符" # 检查输入的字段个数是否符合格式文件汇总的字段个数要求 if [[ ${#wordList[*]} != ${#valueList[*]} ]] then logit "WARN" "文件 $currFile 中第 $recNo 行中,字段个数不符合格式文件汇总的字段个数要求" errMsg="文件 $currFile 中第 $recNo 行中,字段个数不符合格式文件汇总的字段个数要求" infoline "010701" "明细行内容错误" "$taskId" "$fileName" "$fileLineNo" "$errMsg" (( recNo = recNo + 1 )) continue fi # 取正式配置文件字段个数 cout=${#wordList[*]} logit DEBUG "任务$taskId 的输入格式文件中的字段个数为 $cout " (( i = 1 )) (( errCout = 0 )) while (( i < cout )) do errMsg="" chkInputField "${wordList[${i}]}" "${valueList[${i}]}" | read -r errMsg if [[ ${#errMsg} > 0 ]] then logit "WARN" "文件 $currFile 中第 $recNo 行中,$errMsg" fileLineNo=$recNo infoline "010702" "明细行内容错误" "$taskId" "$fileName" "$fileLineNo" "$errMsg" (( errCout = errCout + 1 )) (( i = i + 1 )) continue fi if [[ ${valueList[${i}]} = "NA" ]] then valueList[${i}]="${wordList[${i}]}-${valueList[${i}]}" fi (( i = i + 1 )) done # 如果检查后,完全没有错误,则将输入行内容写入正式的配置文件 if (( $errCout == 0 )) ; then echo $line >> $cfgFile fi # 累加文件记录行数 (( recNo = recNo + 1 )) done < $targetFile # 替换正式的文件 mv $cfgFile $cfgNormalFile fileLineNo=0 logit "WARN" "任务 $taskId 的输入文件 $currFile 转换 $cfgNormalFile 成功" errMsg="任务 $taskId 的输入文件 $currFile 转换 $cfgNormalFile 成功" infoline "010700" "任务 $taskId 的输入文件 $currFile 转换 $cfgNormalFile 成功" "$taskId" "$fileName" "$fileLineNo" "$errMsg" return 0}# 载入 HPUX 实例定义的环境变量. $HOME/hpux/.setenvif [[ ENABLEFLAG = 1 ]] then exitfi# 载入 OMS 系统定义的文件传输参数定义配置文件
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -