歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> 轉換金額大寫的SHELL程序(絕對通過驗證)

轉換金額大寫的SHELL程序(絕對通過驗證)

日期:2017/2/27 14:15:26   编辑: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上執行。




Copyright © Linux教程網 All Rights Reserved