服务器 频道

SCO下转换大写金额的SHELL脚本

  【IT168 服务器学院】#!/bin/ksh
  # Program Name : Num2Chn.sh
  # Programmer : 吕永辉(仙桃市信用联社)
  # 首先判断输入的是否为数字
  printf "%.2f" $1 >/dev/null 2>&1 3>&1 || {
  echo "输入非法!!!";exit
  }
  # 定义数字数组
  Num[0]="零" Num[1]="壹" Num[2]="贰" Num[3]="叁" Num[4]="肆" Num[5]="伍"
  Num[6]="陆" Num[7]="柒" Num[8]="捌" Num[9]="玖"
  # 定义金额单位数组
  Unit[1]="分" Unit[2]="角" Unit[3]="元" Unit[4]="拾" Unit[5]="佰" Unit[6]="仟"
  Unit[7]="万" Unit[11]="亿"
  # 处理负数的情况(红字)
  [ `echo $1 | grep "-"` ] && {
  NumStr=`echo $1 | sed ''s/^.//''`
  RedFlag="(红)"
  } || {
  NumStr=$1
  RedFlag=""
  }
  # 初始化输入数字数组
  i=1
  for TmpC in `printf "%.2f" $NumStr | awk -F "." ''{print $1$2}'' | sed ''s/./& /g''`
  do
  Nums[$i]=$TmpC
  i=`expr $i + 1`
  done
  j=${#Nums[@]} # 为循环计数变量附初值为输入数字的长度
  k=1 # 为循环定位变量附初值(用于确定金额单位)
  ChnNum="" # 初始化大写金额字符串
  while
  [ $j -eq 0 ] && break
  [ $k -gt 11 ] && {
  ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 8 `]}$ChnNum
  j=`expr $j - 1`
  k=`expr $k + 1`
  continue
  }
  [ $k -gt 7 -a $k -lt 11 ] && {
  ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 4 `]}$ChnNum
  j=`expr $j - 1`
  k=`expr $k + 1`
  continue
  }
  ChnNum=${Num[${Nums[$j]}]}${Unit[$k]}$ChnNum
  do
  j=`expr $j - 1`
  k=`expr $k + 1`
  done
  ChnNum=`echo $RedFlag$ChnNum | sed ''s/零分/整/'' | sed ''s/零角/零/g'' \
  | sed ''s/零拾/零/g'' | sed ''s/零佰/零/g'' | sed ''s/零仟/零/g''\
  | sed ''s/零整/整/'' | sed ''s/零零零零万/零/''`
  # 下面的循环用于去掉字符串中连续的零
  while
  [ `echo $ChnNum | grep "零零"` ] || {
  ChnNum=`echo $ChnNum | sed ''s/零元/元/''| sed ''s/零万/万/'' \
  | sed ''s/零亿/亿/'' | sed ''s/^元//'' | sed ''s/^零//'' | sed ''s/^整$/零元&/`
  break
  }
  do
  ChnNum=`echo $ChnNum | sed ''s/零零/零/g''`
  done
  echo $ChnNum
  (调试环境:SCO OpenServer 5.0.5 、ksh )
  
0
相关文章