设为首页 收藏本站
查看: 707|回复: 0

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

[复制链接]

尚未签到

发表于 2018-8-19 10:27:38 | 显示全部楼层 |阅读模式
  本文是在学习《跟老男孩学Linux运维之shell编程实战》这本书时记录的知识点。看了这本书,我受益匪浅,当然这仅是我个人观点。下面我们言归正传,开始了解一下shell脚本吧!
  shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。
  shell脚本语言的种类:sh、ksh、bash、csh、tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主。
  那我们如何查看Linux系统中默认的shell?
  [root@www ~]# cat /etc/redhat-release   ==>查看Linux系统版本

  CentOS>  [root@www ~]# echo $SHELL        ==>查看系统默认的shel
  /bin/bash
  脚本的书写规范:
  1. 脚本开头第一行
  一个规范的shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容。
  在Linux bash的编程中一般为:
  #!/bin/bash
  或
  #!/bin/sh
  提示:
  sh为bash的软连接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别  的, 但更为规范的写法是在脚本的开头使用“#!/bin/bash”。
  由于老版本的bash中被暴露出存在较严重的安全漏洞,所以我们需要检测现有系统中的bash版本是否存在漏洞,那如何检测是否存在漏洞呢?方法如下:
  [root@www ~]# env x='() { ;;}; echo be careful' bash -c "echo this is a test"
  this is a test
  如果返回如下两行,则表示需要尽快升级bash,不过,仅仅是用于学习和测试就无所谓了。
  be  careful
  this is a test
  提示:升级方法:yum -y update bash
  提示:
  (1)不同语言的脚本的开头第一行有所不同,具体如下:
  #!/bin/sh
  #!/bin/bash
  #!/usr/bin/awk
  #!/bin/sed
  #!/usr/bin/tcl
  #!/usr/bin/expect           ==>expect解决交互式的语言开头解释器
  #!/usr/bin/perl               ==>perl语言解释器
  #!/usr/bin/env python   ==>python语言解释器
  不同的脚本一般会保存为不同的扩展名,例如:
  shell脚本:xxx.sh
  Python脚本:xxx.py
  expect脚本:xxx.exp
  (2)查看bash的版本:
  [root@www ~]# bash --version
  2.脚本注释:
  在shell脚本中,“#”号开头的表示注释,用来对脚本进行注释说明。
  3.脚本的执行:
  当shell脚本运行时,会先查找系统环境变量ENV,该变量指定了环境变量文件(加载顺序通常是/etc/profile、~/.bash_profile、
  ~/.bashrc、/etc/bashrc等),加载完上述环境变量后,shell就开始执行shell脚本中的内容。
  shell脚本是从上至下,从左至右一次执行每一行的命令及语句,即执行完一个命令后再执行下一个,如果在shell脚本中遇到子脚本,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。
  提示:设置Linux的crond任务时,最好能在定时任务脚本中重新定义系统环境变量,否则,一些系统环境变量将不会被加载。
  shell脚本执行的方法:
  (1)bash script-name或sh script-name :当脚本文件本身没有可执行权限时常使用的方法或脚本文件开头没有指定解释器时需要使用的方法。
  (2)path/script-name或./script-name:指在脚本的当前路径下执行脚本(前提是脚本需要有执行权限)
  (3)source script-name或 . script-name:这种方法通常是使用source或"."读入或加载指定的shell脚本文件(如san.sh)。依次执行脚本san.sh中的所有语句。这些语句将在当前父shell脚本father.sh进程中运行(其他几种模式都会启动新的进程执行子shell)。因此,使用source或“.”可以将san.sh脚本中的变量值或函数等的返回值传递到当前父shell脚本father.sh中使用,这是它与其他几种方法最大的区别。
  source或“.”命令的功能:在当前shell中执行source或“.”加载并执行的相关脚本文件中的命令及语句,而不是产生一个子shell来执行文件中的命令。
  (4)sh

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-553764-1-1.html 上篇帖子: Flume分布式日志系统(三):flume shell-linuxjcq 下篇帖子: Shell编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表