免费注册 查看新帖 |

Chinaunix

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

输出结果不给力呀 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-01 18:53 |只看该作者 |倒序浏览
本程序目的是统计一个文件夹下所有普通文件的总行数
代码如下:
  1. #!/bin/bash

  2. if [ "$#" -ne 1 ]
  3. then
  4.         echo "Usage: wcfile directory"
  5.         exit 1
  6. fi

  7. if [ ! -d $1 ]
  8. then
  9.         echo "$1 no such a directory"
  10.         exit 1
  11. fi

  12. linenumber=0

  13. ls $1 | while read line
  14. do
  15.         if [ -f $line ]
  16.         then
  17.                 linenumber=$(($linenumber+$(cat $line | wc -l)))
  18.         fi
  19. done

  20. echo $linenumber
复制代码
最后输出结果不给力呀 得0

sh -x 输出结果如下:
  1. [root@localhost 101201]# sh -x wcfile ./
  2. + '[' 1 -ne 1 ']'
  3. + '[' '!' -d ./ ']'
  4. + linenumber=0
  5. + ls ./
  6. + read line
  7. + '[' -f catfile ']'
  8. ++ cat catfile
  9. ++ wc -l
  10. + linenumber=12
  11. + read line
  12. + '[' -f cpfile ']'
  13. ++ cat cpfile
  14. ++ wc -l
  15. + linenumber=36
  16. + read line
  17. + '[' -f filename ']'
  18. ++ cat filename
  19. ++ wc -l
  20. + linenumber=76
  21. + read line
  22. + '[' -f look80 ']'
  23. ++ cat look80
  24. ++ wc -l
  25. + linenumber=89
  26. + read line
  27. + '[' -f mymkdir ']'
  28. ++ cat mymkdir
  29. ++ wc -l
  30. + linenumber=96
  31. + read line
  32. + '[' -f theurl ']'
  33. ++ cat theurl
  34. ++ wc -l
  35. + linenumber=104
  36. + read line
  37. + '[' -f tixing ']'
  38. ++ cat tixing
  39. ++ wc -l
  40. + linenumber=121
  41. + read line
  42. + '[' -f tongjiurl ']'
  43. ++ cat tongjiurl
  44. ++ wc -l
  45. + linenumber=140
  46. + read line
  47. + '[' -f tongjiuser ']'
  48. ++ cat tongjiuser
  49. ++ wc -l
  50. + linenumber=153
  51. + read line
  52. + '[' -f wcfile ']'
  53. ++ cat wcfile
  54. ++ wc -l
  55. + linenumber=178
  56. + read line
  57. + echo 0
  58. 0
  59. [root@localhost 101201]#
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-12-01 20:00 |只看该作者
find directory/ -type f -exec wc -l {} \;|awk '{sum += $1;}END{print sum}'

论坛徽章:
0
3 [报告]
发表于 2010-12-01 20:02 |只看该作者
回复 2# bud_adamas


    我了个擦  大哥说简单点  我不懂啊

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2010-12-01 20:03 |只看该作者
本程序目的是统计一个文件夹下所有普通文件的总行数
代码如下:最后输出结果不给力呀 得0

sh -x 输出结 ...
mingo2010 发表于 2010-12-01 18:53



#ls $1 | while read line
for line in `ls $1`

论坛徽章:
0
5 [报告]
发表于 2010-12-01 20:07 |只看该作者
总结一下  4楼结果可行  2楼结果没看懂(我新手)

仔细看了一下read,是read用法错了,虽然这么用read也能读到数据,不过read的标准用法的从标准输入或者从输入重定向中获得数据,所以这么写有问题也难怪

如果谁有更好的见解  欢迎拍砖

论坛徽章:
0
6 [报告]
发表于 2010-12-01 20:59 |只看该作者
又百度了一圈
得出个结论 是shell环境不同引起的,据说这种ls $1 | while read line这种方式在ksh中可用,但在bash中就不好使了,杯勒个具了

论坛徽章:
0
7 [报告]
发表于 2010-12-02 00:19 |只看该作者
# wc -l $(find directory/ -type )

论坛徽章:
0
8 [报告]
发表于 2010-12-02 10:08 |只看该作者
本帖最后由 jiaminqiang 于 2010-12-02 10:33 编辑

回复 6# mingo2010

bash下没问题啊

    [root@test shell]# env  $SHELL
[root@test shell]# echo $SHELL
/bin/bash
[root@test shell]# cat test
ls $1 |  while read line
do
    echo  $line
done
[root@test shell]# sh test /
bin
boot
data
dev
etc
home
lib
lost+found
media
misc
mnt
net
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var


应该是$linenumber 这个变量 没有带到循环外

cat ./* | wc -l  素有文件的总行数

论坛徽章:
0
9 [报告]
发表于 2010-12-02 10:25 |只看该作者
回复 8# jiaminqiang


    恩  $line能读,这个没问题。说的就是$linenumber这个变量不能带到外面去,还是shell的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP