免费注册 查看新帖 |

Chinaunix

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

[其他] 【有奖讨论】linux操作系统工作利器:shell编程知多少? [复制链接]

论坛徽章:
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
41 [报告]
发表于 2015-06-17 17:35 |只看该作者
顶顶刺客~~~

论坛徽章:
26
CU十二周年纪念徽章
日期:2013-10-24 15:41:34技术图书徽章
日期:2014-07-11 16:27:52辰龙
日期:2014-09-04 13:40:43白羊座
日期:2014-09-09 12:51:55双子座
日期:2014-09-26 11:00:042014年中国系统架构师大会
日期:2014-10-14 15:59:00子鼠
日期:2014-10-23 16:48:23巨蟹座
日期:2014-10-27 08:21:10申猴
日期:2014-12-08 10:16:282015年辞旧岁徽章
日期:2015-03-03 16:54:15NBA常规赛纪念章
日期:2015-05-04 22:32:03IT运维版块每日发帖之星
日期:2016-01-29 06:20:00
42 [报告]
发表于 2015-06-19 08:45 |只看该作者
刺客是妹子吗?你们怎么知道的!1

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
43 [报告]
发表于 2015-06-19 10:05 |只看该作者
回复 42# cryboy2001


    用心感受吧

论坛徽章:
13
巨蟹座
日期:2013-10-30 18:29:4115-16赛季CBA联赛之青岛
日期:2019-01-04 17:30:1015-16赛季CBA联赛之天津
日期:2016-03-08 10:30:1715-16赛季CBA联赛之天津
日期:2015-12-10 15:56:452015年亚洲杯之约旦
日期:2015-03-09 16:29:36双鱼座
日期:2014-11-27 17:17:20寅虎
日期:2014-11-18 13:55:12双子座
日期:2014-03-31 15:41:32狮子座
日期:2014-03-14 11:23:24狮子座
日期:2014-02-19 16:30:12午马
日期:2013-11-04 23:22:31卯兔
日期:2013-10-30 19:51:15
44 [报告]
发表于 2015-06-19 15:15 |只看该作者
1、请分享你是如何学习bash shell的?入门主要看过哪些书?
a.抄书上的代码,一边抄一边运行脚本
b.把网上的一些脚本或者操作系统里的一些脚本一行行的复制到终端看看有什么结果
c.然后再学习一些符号与shell变量一些意思

学习的书有<Linux.Shell脚本攻略>,<Linux命令行与Shell脚本编程大全>,<Linux.Shell编程从入门到精通>,<Sed与awk第二版>,<Shell脚本学习指南>

2、请分享你在工作当中编写过的一个shell脚本实例。
a,写一些简单的测试用例
b,写一些简单自动化脚本

3、对于新手编写shell脚本应该注意哪些方面?
a,不要光看脚本例子,一定要亲自动手敲脚本。
b,做笔记,比如我收集符号的与变量的意思。作成一个word表格文件,方便使用的时候查找

4、在工作当中,shell脚本主要运用在哪些方面?
a,目前主要写一点自动化测试用例

5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。
sed与awk目前只是简单用一下,主要用在"插入与替换"方面。


小弟学shell的时间也不长,也是断断续续的学,用到哪里就学哪一个。

论坛徽章:
4
ChinaUnix专家徽章
日期:2015-07-27 10:05:26IT运维版块每日发帖之星
日期:2015-09-01 06:20:00IT运维版块每日发帖之星
日期:2016-07-29 06:20:00PHP
日期:2016-10-25 16:08:01
45 [报告]
发表于 2015-06-19 16:51 |只看该作者
1、请分享你是如何学习bash shell的?入门主要看过哪些书?
   shell学习需要多练习,而且需要有目的的练习,前期可以是堆简单的命令行,逐渐的给一个shell添加一些功能(将一个脚本写"长"),比如:
  你想用shell备份一个文件,可以写:
   #!/bin/sh
   tar -zcvf  /data/needbak.tar.gz /data/needbak
   接着,你可以给这个脚本增加一些功能,比如:可以增加按天创建备份文件,将一些可变的东西写成变量,那么简单的丰富下,脚本可以变为:
   #!/bin/sh
   backupdir=/data/backup
   needbackupdir=/data/needbak
   today=`data +%Y-%m-%d`
   tar -zcvf ${backupdir}/needbak_${today}.tar.gz ${needbackupdir}
  这样我们就简单的丰富了下脚本,接着我们可以再对脚本进行结构化处理,使用函数
  #!/bin/sh
   backupdir=/data/backup
   needbackupdir=/data/needbak
   today=`data +%Y-%m-%d`
   backup(){
    tar -zcvf ${backupdir}/needbak_${today}.tar.gz ${needbackupdir}
    }
   main(){
    backup
    }
   main
  接着我们还可以对这个脚本进行进一步改造,比如增加一些备份是否成功的判断,增加备份条件是否完备(比如备份目录是否存在,备份文件是否存在等)
  还可以把备份目录做成参数传递给脚本,这样我们就可以备份各种文件,不仅仅只备份一类目录。
  建议shell初学者看linux 与unix shell 编程指南

2、请分享你在工作当中编写过的一个shell脚本实例。
我就把上面的那个脚本补齐一点吧,基本上编程的关键是思路清晰,不在于语言。
  #!/bin/sh
  #此脚本用于备份文件使用
  #作者:bbzsxjj
  #时间:2015-6-19
  #定义全部变量
   backupdir=/data/backup #备份文件存放目录
   needbackupdir=$1 #将需要备份的文件目录作为一个参数1 传递给脚本
   logdir=/data/logs
   needbakdir=`echo $1|awk -F'/' '{print $2}'` #获取备份目录名称,用于备份文件命名
   today=`data +%Y-%m-%d` #备份的时间(按天)
   backup(){
   #检查是否存在日志目录,如果不存在,创建备份目录
   if [ ! -f ${logdir} ]
     then
       mkdir -p ${logdir}
     fi
   #检查是否存在备份目录,如果不存在,创建备份目录
    if [ ! -f ${backupdir} ]
      then
           mkdir -p ${backupdir}
      fi
    # if [ -f  ${badkupdir}/${needbakdir}_${today}.tar.gz ]
         then
              echo "备份文件 ${badkupdir}/${needbakdir}_${today}.tar.gz 已经存在,请手工删除备份文件再继续此脚本!"
              exit
         else
              tar -zcvf ${backupdir}/${needbakdir}_${today}.tar.gz   ${needbackupdir}
         fi
        if [ -r ${backupdir}/${needbakdir}_${today}.tar.gz ]
            then
               echo "${backupdir}/${needbakdir}_${today}.tar.gz 备份成功"
               echo "${backupdir}/${needbakdir}_${today}.tar.gz 备份成功" >>${logdir}/backup.log
            else
              echo " ${backupdir}/${needbakdir}_${today}.tar.gz 备份失败"
              echo "${backupdir}/${needbakdir}_${today}.tar.gz 备份失败" >>${logdir}/backup.log
           fi
    }
   main(){
    backup
    }
   main
   还可以再搞复杂点,看在哪用,比如可以增加个提示菜单界面,选择各种功能,比如增加备份失败邮件报警功能等,还有如果功能较多函数可以写的更小点,可以复用,也可以读起来
   更清晰,后续维护也简单一些。

3、对于新手编写shell脚本应该注意哪些方面?
   我觉的新手入门最关键的是先要熟悉各种linux命令,前期不需要去研究复杂的东西,不要钻牛角尖,这个是关键,从多方面思考,找到一个
   简单便捷的方式写脚本,记住脚本只是辅助工具,脚本最大的好处是只要你写的没问题,执行的时候就没问题,不会出现手工操作时的低级
   误操作,尽量用脚本的方式去处理问题,比如:代码上线,服务器部署,查询系统配置等,尽量能让电脑干的就让电脑干,能记录日志的记录日志。

4、在工作当中,shell脚本主要运用在哪些方面?
    shell脚本在工作中主要是辅助人去处理各种问题,比如:定时监控,代码推送,系统安装部署,日志分析。
    监控方面:
      nagios/cacti/zabbix都需要用到自定义脚本,就可以用Shell
    任务处理:
      代码的自动发布,定时发布,定时同步,服务定时重启,都可以用shell处理
    系统配置:
      IP地址的批量设置,服务的批量安装(namp/mysql等),防火墙的批量控制等等
    日志分析:
      利用awk/sed等去对日志进行分析
