Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

SCO下转换大写金额的SHELL脚本(我一直在研究这个脚本)

[复制链接]
xlink 发表于 2005-4-19 21:37:59 | 显示全部楼层 |阅读模式
我一直在研究这个脚本,有高手来加个注释么?
  1. #!/bin/ksh
  2. # Program Name : Num2Chn.sh
  3. # Programmer   : 吕永辉(仙桃市信用联社)
  4. # 首先判断输入的是否为数字
  5. printf "%.2f" $1 >/dev/null 2>&1 3>&1 || {
  6.    echo "输入非法!!!";exit
  7. }
  8. # 定义数字数组
  9. Num[0]="零" Num[1]="壹" Num[2]="贰" Num[3]="叁" Num[4]="肆" Num[5]="伍"
  10. Num[6]="陆" Num[7]="柒" Num[8]="捌" Num[9]="玖"
  11. # 定义金额单位数组
  12. Unit[1]="分" Unit[2]="角" Unit[3]="元" Unit[4]="拾" Unit[5]="佰" Unit[6]="仟"
  13. Unit[7]="万" Unit[11]="亿"
  14. # 处理负数的情况(红字)
  15. [ `echo $1 | grep "-"` ] && {
  16. NumStr=`echo $1 | sed 's/^.//'`
  17. RedFlag="(红)"
  18. } || {
  19. NumStr=$1
  20. RedFlag=""
  21. }
  22. # 初始化输入数字数组
  23. i=1
  24. for TmpC in `printf "%.2f" $NumStr | awk -F "." '{print $1$2}' | sed 's/./& /g'`
  25. do
  26.   Nums[$i]=$TmpC
  27.   i=`expr $i + 1`
  28. done
  29. j=${#Nums[@]}       # 为循环计数变量附初值为输入数字的长度
  30. k=1                 # 为循环定位变量附初值(用于确定金额单位)
  31. ChnNum=""           # 初始化大写金额字符串
  32. while
  33.   [ $j -eq 0 ] && break
  34.   [ $k -gt 11 ] && {
  35.     ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 8 `]}$ChnNum
  36.     j=`expr $j - 1`
  37.     k=`expr $k + 1`
  38.     continue
  39. }
  40.   [ $k -gt 7 -a $k -lt 11 ] && {
  41.     ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 4 `]}$ChnNum
  42.     j=`expr $j - 1`
  43.     k=`expr $k + 1`
  44.     continue
  45. }
  46.   ChnNum=${Num[${Nums[$j]}]}${Unit[$k]}$ChnNum
  47. do
  48.   j=`expr $j - 1`
  49.   k=`expr $k + 1`
  50. done
  51. ChnNum=`echo $RedFlag$ChnNum | sed 's/零分/整/' | sed 's/零角/零/g' \
  52.             | sed 's/零拾/零/g' | sed 's/零佰/零/g' | sed 's/零仟/零/g'\
  53.             | sed 's/零整/整/' | sed 's/零零零零万/零/'`
  54. # 下面的循环用于去掉字符串中连续的零
  55. while
  56.   [ `echo $ChnNum | grep "零零"` ] || {
  57.      ChnNum=`echo $ChnNum  | sed 's/零元/元/'| sed 's/零万/万/' \
  58.        | sed 's/零亿/亿/' | sed 's/^元//' | sed 's/^零//' | sed 's/^整$/零元&/`
  59.      break
  60. }
  61. do
  62.   ChnNum=`echo $ChnNum | sed 's/零零/零/g'`
  63. done
  64. echo $ChnNum
  65. (调试环境:SCO OpenServer 5.0.5 、ksh )
复制代码


忘记说了,我了解一点bsh,对ksh是一窍不通,最好详细一点。

[ Last edited by xlink on 2005-4-19 at 21:40 ]
桃源 发表于 2005-4-20 17:11:25 | 显示全部楼层
不想说
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 20:01 , Processed in 0.019790 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表