免费注册 查看新帖 |

Chinaunix

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

请教大家一个非常简单的关于计数器的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-12 11:54 |只看该作者 |倒序浏览
如题,现在是这样,我想从一个文本文件中读出N行的数据,然后执行rm删除相应的文件,可是如果只执行的话我看不到执行时的效果,因此想在循环中加一个计数器来时时的打出来执行了多少行的操作,我的程序如下:

  1. x=0
  2. while read LINE
  3. do
  4.         find /www/htdocs/abc -type f -name $LINE -exec rm -f {} \;
  5.         x=$(($x+1))
  6.         echo "$x \n"
  7. done <$1
复制代码

如果是以上这种代码的话,执行的时候会报错,报错信息是:
$sh rf.sh catalogue.txt
rf.sh: syntax error at line 5: `x=$' unexpected
说我有语法错,可我不知道怎么解决,如果把程序改成这样:

  1. x=0
  2. while read LINE
  3. do
  4.         find /www/htdocs/abc -type f -name $LINE -exec rm -f {} \;
  5.         x=$x+1
  6.         echo "$x \n"
  7. done <$1
复制代码

则输出的结果也不是我想要的,而是:
0+1

0+1+1

0+1+1+1

0+1+1+1+1

0+1+1+1+1+1

0+1+1+1+1+1+1

…… ……
会一直这样的走下去。

我第一次写Shell,请教高手这个问题怎么解决,谢谢。

论坛徽章:
0
2 [报告]
发表于 2004-08-12 12:24 |只看该作者

请教大家一个非常简单的关于计数器的问题。

x=$(($x+1)) ----> ((x+=1))

论坛徽章:
0
3 [报告]
发表于 2004-08-12 13:07 |只看该作者

请教大家一个非常简单的关于计数器的问题。

[quote]原帖由 "bjgirl"]x=$(($x+1)) ----> ((x+=1))[/quote 发表:

不行呀,这种方法我起先也试过,按照你的方法改了执行后显示为:
$sh rf.sh catalogue.txt
rf.sh: x+=1: not found
0
rf.sh: x+=1: not found
0
rf.sh: x+=1: not found
0
rf.sh: x+=1: not found
0
rf.sh: x+=1: not found
0
rf.sh: x+=1: not found
0
rf.sh: x+=1: not found
0

请指点。

论坛徽章:
0
4 [报告]
发表于 2004-08-12 13:16 |只看该作者

请教大家一个非常简单的关于计数器的问题。

bash/ksh都支持(())的操作,比如:

  1. $x=0
  2. $while((x<11));do echo ok;((x+=1));echo $x;done
  3. ok
  4. 1
  5. ok
  6. 2
  7. ok
  8. 3
  9. ok
  10. 4
  11. ok
  12. 5
  13. ok
  14. 6
  15. ok
  16. 7
  17. ok
  18. 8
  19. ok
  20. 9
  21. ok
  22. 10
  23. ok
  24. 11
复制代码

是不是跟你用的shell有关

论坛徽章:
0
5 [报告]
发表于 2004-08-12 13:25 |只看该作者

请教大家一个非常简单的关于计数器的问题。

呵呵,我用的就是bash,好,谢谢你了,我再想别的办法吧。

论坛徽章:
0
6 [报告]
发表于 2004-08-12 13:36 |只看该作者

请教大家一个非常简单的关于计数器的问题。

换成 let x+=1

论坛徽章:
0
7 [报告]
发表于 2004-08-12 15:46 |只看该作者

请教大家一个非常简单的关于计数器的问题。

(())是不是就是运算呀?

论坛徽章:
0
8 [报告]
发表于 2004-08-12 17:32 |只看该作者

请教大家一个非常简单的关于计数器的问题。

Mercury_cn 兄谢谢你的回答,可是照你说的也不成。
出现:
rf.sh: let: not found
0
rf.sh: let: not found
0

论坛徽章:
0
9 [报告]
发表于 2004-08-12 18:10 |只看该作者

请教大家一个非常简单的关于计数器的问题。

let是shell的内建命令,如果连这个let都没有的话,看来你的shell有问题!

论坛徽章:
0
10 [报告]
发表于 2004-08-12 18:44 |只看该作者

请教大家一个非常简单的关于计数器的问题。

谢谢帅哥靓妹们的回答,环境不是我搭建的,而且我也不是Shell程序员,我只是想用这个来完成一件事,结果来惹来这么多是非,呵呵。
其实我想打印出来就是给自己一个标识,让自己能看到执行程序的进度,现在我不打数字了,我写的是:rm $LINE,这样也能看到进度,我就是确认程序别跑死就成,再次谢谢各位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP