免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

ChinaUnix技术实践之四----Shell编程大赛! [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-05-16 17:10 |只看该作者
回复 2# xiaopan3322


    你这让别人怎么答嘛。。。。皑皑。。。。看来骗个奖品的愿望落空了。。。。。。

论坛徽章:
0
22 [报告]
发表于 2011-05-16 17:18 |只看该作者
本帖最后由 gxj241040128 于 2011-05-17 12:24 编辑

占座

1, du -sh ./*/  
额外算出大小

2,
sed -i
inode 发生改变,利用临时文件,并将临时文件重定向到一个新的和原文件同名的文件中
ed
inode未生改变,直接在原文件上编辑保存
sed -i修改时占用的空间是ed的两倍

论坛徽章:
0
23 [报告]
发表于 2011-05-16 19:26 |只看该作者
大家努力做, 我只看 学习下对同一问题各种不同的解法

论坛徽章:
0
24 [报告]
发表于 2011-05-16 20:53 |只看该作者
本帖最后由 sosodream 于 2011-05-16 22:35 编辑

问题1:
用最简洁的命令列出当前目录下的一级子目录,可以不包含隐藏目录(目录名以.开头的目录)

最简洁的,alias算不,搞个命令就是,嘿嘿
前几天群里在讨论prune,就用find写个的试试:
find * -type d -prune -print
不喜欢*
就用
find ! -path . -type d -prune -print


问题2:
GNU sed 提供了-i选项,为什么有人说sed -i 并不象 ed 一样真正的编辑文件?(提示:观察文件改变前后的inode)

以下是info sed 原文:
`-i[SUFFIX]'
`--in-place[=SUFFIX]'
     This option specifies that files are to be edited in-place.  GNU
     `sed' does this by creating a temporary file and sending output to
     this file rather than to the standard output.(1).


如下实验,原inode 661028 的文件处理完后变成了661027 ,已经不是原来inode的文件了
采用文件备份-ibk,可以看到原来的文件被rename了,创建了一个与原来名字一样的新文件做为输出结果
同时gnu也提供了-c选顶,临时文件采用copy的方式而不是rename的方式,这种方式下保留了原来的inode文件
不管有没有bk,或-c,gnu info文档自己都说了,这个-i选项的功能是通过临时文件完成的,并不是直接的在原文件上进行编辑
  1. [root@rac0 tmp]# seq 5 >sed1
  2. [root@rac0 tmp]# ls -li sed1
  3. 661028 -rw-r--r-- 1 root root 10 04-01 00:19 sed1
  4. [root@rac0 tmp]# sed -i 'n' sed1
  5. [root@rac0 tmp]# ls -li sed1   
  6. 661027 -rw-r--r-- 1 root root 10 04-01 00:19 sed1
  7. [root@rac0 tmp]# sed -ibk 'n' sed1
  8. [root@rac0 tmp]# ls -li sed1{,bk}
  9. 661028 -rw-r--r-- 1 root root 10 04-01 00:19 sed1
  10. 661027 -rw-r--r-- 1 root root 10 04-01 00:19 sed1bk
  11. [root@rac0 tmp]# sed -c -ibk2  'n' sed1
  12. [root@rac0 tmp]# ls -li sed1{,bk,bk2}  
  13. 661028 -rw-r--r-- 1 root root 10 04-01 00:21 sed1
  14. 661027 -rw-r--r-- 1 root root 10 04-01 00:19 sed1bk
  15. 661030 -rw-r--r-- 1 root root 10 04-01 00:21 sed1bk2
复制代码
-

问题3:
用shell写一个cgi脚本,提供一个简单的webmail介面,将本地的一个文件通过web服务器发送到指定的邮箱

不懂


问题4:
awk -F'' 与 awk -F '' 一样吗?

不一样,
题意是'',即设置field-separator为空,
awk的-F的选项正确的完整的格式是: -F fs
awk -F'' 经shell解析后只剩下awk -F,会把后边的一部分内容当成fs,导致命令不正确
awk -F ''  这里''在shell解析后保留了下来做为fs


问题5:
这条语句有什么作用?
sed -if /script/scr.sedcc test.txt

这题具有欺骗性,要求对-i选顶有充分的认识
-i选项是原文件直接更改,-f选顶是调用脚本文件
但-if,是-i选顶的格式,f只是一种文件备份后缀,并不是-i + -f
所以这句的结果是,备份文件(后缀f),同时执行命令“/script/scr.sedcc ”(并不是脚本)
接下来是这段命令的分析:
adress采用正则:/script/匹配"script"字符串
command部分为scr.sedcc,这个,s是最常用的替换命令,但格式是s///,而因为s///的格式是请允许用其他字符替代/的,这里便是用字符‘c‘替代/
所以这个替换命令的意思是:当行里匹配“script“字符串时,删除掉行里的r.sed字符串,其中.是元字符

结论:这段命令的做用:文件备份(后缀f)之后+原文件将删除匹配“script“字符串的行里的r.sed字符串,其中.是元字符,一行只删一次
  1. [root@rac_2 ~]# echo scriptrased| sed  /script/scr.sedcc   
  2. script
复制代码
另,若要-i+-f,需分开:sed -i -f /script/scr.sedcc test.txt


问题6:
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

是如何执行的?与"#!/usr/local/bin/tclsh"相比,它有什么优点?


不懂tclsh
exec的作用是执行命令替代当前进程环境
从上边的命令格式来看,至少有一点好处是:不用指定绝对路径,嘿嘿


问题7:
#!/bin/sed -f"  shebang 后可有其它字符吗?为什么?

apue里解释器文件的起始行形式是:
#! pathname [optional-argment]
在!与pathname之前可以任意空格(不超过exec系统函数最大长度就是了)~~~
man bash里也只提到上边的格式
至于其他字符。。。没用过,不晓得能不能。


问题8:
GNU awk的$1=$1到底有什么作用?$0=$0呢?

$1=$1
这里赋值操作从右到左解析,右操作数引用$1没啥好讲的,左操作数引用触发了域赋值
域赋值的一个隐含动作,是为引起$0的重构的,即在下次$0引用时,重构为$1OFS$2OFS....,OFS为输出分隔符

$0=$0
同样赋值操作从右到左解析,右操作数引用$0,这里要注意是否引发重构,右操作数$0对记录重新赋值,
记录赋值的一个隐含动作,就是重新分割记录,即在下次$n(n>0)引用或NF引用时,重新按FS进行解析

讲得比较泛,具体的,可以看刚发的一篇blog:http://blog.csdn.net/sosodream/archive/2011/05/16/6425192.aspx



问题9:
写一个shell脚本,输出CU现有的版面和相应版主,并统计有多少个版面及多少个版主。

echo :CU现有的版面和相应版主,并统计有多少个版面及多少个版主。



问题10:
人机五子棋。原始规则(无禁手),最好加上标准规则,三手交换(即黑下第二手之后白可以提出交换),五手两打,黑三三禁手,黑四四禁手,黑长连禁手(超过5个子相连),逢五无禁手。白无禁手,长连也算胜。关键在于人机对下。

浮云,飘啊飘

论坛徽章:
0
25 [报告]
发表于 2011-05-16 21:34 |只看该作者
回复 25# sosodream


    向楼上的第五题的精彩回答致敬……真的……
    看来大家都想当然了……
    这条命令确实是对test.txt的文件的一个备份,备份后的结果是test.txtf

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
26 [报告]
发表于 2011-05-16 21:41 |只看该作者
回复  sosodream


    向楼上的第五题的精彩回答致敬……真的……
    看来大家都想当然了……
     ...
xiaopan3322 发表于 2011-05-16 21:34

为啥不向我致敬
这道题一看就有问题,不可能那么简单

论坛徽章:
0
27 [报告]
发表于 2011-05-16 21:49 |只看该作者
回复 27# ziyunfei


    我也向你致敬……
    主要可能因为我白天看你的答案的时候,你还没更新上去吧,就直接看到后面的了,要不然,我肯定先向你致敬啊……

论坛徽章:
0
28 [报告]
发表于 2011-05-16 22:22 |只看该作者
本帖最后由 sosodream 于 2011-05-16 22:28 编辑

回复 26# xiaopan3322


    多谢,{:2_172:}

刚才回帖的时候其实是有疑问的,刚去吃了个晚饭,休息了下,回头又看到了没说完整的,刚补充了下
其实第八道题答题答得更全了,就在链接里,特意写了个blog,发过来怕补骂灌水呵,比较长

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
29 [报告]
发表于 2011-05-16 22:41 |只看该作者
回复  xiaopan3322


    多谢,

刚才回帖的时候其实是有疑问的,刚去吃了个晚饭,休息了 ...
sosodream 发表于 2011-05-16 22:22



    呵呵,够敬业啊,这么晚了才吃饭,辛苦!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
30 [报告]
发表于 2011-05-16 22:56 |只看该作者
汗,还有很多不懂。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP