Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103681822
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 23:03:54

作者:styr  出处:Unix爱好者家园unix-cd.com  

前几天做了个统计县级各网点余额的脚本。每天当会计下载了报表后,应该在统版print/对应县中心901机构目录下会有对应每个网点机构号的名为rpt_acc_bal_001网点机构号日期.dat,各网点的余额就在其中。

呵呵,这个脚本的默认统版目录为偶们四川的=/usr/scabs,回车默认统计901机构为偶这里的511111901,统计日期为昨日。终端打印统计结果的函数prin()暂时未用,打算更改为自定义或打印结果的兄弟请自行动手哈。。想改就改。^_^

#!/bin/ksh
#查询网点余额的shell V051025
#乐山市沙湾区邮政局  宋 涛

trap "tput sgr0 ; echo ; rm ~/yetj.txt 2>/dev/null; exit " 0 1 2 3 9 15
prin()     #终端打印函数  #暂时未用
{
echo ""
cat $1 > $(tty)
echo ""
}

data()
{
month=$(date +%m)
day=$(date +%d)
year=$(date +%Y)
day=$(expr $day - 1)
if [ $day -eq 0 ]; then
month=$(expr $month - 1)
if [ $month -eq 0 ]; then
month=12
day=31
year=$(expr $year - 1)
else
  month=$(printf "%02d" $month)
   case $month in
     01|03|05|07|08|10|12) day=31;;
     04|06|09|11) day=30;;
     02)
       if [ $(expr $year % 4) -eq 0 ]; then
         if [ $(expr $year % 400) -eq 0 ]; then
           day=29
         elif [ $(expr $year % 100) -eq 0 ]; then
           day=28
         else
           day=29
         fi
       else
         day=28
       fi
     ;;
   esac
fi
fi
test $(expr length $day) -eq 1 && day=$(printf "%01d"$day)
day=${month}$day
}

inputfdindir()
{
while :
do
clear
echo "\n\t\t余 额 查 询 表\n\n"
[ "$finddir" ] && echo "\n请输入欲统计余额的县级901机构号(回车默认为沙湾局):  ${finddir}" \
|| read finddir?"请输入欲统计余额的县级901机构号(回车默认为沙湾局): "
[ "$finddir" ] || { finddir="511111901" ; break ; }
case $finddir in
q|Q) exit 0 ;;
sw) finddir="511111901" ; break ;;
esac
test $(expr length $finddir) -ne 9 && { echo "\n机构号长度错误!\n" ; read tmp ; finddir= ; continue ; }
test $(expr $finddir : "^[0-9][0-9]*$") -gt 0 || { echo "\n机构号输入错误!\n" ; read tmp ; finddir= ; continue ; }
test -d ${scabsdir}/print/$finddir && break || { echo "\n无此机构号!\n" ; read tmp ; finddir= ; continue ; }
done
}

inputday()
{
while :
do
echo "\n"
[ "$day" ] || read day?"请输入欲统计余额的日期(回车默认为昨日): "
[ "$day" ] || { data ; break ; }
[ "$day" = "q" -o "$day" = "Q" ] && exit 0
[ "$day" = "yesterday" ] && { data ; break ; }
test $(expr length $day) -ne 4 && { echo "\n日期长度错误!\n" ; read tmp ; day= ; continue ; }
test $(expr $day : "^[0-9][0-9]*$") -gt 0 && break || { echo "\n日期输入错误!\n" ; read tmp ; day= ; continue ; }
done
}

tput bold
scabsdir=/usr/scabs  #四川统版目录
finddir=$1   #县级901机构号
day=$2       #统计日期    
inputfdindir $finddir
inputday  $day
for name in $(find ${scabsdir}/print/$finddir -name "rpt_acc_bal_001*${day}.dat")
do
[ -r $name ] || { echo "\n ${name} 文件不可读\n" ; read ; continue ; }
finddir=$(echo $name|sed 's/.*bal_001\(.*\)....\.dat/\1/')
[ $(echo $finddir|cut -c7-) = "888" ] && continue
jgname=$(awk -F"[# :]*" 'NR==5 {print $3}' $name)
jgsum=$(awk -F"|" 'END{print $3}' $name)
echo ${finddir}"\t"${jgname}"\t"${jgsum} >>~/yetj.txt
done
[ -s ~/yetj.txt ] && { clear ; awk 'BEGIN{printf("\n%30s\n\n%-12s\n%-12s%-25s%-18s\n\n",\
"余 额 查 询 表","统计日期: '$day'","机构号","网点名","余额")}
{printf("%-12s%-25s%-18.2f\n",$1,$2,$3) |"sort -n";sum+=$3}
END{close("sort -n");printf("\n%-12s%-25.2f\n","合计",sum)}'  ~/yetj.txt ; } || \
echo "\n 无此统计报表\n "

阅读(377) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~