免费注册 查看新帖 |

Chinaunix

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

求助~大家帮忙看看这样写可以么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-22 15:30 |只看该作者 |倒序浏览
我现在要实现的是查看某些文件夹下文件的个数是否超过指定值。
我设计的想法是
把监控的文件夹目录名和文件个数都存放在同一个文本文档中
比如test.txt中
/home                         10
/usr                             20
/tmp                            30
然后
file=`cat test.txt | awk '{print $1}'`
num=`cat test.txt | awk '{print $2}'`
while read file
do
num_real=ls -l $file | wc -l | awk '{print $1}'
result=`echo "$num_real-$num" | bc -l`
if [ $result -ge 0 ]
then
echo "$file need to check"
fi
done

脚本没有测试
只是不知道这种设计思路对不对啊?
而且自己觉得有个地方有问题。就是变量赋值传递那里。。。
num_real直接被赋值了。可以把它的值作为变量么?
希望大家帮忙解答一下困惑。。。
同时也希望有人提出更好更简单的方法
我刚学shell,很多东西都是东拼西凑,到处问,觉得也许能用就写上去的。
谢谢大家帮助~

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2006-06-22 15:45 |只看该作者
awk '{cmd="ls "$1"|wc -l";cmd|getline a;close(cmd);if (a>$2)print $1" need to check"}' test.txt

awk会自动处理文件的每一行,不用在外部写循环

论坛徽章:
0
3 [报告]
发表于 2006-06-22 15:57 |只看该作者
汗一个,果然够简洁!佩服的说。
我刚刚测试了一下自己写的
运行到read的时候就停住了
好像没有把file作为变量传递进去。。。
waker的脚本也测试了一下
提示是Syntax Error The sourec line is 1.
你的脚本虽然写的简单。。。但是我刚学。。。
是不是cmd作为一个函数了?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2006-06-22 16:15 |只看该作者
用nawk或gawk

论坛徽章:
0
5 [报告]
发表于 2006-06-22 16:20 |只看该作者
换成nawk还是原来一样的提示The source line is 1.
换成gawk 提示not found
.......

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
6 [报告]
发表于 2006-06-22 16:36 |只看该作者
我只有GNU和aix的平台测试,不太清楚发生了什么

论坛徽章:
0
7 [报告]
发表于 2006-06-22 16:43 |只看该作者
我用的也是AIX平台测试的。
如果这样不行的话。有没有其他的方法呢?
谢谢谢谢

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2006-06-22 16:49 |只看该作者
  1. while read file num
  2. do
  3. num_real=$(ls  $file | wc -l )
  4. [ "$num_real" -ge "$num" ]&& echo "$file need to check"
  5. done <test.txt
复制代码

论坛徽章:
0
9 [报告]
发表于 2006-06-22 17:02 |只看该作者
谢谢waker
用while read file num
这样可以直接读取文本中两个域中的内容直接作为变量么?
测试机被别人强占了:(
现在无法测试
谢谢你哈~你写的脚本都好简洁,佩服的说~

论坛徽章:
0
10 [报告]
发表于 2006-06-27 14:13 |只看该作者
问题已解决
谢谢
不过还有个小问题
就是如果我要在/home目录下面
如果我想执行/usr/test/下面的一个test.sh的脚本
可以直接调用么?
怎么调用?
. /usr/test/test.sh
这样么?

[ 本帖最后由 searun 于 2006-6-27 14:17 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP