免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3444 | 回复: 16
打印 上一主题 下一主题

一个shell写的加法机,请高手帮忙修改一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-08 03:12 |只看该作者 |倒序浏览
shell初学者,不要见笑。请高手帮忙修正一下:
已知问题:
1.不能屏蔽英文字符和符号的输入。
2.减法错误。

一共两个文件,addrobot和numf
addrobot内容:
#!/bin/sh
clear
cat /dev/null > num.txt
cat /dev/null > numf.txt
while [ TRUE ]
do
clear
line=`wc -l num.txt|awk '{ print $1 }'`
sum=`awk 'BEGIN { sum = 0 } { sum = sum + $1} END { OFMT = "%.2f"; print sum/100; }' num.txt`
tput cup 25 20
echo $line行                        总计:$sum
tput cup 1 8
echo  ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
echo -----------------------------------------------------xlink-----------------
for x in 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
do
tput cup $x 4
echo 数据录入:
tput cup $x 14
read num
if [ $num = q 2>/dev/null ]
then
exit
elif [ -z $num ]
then
tput cup $x 14
echo "非法数值"
elif [ $num -eq 0 2>/dev/null ]
then
tput cup $x 14
echo "非法数值"
else
tput cup $x 40
echo $num>tmp
echo $num>>num.txt
No=`wc -l num.txt|awk '{print $1}'`
echo No.$No
line=`wc -l num.txt|awk '{ print $1 }'`
sum=`awk 'BEGIN { sum = 0 } { sum = sum + $1} END { OFMT = "%.2f"; print sum/100; }' num.txt`
tput cup 25 20
echo 共$line行                        总计:$sum
tput cup $x 48
./numf
tput cup $x 14
fi
done
done

numf内容:
#!/bin/sh
n=`awk '{print length($1)}' tmp`
if [ $n = 1 ]
then read num<tmp
echo 0.0$num
echo 0.0$num>>numf.txt
elif [ $n = 2 ]
then read num<tmp
echo 0.$num
echo 0.$num>>numf.txt
elif [ $n = 3 ]
then read num<tmp
na=`echo $num|cut -c1`
nb=`echo $num|cut -c2-3`
echo ${na}.${nb}
echo ${na}.${nb}>>numf.txt
elif [ $n = 4 ]
then read num<tmp
na=`echo $num|cut -c1-2`
nb=`echo $num|cut -c3-4`
echo ${na}.${nb}
echo ${na}.${nb}>>numf.txt
elif [ $n = 5 ]
then read num<tmp
na=`echo $num|cut -c1-3`
nb=`echo $num|cut -c4-5`
echo ${na}.${nb}
echo ${na}.${nb}>>numf.txt
elif [ $n = 6 ]
then read num<tmp
na=`echo $num|cut -c1`
nb=`echo $num|cut -c2-4`
nc=`echo $num|cut -c5-6`
echo ${na},${nb}.${nc}
echo ${na},${nb}.${nc}>>numf.txt
elif [ $n = 7 ]
then read num<tmp
na=`echo $num|cut -c1-2`
nb=`echo $num|cut -c3-5`
nc=`echo $num|cut -c6-7`
echo ${na},${nb}.${nc}
echo ${na},${nb}.${nc}>>numf.txt
elif [ $n = 8 ]
then read num<tmp
na=`echo $num|cut -c1-3`
nb=`echo $num|cut -c4-6`
nc=`echo $num|cut -c7-8`
echo ${na},${nb}.${nc}
echo ${na},${nb}.${nc}>>numf.txt
elif [ $n = 9 ]
then read num<tmp
na=`echo $num|cut -c1`
nb=`echo $num|cut -c2-4`
nc=`echo $num|cut -c5-7`
nd=`echo $num|cut -c8-9`
echo ${na},${nb},${nc}.${nd}
echo ${na},${nb},${nc}.${nd}>>numf.txt
elif [ $n = 10 ]
then read num<tmp
na=`echo $num|cut -c1-2`
nb=`echo $num|cut -c3-5`
nc=`echo $num|cut -c6-8`
nd=`echo $num|cut -c9-10`
echo ${na},${nb},${nc}.${nd}
echo ${na},${nb},${nc}.${nd}>>numf.txt
elif [ $n = 11 ]
then read num<tmp
na=`echo $num|cut -c1-3`
nb=`echo $num|cut -c4-6`
nc=`echo $num|cut -c7-9`
nd=`echo $num|cut -c10-11`
echo ${na},${nb},${nc}.${nd}
echo ${na},${nb},${nc}.${nd}>>numf.txt
elif [ $n = 12 ]
then read num<tmp
na=`echo $num|cut -c1`
nb=`echo $num|cut -c2-4`
nc=`echo $num|cut -c5-7`
nd=`echo $num|cut -c8-10`
ne=`echo $num|cut -c11-12`
echo ${na},${nb},${nc},${nd}.${ne}
echo ${na},${nb},${nc},${nd}.${ne}>>numf.txt
elif [ $n = 13 ]
then read num<tmp
na=`echo $num|cut -c1-2`
nb=`echo $num|cut -c3-5`
nc=`echo $num|cut -c6-8`
nd=`echo $num|cut -c9-11`
ne=`echo $num|cut -c12-13`
echo ${na},${nb},${nc},${nd}.${ne}
echo ${na},${nb},${nc},${nd}.${ne}>>numf.txt
elif [ $n = 14 ]
then read num<tmp
na=`echo $num|cut -c1-3`
nb=`echo $num|cut -c4-6`
nc=`echo $num|cut -c7-9`
nd=`echo $num|cut -c10-12`
ne=`echo $num|cut -c13-14`
echo ${na},${nb},${nc},${nd}.${ne}
echo ${na},${nb}.${nc},${nd}.${ne}>>numf.txt
else
:
fi

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
2 [报告]
发表于 2006-04-08 16:10 |只看该作者
。。。太长不敢看,你实现的是什么功能呀? 算术表达式分析并计算吗
比如说在命令行 输入 5 + 6 * 7 - 15 * (5 - 3) 程序可以分析计算出结果。

