免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 115684 | 回复: 112

[游戏娱乐] 2012年ChinaUnix社区Shell编程大赛 [结束评审 公布部分答案](获奖名单已公布-5-24) [复制链接]

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
发表于 2012-03-06 21:21 |显示全部楼层
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-3747243-1-1.html

部分参考答案:

第七二楼:http://bbs.chinaunix.net/forum.p ... 401&fromuid=7944836

参与者得分排名:

ID:waker                    93
ID:iamhere2007          66
ID:seesea2517           63
ID:xinyv                     61
ID:Dreamhat              58
ID:ywlscpl                  53
ID:jiejie455                50
ID:hq8318                 49
ID:scuhy                    40
ID:jiayanfu                 39
ID:lkk2003rty             38
ID:xiaopan3322          35
ID:chnliyong               29
ID:zhaopingzi             16

——————————————————————————2012年4月9日——————————————————————————————————

大赛简介:

Shell版块是ChinaUnix社区内讨论比较热烈的技术版块之一。2011年,我们已经成功举办了Shell、PHP、C/C++和Perl的编程大赛,今天我们应版面用户的需求,再次举办2012年ChinaUnix社区Shell编程大赛,发挥您的技术之长,赢取我们为优胜者准备的丰富奖品,欢迎大家踊跃参加!

第一期:PHP编程大赛 http://bbs.chinaunix.net/thread-1788191-1-1.html
第二期:C/C++编程大赛http://bbs.chinaunix.net/thread-1820953-1-1.html
第三期:Perl编程大赛http://bbs.chinaunix.net/thread-1860259-1-1.html
第四期:shell编程大赛http://bbs.chinaunix.net/thread-2319120-1-1.html

参赛要求:参与活动必须是chinaunix社区的注册会员

点击注册: http://sso.chinaunix.net/Register

大赛日程:

参赛时间:2012.03.6~2012.03.25

评选时间:2012.03.26~2012.04.6

结果公布:2012.04.10

奖项设置:


一等奖:3名,最先正确完成10道题的三名用户,赠送微软IE3.0复刻版鼠标一个。
二等奖:5名,获奖者为最先正确完成8道试题的五名用户,赠送特别定制版ChinaUnix定制版坎肩一件。
三等奖:10名,获奖者为最先正确完成6道试题的十名用户,赠送图书一本,图书目录见附录。
图书目录.txt (2.14 KB, 下载次数: 403)

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
发表于 2012-03-06 21:27 |显示全部楼层

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
发表于 2012-03-06 21:30 |显示全部楼层
本帖最后由 zhaopingzi 于 2012-03-08 00:13 编辑

  1. 定制版坎肩很好看,我想买一件;以我的水平通过比赛获得是没戏了
复制代码
1.

  1.   没看出有啥区别来
  2.   
复制代码
2:

  1. 实现功能一样
复制代码
4:这个算对吗,能得到答案,哈哈:

  1. $ echo aaabcccaaabbbccc|sed 's/aaa//2;s/ccc//2'
  2. aaabcccbbb
复制代码
7:写得比较龌蹉,但是能得到正确答案

  1. $cat shell.sh
  2. #!/bin/bash
  3. tail=`grep -n "c" file|tail -1|awk -F: '{print $1}'`
  4. head=`grep -n "a" file|head -1|awk -F: '{print $1}'`
  5. sed -n "${head},${tail}p" file

  6. $sh shell.sh
  7. a
  8. b
  9. c
  10. d
  11. c
复制代码
8:

  1. #cat shell.sh
  2. #!/bin/bash
  3. var=`seq 9|paste -s -d ""`
  4. for i in `seq 8`
  5.    do
  6.      echo $var|cut -c$i-$((i+2))
  7.    done
  8. #sh shell.sh
  9. 123
  10. 234
  11. 345
  12. 456
  13. 567
  14. 678
  15. 789
  16. 89
复制代码

论坛徽章:
0
发表于 2012-03-06 21:34 |显示全部楼层
本帖最后由 xiaopan3322 于 2012-03-08 13:54 编辑

第1题:
有区别:

  1. 1): 以空白字符为FS,即包括:空格,制表符等,换言之,只要遇到空白字符,不管多少,都将作为FS
  2. 2): 以[ ]限定了空白字符的形态和个数,形态为空格(不包括其他空白符,如制表符),个数为1
  3. 3): 以多个空格作为FS
复制代码
第2题:
一样

第3题:
这题差点看错,原来有陷阱
  1. echo {a..c}{1..3} {e..f}{1..3}
复制代码
  1. echo {a,b,c,e,f}{1..3}
复制代码

第4题:

第五、六题:
这里涉及到Shell解释器的解释过程。
这里涉及的是Word SplittingShell Expansion
放到这里,就是Weak Quotes(双引号)和command substitution(命令置换)的作用:
未加双引号:

  1. 首先,shell会对扩展结果(命令置换是Shell扩展的一种),按照$IFS(包括<space><tab><newline>)进行单词分割,这里<newline>和多个<space>输出成了单个空格就是Word Splitting的结果。
  2. 其次,命令置换会将命令的输出按照"字面意思(即不会被转义)"转换:因此反斜线依旧是反斜线。
复制代码
加了双引号:
  1. 不会发生Word Splitting,作用就成了:输出urfile本身到标准输出!
复制代码

第七题:
  1. sed -n '/a/,/c/{/c/!p};/c/,/c/p' file
复制代码

论坛徽章:
3
CU大牛徽章
日期:2013-05-20 10:43:41CU大牛徽章
日期:2013-05-20 10:44:06CU大牛徽章
日期:2013-05-20 10:44:16
发表于 2012-03-06 21:41 |显示全部楼层
有机会也参加一下,嘿嘿

论坛徽章:
28
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:37
发表于 2012-03-06 22:23 |显示全部楼层
图书目录肿么木有啦?

论坛徽章:
0
发表于 2012-03-07 00:01 |显示全部楼层
本帖最后由 lkk2003rty 于 2012-03-21 16:54 编辑

1

  1. awk -F ' '   一个字符作为一个域
  2. 例如 super@freemind:~$ echo "12345" | awk -F '' '{print $1,NF}'
  3. 1 5

  4. awk -F '[ ]'  一个空格作为分隔符
  5. 例如 super@freemind:~$ echo "1 2  345" | awk -F '[ ]' '{print $3,NF}'
  6. 4
  7. 第三个域是空字符串即‘’
  8. awk -F '[ ]+'  一个或多个空格作为分隔符
  9. 例如 super@freemind:~$ echo "1 2  345" | awk -F '[ ]+' '{print $3,NF}'
  10. 345 3

  11.   
复制代码
2

  1. 二者一样.
  2. 输出最先匹配到foo1的行到离这行最近的匹配到foo2的行的内容,如果这行之后的所有行都不匹配foo2则输出这行之后的所有行(以上输出都包含匹配的行)。如果没有任何一行匹配到foo1则没有任何输出。如果有类似如下形式的多组,则将多组输出
  3. 匹配foo1的行
  4. 。。。。       多行既不匹配foo1也不匹配foo2
  5. 匹配foo2的行
  6. 例如

  7. super@freemind:~$ echo -e "foo1\nfoo2\nfoo2foo131232\nfoo2\nfoo2" | sed -n  '/foo1/,/foo2/p'
  8. foo1
  9. foo2
  10. foo2foo131232
  11. foo2
复制代码
3

  1. : | gawk 'END{split("abcef123",a,"");for(i=1;i<256;i++){t="";for(j=0;j<8;j++)if(and(1,rshift(i,j))==1)t=t""a[j+1];print t }}'
复制代码
4

  1. BEGIN{FS=""}
  2. {
  3.     pat[1]=$1;
  4.     for(i=2;i<=NF;i++)
  5.     {
  6.         if($i!=$1)
  7.         {
  8.             t=$i;
  9.             k=$i;
  10.             break;
  11.         }
  12.         pat[1]=pat[1]""$i;
  13.     }
  14.     s[pat[1]]=1;
  15.     j=2;
  16.     k="";
  17.     for(;i<=NF;i++)
  18.     {
  19.         if($i!=t)
  20.         {
  21.             if(!(k in s))
  22.             {
  23.                 pat[j++]=k;
  24.                 s[k]=1;
  25.             }
  26.             t=$i;
  27.             k="";
  28.         }
  29.         k=k""$i;
  30.     }   
  31. }
  32. END{
  33.     t="";
  34.     for(i=1;i<=length(pat);i++)
  35.         t=t""pat[i];
  36.     print t;
  37. }

  38. 使用方法 echo  'aaabcccaaabbbccc' | awk -f 4.awk
复制代码
7

  1. super@freemind:~$ echo '1
  2. > 2
  3. > 3
  4. > a
  5. > b
  6. > c
  7. > d
  8. > c
  9. > e' | awk '/^a/{b=1}b{a=a"\n"$0;}END{sub(/[^c]*$/,"",a);print a}'

  10. a
  11. b
  12. c
  13. d
  14. c
复制代码
8
  1. super@freemind:~$ seq 9  | sed -n -e '1{N;N;ba;};x;G;ba;:a s/\n/ /g;p;s/[0-9] //;x;${x;p;}'
  2. 1 2 3
  3. 2 3 4
  4. 3 4 5
  5. 4 5 6
  6. 5 6 7
  7. 6 7 8
  8. 7 8 9
  9. 8 9


复制代码
9

  1. #!/bin/bash
  2. pass=$(mkpasswd -l 8 -d 1 -c 1 -C 1)
  3. echo "${pass}"
  4. log_file=pwd_$(date +%Y-%m-%d).log
  5. while read ip
  6.     do
  7.     ssh root@${ip} passwd --stdin oracle<<< "${pass}"
  8.     if [ $? -eq 0 ]
  9.         then
  10.         echo -e "$(date "+%Y-%m-%d %H:%M:%S")\t${ip}\t${pass}\tok" >> ${log_file}
  11.     else
  12.         echo -e "$(date "+%Y-%m-%d %H:%M:%S")\t${ip}\t${pass}\tfail" >> ${log_file}
  13.     fi
  14. done<ip_file

复制代码
ip_file格式为每行为要改密码机子的ip

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2012-03-07 02:26 |显示全部楼层
本帖最后由 yinyuemi 于 2012-03-07 06:11 编辑

鼠标相当不错啊

论坛徽章:
0
发表于 2012-03-07 09:00 |显示全部楼层
本帖最后由 crulat 于 2012-03-11 18:12 编辑

支持这个活动!

论坛徽章:
92
CU大牛徽章
日期:2013-11-29 22:26:36CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2014-02-21 14:22:02CU大牛徽章
日期:2014-02-21 14:22:07CU大牛徽章
日期:2014-02-21 14:22:09CU大牛徽章
日期:2015-02-28 17:45:342015元宵节徽章
日期:2015-03-06 16:56:38羊年新春福章
日期:2015-02-28 17:42:522015七夕节徽章
日期:2015-09-14 09:24:55CU大牛徽章
日期:2014-02-21 14:22:44CU大牛徽章
日期:2015-02-28 17:48:12CU大牛徽章
日期:2015-02-28 17:47:58
发表于 2012-03-07 11:35 |显示全部楼层
今天没空……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP