LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1328|回复: 12

求教用shell编写简单数列求和问题

[复制链接]
发表于 2004-5-26 20:10:32 | 显示全部楼层 |阅读模式
我想用shell写一个程序sum,可以在命令行接收一列数字比如:
$sum 20 50 100
然后显示出计算结果,需要用while或者for until,但是现在我不是很清楚应该以什么为循环条件,能否给一个例子?
谢谢!!
发表于 2004-5-26 20:14:17 | 显示全部楼层
  1. echo $@|sed 's/ /+/g'|bc
复制代码
 楼主| 发表于 2004-5-26 20:31:24 | 显示全部楼层
可以请javalee解释一下吗?实在不是很懂,或者在哪里可以查到相关参数?
谢谢!!
发表于 2004-5-26 20:38:59 | 显示全部楼层
最初由 CDF 发表
可以请javalee解释一下吗?实在不是很懂,或者在哪里可以查到相关参数?
谢谢!!

$@是所有的命令行参数
sed 's/ /+/g' 是吧各个命令行的参数中间的空格替换成加号+
bc是一个计算器程序,看起来是\这样:

  1. /home/lee#cat sum
  2. #!/bin/ksh
  3. echo $@|sed 's/ /+/g'|bc
  4. /home/lee#ksh -x sum 1 2 3
  5. + echo 1 2 3
  6. + sed s/ /+/g
  7. + bc
  8. 6

复制代码

刚刚接触shell的兄弟,可先看入门教程:
http://www.linuxsir.cn/bbs/showthread.php?threadid=28945
 楼主| 发表于 2004-5-26 20:51:51 | 显示全部楼层
非常感谢javalee!!那篇文章正好在看,学到用sed的方法,谢谢!
只是我想用循环来完成这个问题,因为才接触shell,所以对于这个题目使用循环有点不太明白的地方:
就是因为数字的多少并不知道,如果从命令行得到参数就应该在脚本中使用read来获取输入(我现在只知道这个),可是怎才能接受不确定的数字个数呢?不知道能不能用数组,要是不能得话,以什么变量来作为循环条件?从而判断累加结束?
再次感谢!!
发表于 2004-5-26 21:00:40 | 显示全部楼层
$@就是包含了所有数字的个数呀,因为他储存了来自命令行的所有参数
方法很多,用循环也可以,但是没有必要啦!
还可这样:
  1. /home/lee#cat <<! |awk '{sum+=$0}END{print sum}'
  2. > 2
  3. > 3
  4. > 4
  5. > !
  6. 9
复制代码
 楼主| 发表于 2004-5-26 21:05:13 | 显示全部楼层
但是的确很想知道比如用while怎么写这个程序^_^,虽然麻烦了很多,因为不会,所以放不下。
谢谢!!^_^
发表于 2004-5-26 21:19:40 | 显示全部楼层
  1. #!/bin/bash

  2. sum=0
  3. while [ $# -gt 0 ]; do
  4.         ((sum += $1))
  5.         shift
  6. done
  7. echo "sum = $sum"
复制代码
发表于 2004-5-26 21:21:19 | 显示全部楼层
仅为示意,不很严格:p
 楼主| 发表于 2004-5-26 21:28:14 | 显示全部楼层
最初由 dearvoid 发表
  1. #!/bin/bash

  2. sum=0
  3. while [ $# -gt 0 ]; do
  4.         ((sum += $1))
  5.         shift
  6. done
  7. echo "sum = $sum"
复制代码

谢谢dearvoid,可以把-gt 后面的0换成两个空格来判断输入结束吗?

如果输入
sum 50 60 70
怎样才能显示:
50 1 60 1 70 5 180

中间的1 1 5 是怎么回事?
谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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