5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。
   Shell里面的sed/awk非常方便的解决了我们很多繁琐的任务处理,也让shell功能更加丰满,处理问题更加便捷,sed是行编辑器,awk主要是列处理,可以交替使用。
   awk通常在字符串处理,数据计算方面使用的多,sed主要是文本处理。
   awk实例:
   比如:nginx日志我们想统计每天的前10的IP地址访问量,通常日志的第一列记录了IP地址,那么我们可以使用1行命令就可以统计出来!
      awk '{ips[$1]++}END{for(ip in ips) print ip,ips[ip]}'|sort -n -r -k2|head -10
      这样就可以看到每天前10的ip地址是什么,另外还可以看到每个IP地址访问了多少次
   sed实例:
   比如:我们想把文件中的abc字符换成bcd字符,我们可以使用sed处理
       sed -i 's/abc/bcd/g' xxx.txt
       最简单的文件内容替换,使用-i 直接修改文件 使用g做全文替换
   awk|sed使用熟练后,你就会发现他们的强大和方便,很多东西如果用php/python去写需要写几十行,用awk|sed去实现一行命令就可以解决。
  最后,关于Shell编程学习,我再说一些感想:
     1.脚本越简练越好
     2.多看linux的命令,比如:grep|find|xargs 这些会帮助你解决很多问题
     3.脚本只是辅助工具,是手段,不能过分依赖脚本,脚本是不会思考,思考的是人
     4.要有目的的练习写脚本,不能盲目的看书
     5.特别是不要盲目的从网上复制粘贴脚本,必须要搞清楚脚本的功能和实现方法,实现思想和方法是关键。

论坛徽章:
0
46 [报告]
发表于 2015-06-20 11:25 |只看该作者
使用shell主要分三方面:
首先是shell自身的语法,变量、循环、函数、...,很简单也很简陋,功能弱的一塌糊涂,但在linux/unix这个特定环境中还真是实用,上手快、能做事。
其次是各种命令,从本质上说,它们和shell是没有关系的。shell只是调用命令,把命令的输出结果拿过来做简单的分析、归纳、整理,得出一个结果。这就带来一个潜在的严重问题,没有各种命令的支持,shell什么也不是。举个简单例子,有一次要分析tcp各种定时器,用nc、sock、iptables、netstat制造并分析各种tcp状态,最终CLOSE_WAIT没有实现,因为没有找到相应的命令来实现半关闭。换成perl或python就没这个限制。
最后是正则和grep、sed、awk三大将,它们在shell生态圈中的作用无以伦比,太多的时候需要它们出马才能搞定。
总结:命令提供文本,正则协助shell处理文本。

怎么入门shell
shell自身的学习最简单,如果已有其他语言基础,可以直接跳过这一步,同时手里有几本参考书,在需要的时候去查一查。没有基础的在下面我会推荐一本参考书来入门。
各种命令的用法,只能逐步的积累,积累的速度取决于个人的勤奋程度、专研精神和职业态度。
正则和三大将,三大将分成两部分:正则和其它,其它部份和各种命令的学习是一样的。正则的学习必看一本书,然后就是在不断的使用中加深。
以上是入门,入门之后如何继续下去就是自己的事情。
总结:选一本书来入门

入门参考书
《unix shell范例精解(第4版)》,学院派的巅峰之作,专注于shell自身,第一遍看感觉很详细,第二遍看感觉详细的有点烦,没有第三遍了。留在案头作为工具书,需要的时候查一查。该书近千页,讲了4种shell,只看bash部份就好,这部份仔细看3分,翻看7分留个印象。这本书里也有三大将的章节,可以用来入门。
《Advanced Bash-Scripting Guide》,简称abs,非出版物,涉及了bash的方方面面,很全很全,洋文吃力的同学可以看06年的一份中文版。
《精通正则表达式(第3版)》,看完之后,正则就没什么秘密了。

快速入门
一名同事,入职前只写过十几行的l脚本,入职后的工作多数需要用shell,痛苦了两个月后入门。

