免费注册 查看新帖 |

Chinaunix

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

[其他] shell技术讨论--如何快速入门和提高(获奖名单已公布-2014-2-17) [复制链接]

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
11 [报告]
发表于 2014-01-22 14:02 |只看该作者
话题一,初学者怎样才能快速入门并掌握常用的shell脚本编写以及解决工作上的常见问题?
     首先要对Linux系统有一些了解,知道Linux系统命令主要是由shell内置命令和系统来枹成的,同样,在shell脚本中,也主要是由shell内部命令和系统命令构成。
写shell脚本的头部,记得加上set -x,便于在调试脚本时,打印信息进行调试。
话题二,对shell脚本编写有一定基础的情况下,如何快速提高自己的水平以及编写出“优雅”、高效率的代码?
     对shell各种变量如$? $0 $1等变量有一定的认识,还要对系统较熟悉,知道系统常用服务,启动脚本放在哪儿,懂得系统性能优化,这样一般就能写出较高效和“优雅”的代码了

论坛徽章:
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
12 [报告]
发表于 2014-01-22 17:28 |只看该作者
好活动,要大力支持的

论坛徽章:
0
13 [报告]
发表于 2014-01-22 17:56 |只看该作者
  对脚本语言都不懂......

论坛徽章:
0
14 [报告]
发表于 2014-01-22 18:13 |只看该作者
话题一,初学者怎样才能快速入门并掌握常用的shell脚本编写以及解决工作上的常见问题?

在类unix环境下工作的程序员,经常会遇到批量处理的问题,如果不懂脚本,可就费事了,比如:

找到删掉所有以.tmp结尾文件: find . -name "*.tmp" -exec rm -rf {} \;  (只有一句命令,不算脚本哈)

停调所有虚拟机:
for i in `virsh list --all | awk '{print $2}'`; do
         virsh destroy $i
done

记得以前不会写脚本,总是一个一个的停掉虚拟机,真实累的冤枉阿

因为用shell脚本确实能替程序员解决繁琐的问题,所以个人感觉学习shell是快乐的,shell是高效工作的必备工具阿

话题二,对shell脚本编写有一定基础的情况下,如何快速提高自己的水平以及编写出“优雅”、高效率的代码?

对shell有一定了解了,一定要学习高手的代码,高手在那里?高手就在linux系统中,/etc/目录下,/usr/bin下有大量的专业级的shell代码,多看,多引用,比如
redhat下有个函数库/etc/rc.d/init.d/functions ,里面有特别多好的shell函数,自己就不用重复创建轮子了

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
15 [报告]
发表于 2014-01-23 09:26 |只看该作者
本帖最后由 seufy88 于 2014-01-23 09:42 编辑

话题一,初学者怎样才能快速入门并掌握常用的shell脚本编写以及解决工作上的常见问题?
初学者最好能从事某个作业作为开端,进入shell。这样一来即为工作也为新的知识学习。
基础看一点就行了,因为shell本身入门的代价不高,看了点皮毛(CU:shell基础)
后就可以直接上手了,直接动手写你的脚本,有问题再自己找资料解决。
这里我要提一下flw(我们perl的版大)的提问的艺术
谁不是生来就懂的,但是遇到问题自己不先思考不先自己查找资料就上来提问,这种不经大脑不用动手的拿来主义只会害了你自己。
作为新手,正是通过自己动手深刻掌握的阶段,如果这次你“侥幸"解决了问题,以后再遇到时你依然没有用心掌握住,这样你永远不得把知识化为自身

shell脚本这一块已经有很多前辈总结的宝贵经验,并且由于shell脚本的一个特点(相对一般软件开发):
短小实用性强,初学者边写边执行边debug不是问题,在这过程中慢慢积累宝贵的经验,甚至形成自己的shell编写风格。
网络上也好CU的shell版也好,每天都有很多新人在提问,解决各种各样的问题,我想初学者自己也会遇到这样的问题,为何不自己来实践并回答网友的提问
作为新手,我隆重推荐台湾友人网中人的精华文章:
http://bbs.chinaunix.net/thread-218853-1-1.html

话题二,对shell脚本编写有一定基础的情况下,如何快速提高自己的水平以及编写出“优雅”、高效率的代码?
这是一个积累的过程。
另一方面,多看看国内外高手写的脚本,学以自用。
我觉得,可以看看各各source code里的configure脚本,一般都是用shell编写的。大体功能都是为了编译前的环境检测和构建。
里面有很多技巧东西值得学习。

归根到底,shell脚本其实是shell这个程序能够读懂的一种“文书”。它也是一个普通得不能再普通的linux程序,拥有linux程序所有特性。
如果你接触到linux内部的知识点,比如内核为每个进程维护fd table,同时fork的父子关系的继承等,就可以很容易理解“重定位”这种东东的实质。
另外,所谓有shell环境变量,不正是我们在C语言程序中也经常遇到的:进程的内存空间中专门有一块用来存放env var和argv、argc等东西。shell也是如此,没什么神秘的。

(1)多自己动手写脚本,哪怕是最简单的开始,最丑的丑小鸭将来也会变天鹅。
(2)精通awk,sed等shell中常用的利器
(3)一定要精通正则表达式

最后一点,我觉得它和C不一样之处:shell脚本如果不一直用,就会忘得很快(perl更快:wink: )

论坛徽章:
1
双子座
日期:2013-10-09 14:59:30
16 [报告]
发表于 2014-01-23 10:17 |只看该作者
谢谢分享   

论坛徽章:
1
酉鸡
日期:2014-04-15 16:52:36
17 [报告]
发表于 2014-01-23 10:26 |只看该作者
刚刚学习shell,还不知道怎么入门呢,进来学习学习!

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
18 [报告]
发表于 2014-01-23 14:28 |只看该作者
话题一,初学者怎样才能快速入门并掌握常用的shell脚本编写以及解决工作上的常见问题?
首先对Linux系统有个基本的了解,知道它是怎么处理各种命令的,其次是对bash有一定的了解,它的语法原理等等。
然后就是要熟练运用常见的命令了,如ls,find,exec,ps等等,最好在实际工作中运用,如果不懂就看文档,如man等,
或者去网上查各种资料,然后尝试将这些自己熟悉的命令结合起来工作,慢慢地培养感觉。

话题二,对shell脚本编写有一定基础的情况下,如何快速提高自己的水平以及编写出“优雅”、高效率的代码?
首先基础知识一定要扎实,经常翻翻abs这种书,好好想想书中的例子是怎么实现的,明白背后的原理,其次就是要在
实际工作中大量写各种脚本来代替自己的工作,然后经常回头看看自己写的脚本是否有bug,是否有更好的方法来改进,
也就是说的重构,在大量实践的基础上多看看系统自带的一些优秀脚本或者别人写的好的脚本,看看他们是怎么实现的,
加以吸收和利用。最后是最好熟悉一种脚本语言如Perl等,这样会对shell有着更好的理解。

论坛徽章:
0
19 [报告]
发表于 2014-01-23 14:48 |只看该作者
本帖最后由 polyahu 于 2014-02-11 16:52 编辑

话题一,初学者怎样才能快速入门并掌握常用的shell脚本编写以及解决工作上的常见问题?

http://ask.chinaunix.net/question/882
上面这个链接是CU问答里的“关于如何学习Linux ?”,可以参考一下。

http://bbs.linuxtone.org/thread-21094-1-1.html
linuxtone论坛上的一个帖子,也挺不错。

http://linux.vbird.org/
鸟哥的Linux私房菜挺不错的,循序渐进,讲解的很好。

http://tldp.org/LDP/abs/html/
abs是好书,很多的示例代码,看了以后很有收获,知道shell脚本大概是什么样子了。

sed.sourceforge.net/sed1line_zh-CN.html
SED单行脚本快速参考,非常实用。这个地址好像打不开,用这个名字搜一搜就能找到。

http://rosettacode.org/
这个网站也蛮有意思,列了很多的题目,然后用常见的编程语言解决一遍,挑里面的Bash和awk看看,也可以有所收获。
(这网站有时候打不开,不知道是不是公司网络的问题)

《sed与awk》这书非常好。

学习正则表达式,这块我一开始是看的《Learning Perl》的第七章入门的。有个著名的网帖《正则表达式30分钟入门教程》(http://deerchao.net/tutorials/regex/regex.htm),还有man grep的REGULAR EXPRESSIONS一节,info sed的3.3一节,man awk的PATTERNS AND ACTIONS一节,perldoc看perlrequick/perlretut,《精通正则表达式》《正则指引》是两部更全面的参考书,可能不会需要读到那个程度。

对于入门并掌握脚本编写这个问题,寻找好的学习资料是一回事,真正重要的是实际动手操作。
动手操作一是解决工作中实际问题,另外就是泡论坛,找问题去做。CU论坛里帖子很多,实际问题也很多,试着做做也好。

解决工作上的常见问题,一是熟悉工具,熟悉基本操作,并至少知道这个工具可以做哪些事情,二是知道如何去搜寻答案,比如到论坛里发贴子问,搜索引擎去搜关键词,到stackoverflow搜关键词,看文档RTFM,看手册。有时候看帖子里提了问题,回帖里就把手册里相关条目的原文贴过来,就一下明白了(英语的阅读越熟练越好)。
Bash的手册(http://www.gnu.org/software/bash/manual/bashref.html)有点繁琐不像vim的手册(http://doc.linuxpk.com/doc/vim/)那样容易阅读,但是Shell本身就是很繁琐很复杂的呀,手册是最准确最全面的资料,会查手册很多细节就无需问别人了。
学vim的时候反复看手册,多操作操作,每次看过文档以后就有意识的多用几个不熟悉的命令/快捷键什么的,慢慢就上手了。shell也是这样,像C-a,C-e,C-u这些,有意识的多用一用就记住了,个别命令的参数像`uniq -c' `sort -n' `du -sh' `cp -r'多用多记,也就会了。


话题二,对shell脚本编写有一定基础的情况下,如何快速提高自己的水平以及编写出“优雅”、高效率的代码?

这个话题我没什么把握来回答了,因为自认为写不到优雅的程度。

个人认为要提高水平的话,应该多看看成熟的项目代码,比如init.d目录里的脚本,rvm这样的脚本项目,github上有更多。

另外就是加深对Shell的理解,shell里变量怎么替换,参数怎么展开等等细节。多读手册。熟悉正则表达式。
还有上面有人说道的linux十三问,也是很精彩很有深度的帖子。CU的Shell编程大赛。其实多看看CU论坛Shell区精华版挺长知识的。

另一方面就是多泡论坛,看别人的问题,尝试解答,看别人的解决方法。
CU论坛的Shell区、水木论坛的LinuxApp/LinuxDev区、stackoverflow等等都是非常好的。



不管是为了上手,还是为了提高,多泡论坛积累经验,多动手加深记忆,多动脑思考,都是很重要的。

论坛徽章:
2
子鼠
日期:2014-12-09 14:03:562015年亚洲杯之巴勒斯坦
日期:2015-03-31 10:49:39
20 [报告]
发表于 2014-01-23 15:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP