首页 新闻 会员 周边 捐助

帮忙看下这段代码是什么意思?最好能详细说明下每行的意思

0
悬赏园豆:20 [已解决问题] 解决于 2016-03-29 19:18

#!/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
~

geng-kx的主页 geng-kx | 初学一级 | 园豆:184
提问于:2016-03-28 09:18
< >
分享
最佳答案
1

建议你可以在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

收获园豆:20
我还是太年轻 | 小虾三级 |园豆:692 | 2016-03-29 18:19

谢谢您的解答和建议

geng-kx | 园豆:184 (初学一级) | 2016-03-29 19:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册