shell编程

zmfphoenix 2010-11-19 11:29:38
该shell的作用是计算一个文本文件中各行数字的和(test.txt),分别用脚本中的test1和test2测试出不同结果

test.txt:
1
2
3

test.sh:

#!/bin/bash

sum=0
sum2=0

#test 1
while read line
do
sum=`expr $sum + $line`
done < $1

echo $sum

#test 2
cat $1 | while read line
do
sum2=`expr $sum2 + $line`
done

echo $sum2


测试:
$ ./test.sh test.txt
6
0

请高手解释下?
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
steptodream 2010-11-19
  • 打赏
  • 举报
回复
为了方便你看出while是在管道里执行的 我写成一句你就容易看出了了
cat $1 | while read line; do sum2=`expr $sum2 + $line`; done
steptodream 2010-11-19
  • 打赏
  • 举报
回复
cat $1 | while read line
do
sum2=`expr $sum2 + $line`
done

echo $sum2

这里的while的计算是在管道里进行的 sum2等变量的计算值只在管道里有效 执行完了就灰飞烟灭了!
所以当while执行完之后 再echo $sum2 当然是0啦!
freetstar 2010-11-19
  • 打赏
  • 举报
回复
这有啥解释的。。
louyong0571 2010-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 steptodream 的回复:]
为了方便你看出while是在管道里执行的 我写成一句你就容易看出了了
cat $1 | while read line; do sum2=`expr $sum2 + $line`; done
[/Quote]

顿悟了,3q

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