|
发表于 2006-2-17 15:28:11
|
显示全部楼层
小弟初学shell编程,我也写了一个,请指正,不过有总数20位的限制。
#!/bin/bash
read -p "input the number:" number
length=${#number}
#从高位到低位取每一位的数
for (( i=0;i<$length;i=i+1 ))
do
declare -i benwei=i
#按我们中国的习惯四位为一分组进行转换
declare -i wei_a=(length-i-1)/4
declare -i wei_b=(length-i-1)%4
case ${number:benwei:1} in
1)
wei="壹"
;;
2)
wei="贰"
;;
3)
wei="叁"
;;
4)
wei="肆"
;;
5)
wei="伍"
;;
6)
wei="陆"
;;
7)
wei="柒"
;;
8)
wei="捌"
;;
9)
wei="玖"
;;
#对0单独进行判断,下一位如果还为0,则本位的0不转换,个位为0也不转换
0)
if [ ${number:benwei+1:1} = 0 ]; then
wei=""
elif [ $wei_b = 0 ]; then
wei=""
else
wei="零"
fi
esac
#对位权进行说明。如果为万位组,且为第5位(即万位)并且本万位组不全为0,则万位标志置”万“,依此类推。
if [ $wei_a == 1 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
flag="万"
elif [ $wei_a == 2 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
flag="亿"
elif [ $wei_a == 3 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
flag="万亿"
elif [ $wei_a == 4 -a $wei_b == 0 -a ${number:benwei-3:4} != "0000" ]; then
flag="亿亿"
elif [ $wei_b == 1 -a ${number:benwei:1} != 0 ]; then
flag="拾"
elif [ $wei_b == 2 -a ${number:benwei:1} != 0 ]; then
flag="佰"
elif [ $wei_b == 3 -a ${number:benwei:1} != 0 ]; then
flag="仟"
else
flag=""
fi
result=$wei$flag
#不换行输出每一位的值和权
echo -n $result
#判断第n位后全为0的问题,如果是,则退出循环,不是则继续进行后续位的判断
for (( j=i+1;j<$length;j=j+1 ))
do
if [ ${number:j:1} = 0 ]; then
lianling_flag=0
else
lianling_flag=1
break
fi
done
#连0后的前边位的位权要加上
if [ $lianling_flag = 0 ]; then
if [ $wei_a = 1 -a $wei_b != 0 ]; then
echo "万"
elif [ $wei_a = 2 -a $wei_b != 0 ]; then
echo "亿"
elif [ $wei_a = 3 -a $wei_b != 0 ];then
echo "万亿"
elif [ $wei_a = 4 -a $wei_b != 0 ];then
echo "亿亿"
fi
break
fi
done
echo |
|