📄 cm_cfg_0007.ksh
字号:
#!/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 + -