[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上執行。