论坛徽章:
71
子鼠
日期:2015-06-10 14:07:09丑牛
日期:2015-06-10 14:07:10寅虎
日期:2015-06-10 14:07:40卯兔
日期:2015-06-10 14:07:44辰龙
日期:2015-06-10 14:07:44巳蛇
日期:2015-06-10 14:07:46午马
日期:2015-06-10 14:07:47未羊
日期:2015-06-10 14:07:48申猴
日期:2015-06-10 14:07:50酉鸡
日期:2015-06-10 14:07:54戌狗
日期:2015-06-10 14:07:55亥猪
日期:2015-06-10 14:07:57
47 [报告]
发表于 2015-06-23 14:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
71
子鼠
日期:2015-06-10 14:07:09丑牛
日期:2015-06-10 14:07:10寅虎
日期:2015-06-10 14:07:40卯兔
日期:2015-06-10 14:07:44辰龙
日期:2015-06-10 14:07:44巳蛇
日期:2015-06-10 14:07:46午马
日期:2015-06-10 14:07:47未羊
日期:2015-06-10 14:07:48申猴
日期:2015-06-10 14:07:50酉鸡
日期:2015-06-10 14:07:54戌狗
日期:2015-06-10 14:07:55亥猪
日期:2015-06-10 14:07:57
48 [报告]
发表于 2015-06-23 14:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
62
洛杉矶湖人
日期:2015-02-10 09:56:11黑曼巴
日期:2016-06-28 17:41:282015-2016NBA季后赛纪念章
日期:2016-06-28 17:41:282016猴年福章徽章
日期:2016-02-18 15:30:34圣安东尼奥马刺
日期:2015-05-04 22:46:00菠菜神灯
日期:2015-05-04 22:35:07新奥尔良黄蜂
日期:2015-03-17 13:54:52明尼苏达森林狼
日期:2015-03-16 21:51:15萨克拉门托国王
日期:2015-03-02 16:10:58华盛顿奇才
日期:2015-03-02 16:10:58迈阿密热火
日期:2015-03-02 16:10:582016科比退役纪念章
日期:2016-06-28 17:41:28
49 [报告]
发表于 2015-06-24 10:20 |只看该作者
希望能学点这个。。

论坛徽章:
10
数据库技术版块每日发帖之星
日期:2015-06-14 22:20:00数据库技术版块每日发帖之星
日期:2016-03-10 06:20:00数据库技术版块每日发帖之星
日期:2015-12-01 06:20:00IT运维版块每日发帖之星
日期:2015-11-09 06:20:00IT运维版块每日发帖之星
日期:2015-11-02 06:20:00IT运维版块每日发帖之星
日期:2015-07-13 22:59:28IT运维版块每日发帖之星
日期:2015-06-23 22:20:00程序设计版块每日发帖之星
日期:2015-06-21 22:20:00每日论坛发贴之星
日期:2015-06-14 22:20:00IT运维版块每日发帖之星
日期:2016-08-02 06:20:00
50 [报告]
发表于 2015-06-24 23:37 |只看该作者
1、请分享你是如何学习bash shell的?入门主要看过哪些书?
    项目需要,一点点自己抠出来的。最初使用bash shell进行存储过程和jnlp应用程序的调用。项目中有20个.sh文件,全部7-8千行左右吧。
    包括日期、字符的cut、转换、cron、写文件、写库等。
    <linux shell脚本编辑入门>推荐,还有一些别的书籍。

2、请分享你在工作当中编写过的一个shell脚本实例。
    最初使用bash shell进行存储过程和jnlp应用程序的调用。项目中有20个.sh文件,全部7-8千行左右吧。
    包括日期、字符的cut、转换、cron、写文件、写库等。

3、对于新手编写shell脚本应该注意哪些方面?
     从简单,几行、十几行的shell程序文件。培养兴趣,java、c++很多行实现的功能,shell几行就能实现。     

4、在工作当中,shell脚本主要运用在哪些方面?
    文字、文本处理。运维中一些工具的调用和配置。通过shell进行存储过程和jnlp应用程序的调用,比通过application调用更高效。

5、shell板块最活跃的两种文本处理工具sed和awk,各位CU大牛畅谈下运用经验吧。
   awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
   命令简单,实现功能很强。
   
   sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。
   在文字、文本处理,如替换删减等方面有很普遍的用途。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP