免费注册 查看新帖 |

Chinaunix

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

[其他] shell技术讨论--实际工作中的应用(获奖名单已公布-2014-4-21) [复制链接]

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
11 [报告]
发表于 2014-03-22 07:20 |只看该作者
好书啊。。。。。。。。。。。
样章的目录很丰富啊

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
12 [报告]
发表于 2014-03-22 07:44 |只看该作者
回复 10# send_linux


做人要诚实.      

论坛徽章:
17
戌狗
日期:2013-09-02 23:43:02技术图书徽章
日期:2014-04-29 14:16:02技术图书徽章
日期:2014-04-24 15:51:26未羊
日期:2014-04-06 22:10:30丑牛
日期:2014-04-06 21:23:29辰龙
日期:2014-04-06 21:20:22处女座
日期:2014-04-06 21:16:18技术图书徽章
日期:2014-04-02 15:10:51金牛座
日期:2014-03-10 22:26:18巨蟹座
日期:2014-02-17 17:12:12技术图书徽章
日期:2014-01-24 10:38:43摩羯座
日期:2013-11-29 18:00:18
13 [报告]
发表于 2014-03-22 11:24 |只看该作者
本帖最后由 jimmy-_-lixw 于 2014-04-09 22:50 编辑

好活动,支持shell话题。



在实际工作中shell能解决什么样的问题?
当然是自动化运维工具在工作中的应用。
目前都是使用shell脚本,根据实际的需求写shell脚本完成批量操作。自动化工具随着生产应用的不断提高也会更加完善的。
使用最多的还是 shell 、python脚本编写,其中配合func工具的使用,操作多台Linux服务器,并做些重复的工作。


话题一,你当初为什么选择了学习shell?

Linux系统命令及Shell脚本是Linux系统中最基础的命令语言。初次接触shell编程的朋友应该先从简单的命令开始,逐渐熟悉shell的用法,首先学习的包括内置的shell命令,掌握了基础后在逐渐深入的学习常用的命令,包括命令的详细参数,常用的参数用途,并且结合详细的实例运行。在测试系统多亲自试验,体会其中的实际操作效果。例如常用的shell命令grep、awk、echo、sed等等,掌握这些常用的shell命令,编写简单的日常任务。并且与实际应用结合,让自己编写脚本实现目标功能。

shell语言是Linux系统中基础语言,有自己独特的语法。但是其实和其他语言一样要熟练使用,最好在实际工作中运用,必须在实际例子中多编写脚本,多写例子脚本,练习的脚本实现一个功能,可有多个方法和途径实现,如果做对比后将不同的实现方法做比较,选择高效的方法,是否有更好的方法来改进。

shell的语法要求比较严格,对于细节、细微的脚本格式要特别注意。例如空格的写法,空格的位置在shell里面有严格要求。还有特殊字符的处理,和编写方式也要区别清楚。

shell脚本在Linux系统中到处可见,例如软件源代码里面的configure脚 本,一般都是用shell编写的。大体功能都是为了编译前的环境检测和构建。 脚本有很多shell技巧东西值得深入学习。



话题二,在你的实际工作中,用shell实现了哪些功能?请给出详细的背景介绍、完整的源代码和注释,这将是我们评选的重要标准之一,如有隐私信息请做无害化处理。

shell脚本使用最多的还是基础的命令。例如grep,awk,echo,sed命令等等,包括学习一些操作系统的常用命令。还有内置shell的参数也是学会shell语言必须掌握的,shell内置命令、
shell里变量替换,灵活的引用对脚本的编写有非常大的帮助。
当打好了这些基础之后。通过自己动手深刻掌握的阶段。
有时候亲自动手编写,比起单纯学习例子shell脚本,学习的效率会更快更有用。你会发现用不同的方法去实现,多次对比会发现实现的思维和最初的方法有什么不同,优点在那,要在实际工作中大量写各种脚本来代替自己的工作,然后经常回头测试自己写的脚本是否有bug,是否有更好的方法来改进。并最好在实际工作中运用,尝试将这些自己熟悉的命令结合起来工作。

提高编写shell的水平,最重要的还是要“多练习”。例如用shell处理自己工作当中的问题,或者解决其他提问shell相关问题,从实际解决问题,不但可以提高自己的水平,有可积累实际应用经验。

shell/perl/python等众多脚本里面哪个更好更强大? 在shell/perl/python等众多脚本里面应该选择哪一个来进行学习?
这几个脚本语言中,用的最多当然是shell。只有在特定的环境,使用合适的脚本就是强大。学好、用好shell对系统管理非常重要。
提高阶段的时候,我们需要了解shell编程的内部实现机制,只有了解了shell编程的内部实现机制,才能够写出有效率的代码。知道它是怎么处理各种命令的,还有是对bash有一定的了解,它的语法原理等等。
学习别人编写shell的脚本,学习例子是怎么实现的,理解其中的原理,然后比较下自己会用什么方法实现,有没有更优的方法。

总结下经验,用简单的话来概括:
1:实际动手操作。 重要的是动手操作,动手解决工作中实际问题。
2:主动学习解决shell问题的能力。自己找资料解决,自主搜索解决问题的能力很重要。
3:多用shell脚本解决实际工作的问题,提高工作效率的同时又高效轻松工作。


论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
14 [报告]
发表于 2014-03-22 11:32 |只看该作者
这本书介绍tcsh吗?

论坛徽章:
0
15 [报告]
发表于 2014-03-22 22:07 |只看该作者
8本书,这次游戏呀。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
16 [报告]
发表于 2014-03-23 01:42 |只看该作者
本帖最后由 yestreenstars 于 2014-03-23 11:51 编辑

回复 1# Shell_HAT

闲着没事,我也来凑凑热闹~

话题一,你当初为什么选择了学习shell?
我写shell的能力一般,有时为了帮人写一个shell还得东查西查才能写出来,学习shell的目的是为了以后方便以后找运维相关的工作,因为shell在处理Linux相关工作时实在是非常强大,它能直接调用系统的命令,完成一些重复性的工作。在shell的众多命令中,我对awk和sed比较熟悉,当初学习它们纯粹是为了兴趣,就算是运维,也很少用到这两个命令吧,所以我学习它们并不是为了以后的工作。

话题二,在你的实际工作中,用shell实现了哪些功能?请给出详细的背景介绍、完整的源代码和注释,这将是我们评选的重要标准之一,如有隐私信息请做无害化处理。
在实际工作中,因为我不是做运维的,所以用到shell脚本的机会不多,我用到的shell脚本都是一些很简单的脚本,比如挂载NFS,短短的几行,不值一提,但我经常在CU上做题,也写过几个比较长的awk脚本,所以我还是以我比较拿手的awk来说吧(awk脚本也算是shell脚本的一种嘛)。
以下是我写过的awk脚本之一:
  1. #!/bin/awk -f

  2. #在脚本的开头将FS设为空字符串,然后将0-99没有规律的数字存入对应下标的数组。
  3. BEGIN {
  4.         FS=""
  5.         a[0]="zero"
  6.         a[1]="one"
  7.         a[2]="two"
  8.         a[3]="three"
  9.         a[4]="four"
  10.         a[5]="five"
  11.         a[6]="six"
  12.         a[7]="seven"
  13.         a[8]="eight"
  14.         a[9]="nine"
  15.         a[10]="ten"
  16.         a[11]="eleven"
  17.         a[12]="twelve"
  18.         a[13]="thirteen"
  19.         a[14]="fourteen"
  20.         a[15]="fifteen"
  21.         a[16]="sixteen"
  22.         a[17]="seventeen"
  23.         a[18]="eighteen"
  24.         a[19]="nineteen"
  25.         a[20]="twenty"
  26.         a[30]="thirty"
  27.         a[40]="forty"
  28.         a[50]="fifty"
  29.         a[60]="sixty"
  30.         a[70]="seventy"
  31.         a[80]="eighty"
  32.         a[90]="ninety"
  33. }

  34. {
  35.         #遍历每一个数字
  36.         for (i=1;i<=NF;i++) {
  37.                 #计算出当前数字所处的位置(以下简称“当前位置”)。
  38.                 t=NF-i+1
  39.                 #初始化k的值,用于判断千分位是否需要增加逗号。
  40.                 k=0
  41.                 #当前数字为0就跳过后面的代码,进入下一个循环,加上i>1的目的是防止跳过对0这个数字的转换。
  42.                 if (!$i&&i>1) continue
  43.                 #对当前位置与3进行取余,如果为0,就表示它是百分位,那我们就将当前数字转化为英文,并在它后面加上“百”的英文,然后判断它的下一个数字是不是0,如果是0,就打印“和下下个数字”对应的英文,并使i的值加2,否则就打印“和”的英文;如果当前位置与3取余的结果是2,就表示当前位置是十分位,然后判断它是1还是其他数字,如果是1,就打印它和它的下一个数字所对应的英文,否则,判断下一个数字是否为0,如果是0就直接打印当前数字乘于10对应的英文,否则就打印当前数字和下一个数字对应的英文,并用连字符连起来,最后i的值自增1;如果取余的结果不是0,也不是2,就直接打印当前数字对应的英文。
  44.                 if (!(t%3)) {
  45.                         printf a[$i]" hundred"
  46.                         if (!$(i+1)) {
  47.                                 if ($(i+2)) printf " and "a[$(i+2)]
  48.                                 i+=2
  49.                         } else printf " and "
  50.                 } else if (t%3==2) {
  51.                         if ($i=="1") {
  52.                                 printf a[$i$(i+1)]
  53.                         } else {
  54.                                 if ($(i+1)) printf a[$i*10]"-"a[$(i+1)];else printf a[$i*10]
  55.                         }
  56.                         i++
  57.                 } else printf a[$i]
  58.                 #重新计算当前位置(因为前面的操作可能改变了i的值)。
  59.                 t=NF-i+1
  60.                 #如果当前位置是4,就打印“千”的英文,依此类推。
  61.                 if (t==4) printf " thousand"
  62.                 if (t==7) printf " million"
  63.                 if (t==10) printf " billion"
  64.                 #如果当前位置与3取余的结果为1,就表示它是千分位,接下来要看看它后面有没有不为0的数字,如果有,k=1,并在循环结束后根据k的值判断是否需要加上逗号。
  65.                 if (t%3==1) {
  66.                         for (j=i+1;j<=NF;j++) if ($j) k=1
  67.                         if (k) printf ","
  68.                 }
  69.         }
  70.         #最后打印换行符。
  71.         print ""
  72. }
复制代码

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
17 [报告]
发表于 2014-03-24 09:11 |只看该作者
回复 4# seesea2517


    看海兄的“打飞机”,我下载玩了,呵呵,很强大

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
18 [报告]
发表于 2014-03-24 09:22 |只看该作者
回复 6# yestreenstars


    见笑了……小打小闹啦。
夏“蛙”这不快到夏天了,就要有蛙了。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
19 [报告]
发表于 2014-03-24 09:23 |只看该作者
回复 17# jeffreyst


    纯属堆语句堆出来的,没多少技术。相比来说,还是那些单行sed 单行awk更有技术的。

论坛徽章:
0
20 [报告]
发表于 2014-03-24 10:08 |只看该作者
好活动,支持一下啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP