当前位置:Linux教程 - Linux综合 - 转换金额大写的SHELL程序(绝对通过验证)

转换金额大写的SHELL程序(绝对通过验证)

[code:1:7abe7d16ca]#!/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[/code:1:7abe7d16ca] (调试环境:SCO OpenServer 5.0.5 、ksh 我把原始脚本传上来,各位可以保存后改名直接拷贝到SCO上执行。

(出处:http://www.sheup.com)