#!/bin/sh
set -x
export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
export PATH=$PATH:.:./
export LANG=zh_CN.GB18030
lDATE=`date +%Y%m%d`
cd /home/oracle/spoon/OCS_TRANS/work
for line in `ls *BALANCE*.TXT`
do
count=`grep 'FILEHEAD:OBJECT_TYPE|OBJECT_ID|ACCT_BALANCE_ID|ACCT_ID|BALANCE_TYPE_ID|BALANCE|EFF_DATE|EXP_DATE|CYCLE_UPPER|CYCLE_LOWER' ${line} |wc -l`
echo $count
if [ $count -ge 1 ]
then
sed -i '1d' ${line}
fi
count=`grep 'FILEEND:' ${line} |wc -l`
if [ $count -ge 1 ]
then
sed -i '$d' ${line}
fi
done
cd /home/oracle/spoon/dist
kitchen.sh /rep HBDB /level Debug /logfile ../log/cust_node${lDATE}.log /job HB_BALANCE_JOB
~
建议你可以在linux上,一行一行的敲,同时自己一边百度一下shell命令,就可以解读了。
#!/bin/sh
#开启脚本日志
set -x
#设置环境变量并生效
export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
export PATH=$PATH:.:./
export LANG=zh_CN.GB18030
#变量IDATE值为当前时间的年月日,例如20160329
lDATE=`date +%Y%m%d`
#进入到指定目录下
cd /home/oracle/spoon/OCS_TRANS/work
#列出当前目录下,中间包含BALANCE并以.TXT结尾的所有文件名,并逐个读入变量line中,执行do循环体的内容:
for line in `ls *BALANCE*.TXT`
do
#在line文件中,查找含有'表达式'的行,并将找到的所有行,输出给wc -l。而wc -l是统计行数,并赋值给count
#grep -[acinv] '搜索内容串' filename
#也就是说,是数一数文件line中有多少行含有字符串FILEHEAD:OBJECT_TYPE|OBJECT_ID|ACCT_BALANCE_ID|ACCT_ID|BALANCE_TYPE_ID|BALANCE|EFF_DATE|EXP_DATE|CYCLE_UPPER|CYCLE_LOWER
count=`grep 'FILEHEAD:OBJECT_TYPE|OBJECT_ID|ACCT_BALANCE_ID|ACCT_ID|BALANCE_TYPE_ID|BALANCE|EFF_DATE|EXP_DATE|CYCLE_UPPER|CYCLE_LOWER' ${line} |wc -l`
#在控制台打印出count变量的值
echo $count
#如果个数count大于等于1
if [ $count -ge 1 ]
then
#删除文件line的第一行,刚才提到line变量是当前目录下的某个满足*BALANCE*.TXT的文件名
sed -i '1d' ${line}
fi
#在line文件中,数出多少行含有字符串FILEEND:
count=`grep 'FILEEND:' ${line} |wc -l`
#如果行数大于等于1
if [ $count -ge 1 ]
then
#删除最后1行,$代表最后1行,d代表删除,-i代表直接在文件中修改
sed -i '$d' ${line}
fi
done
#进入到指定目录
cd /home/oracle/spoon/dist
#执行脚本kitchen.sh,后面的是脚本参数
kitchen.sh /rep HBDB /level Debug /logfile ../log/cust_node${lDATE}.log /job HB_BALANCE_JOB
谢谢您的解答和建议