论坛徽章:
0
3 [报告]
发表于 2006-04-08 19:02 |只看该作者
  1. 。。。太长不敢看,你实现的是什么功能呀? 算术表达式分析并计算吗
  2. 比如说在命令行 输入 5 + 6 * 7 - 15 * (5 - 3) 程序可以分析计算出结果。
复制代码

不是,仅仅是个加法机。
有效的代码不超过5行,其余是格式化出输出的内容。
功能仅仅是:
输入123
输入123


计算结果:246

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-04-09 00:59 |只看该作者
原帖由 xlink 于 2006-4-8 19:02 发表
  1. 。。。太长不敢看,你实现的是什么功能呀? 算术表达式分析并计算吗
  2. 比如说在命令行 输入 5 + 6 * 7 - 15 * (5 - 3) 程序可以分析计算出结果。
复制代码

不是,仅仅是个加法机。
有效的代码不超过5行,其余 ...

  1. cat<<!|awk '{sum+=$1}END{print sum}'
  2. ...
  3. !
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-04-09 02:00 |只看该作者
寂寞烈火,没解决问题。

我用bc去解决计算问题,能说说怎么屏蔽英文字符和符号的输入么?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-04-09 11:34 |只看该作者
原帖由 xlink 于 2006-4-9 02:00 发表
寂寞烈火,没解决问题。

我用bc去解决计算问题,能说说怎么屏蔽英文字符和符号的输入么?

用正则表达式来判断输入

论坛徽章:
0
7 [报告]
发表于 2006-04-09 11:39 |只看该作者
原帖由 寂寞烈火 于 2006-4-9 11:34 发表

用正则表达式来判断输入

我也是这么想的,但是不知道怎么去实现。
能给一个最简单的例子么?
初学者,掌握知识不全面,想去过滤,但是不知道如何实现。

论坛徽章:
0
8 [报告]
发表于 2006-04-09 15:34 |只看该作者
天那!真是神奇

论坛徽章:
0
9 [报告]
发表于 2006-04-09 21:10 |只看该作者
原帖由 dbcat 于 2006-4-9 15:34 发表
天那!真是神奇

何奇之有?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2006-04-09 22:59 |只看该作者
原帖由 xlink 于 2006-4-9 11:39 发表

我也是这么想的,但是不知道怎么去实现。
能给一个最简单的例子么?
初学者,掌握知识不全面,想去过滤,但是不知道如何实现。

http://bbs.chinaunix.net/viewthr ... &extra=page%3D1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP