Shell编程从入门到精通-第一章.shell基础知识


一、Shell基础知识

1.1、为什么使用shell

在我们运维工作中日常重复性的工作比较多,例如:程序部署日志查询自定义监控等,为了减少重复性的工作,提高运维交付能力,shell脚本也是运维人员不可缺少的技能之一,如下图:我们shell脚本可以在我们平时的运维管理工作中可以代替我们做很多的功能

wKiom1k-VCbiGcLmAASFwGwzW-k278.png

1.2、shell简介

shell是命令解释器,他的作用是解释用户输入的命令翻译给系统,shell在系统的最外层,负责直接和用户交互,在登录系统时,我们输入的账户和密码也是由shell来解释和执行的,如下图:shell好像系统和用户之间的一个桥梁,把我们输入的命令通过解析传输给系统内核,然后内核把执行结果再显示给用户

wKioL1k-VDzDuKLdAAIE50Lie5o552.png

1.3、什么是shll脚本

通过前面shell的解释,再理解shell脚本就更简单了,当命令和程序语句不在命令行下执行,而是通过一个程序文件来执行,该程序就是shell脚本,如果通过shell脚本里面内置的命令,如判断,循环等将这些命令一次性执行成功的,这种称之为非交互式的方式,用户在shell脚本里面加入变量,判断,循环这些语句有机的结合在一起,就成了一个强大的脚本程序

范例1.1 清除/var/log下的messages日志文件内容的交单命令脚本

# Version 1cd /var/log/ cat /dev/null > messagesecho "Logs cleaned up."

/var/log/messages是系统日志文件,很重要 
小结:

  1. 上面的脚本,如果不是root就无法执行清理日志;

  2. 没有任何的流程控制语句,简单的说就是顺序操作,没有程序判断和逻辑性;

  3. 把所有命令放在一个文件里堆积起来就形成了脚本;

#!/bin/bash# Version 2LOG_DIR=/var/logROOT_UID=0    #$UID为0的时候,用户才具有root用户的权限if [ "$UID" -ne "$ROOT_UID" ]  # 判断是否是root用户,如果不是,给出提示并退出程序then    echo "Must be root run this script."    exit 1ficd $LOG_DIR || {  # 如果切换目录不成功则给出提示    echo "Cannot changeto necessary directory" >&2    exit 1}# 用户即是root,目录也存在的时候在清空文件内容,并给出提示cat /dev/null > messages && echo "Logs cleaned up."exit 0  # 退出之前返回0表示成功. 返回1表示失败

1.4、shell脚本语言的种类

图形界面 Shell(GUI Shell)GUI 为 Unix 或者类 Unix 操作系统构造一个功能完善、操作简单以及界面友好的桌面环境。主流桌 面环境有 KDE,Gnome 等。


命令行界面 Shell(CLI Shell)CLI 是在用户提示符下键入可执行指令的界面,用户通过键盘输入指令,完成一系列操作。在 Linux 系统上主流的 CLI 实现是 Bash,是许多 Linux 发行版默认的 Shell。还有许多 Unix 上 Shell,例如 tcsh、csh、ash、bsh、ksh 等。

查看系统的SHELL

$ cat /etc/shells /bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh

查看当前SHELL

$ echo $SHELL/bin/bash$ head -1 /etc/passwdroot:x:0:0:root:/root:/bin/bash  # 以:分割,最后一列就是用户登录时的shell

查看当前SHELL的版本

$ echo $BASH_VERSION4.4.5(1)-release

其他语言编程 
PHPJAVA等web语言开发,这些主要是开发网站来用,在我们系统维护和程序部署用这些语言就会把比较简单的操作,要用很复杂的方式写出来 
Python也是脚本编程语言,还可以作为运维开发语言,来开发cmdb等自动化运维平台,这也是运维人员要会的一门编程语言,在我们学完shell编程语言以后,python开发是我们提升运维效率的必备技能

1.5、shell脚本的建立和执行

创建

在Linux系统中,shell脚本通常是在编辑器(如vi/vim)中编写,由Unix/Linux命令、bash shell命令、程序结构控制语句和注释等内容组成,推荐用vi/vim编辑器.

脚本开头

一个规范的shell脚本的第一行会指出由那个程序(解释器)来执行脚本中的内容,在Linux bash编程中一般为:

#!/bin/bash或#!/bin/sh <==255个字符以内

其中开头的#!又称为幻术,在执行bash脚本的时候,内核会根据#!后的解释器来确定应该使用那个程序解释脚本中的内容,注意:这一行必须在每个脚本顶端的第一行,如果不是第一行则为脚本注释行,例如下面的列子:

$ cat test.sh #!/bin/bashecho "Linux start"#!/bin/bash 写到这里就是注释了echo "Linux end"

注释

在shell脚本中,跟在(#)井号后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被当作程序执行,仅仅是给用户看的,系统解释器是看不到的更不会执行,注释可自从一行,也可以跟在脚本命令后面与命令在同一行。开发脚本时,如果没有注释,团队里的其他人就很难理解脚本究竟在做什么,如果时间长了自己也会忘记。因此,我们要尽量养成为所开发的shell脚本书写注释的习惯,书写注意不光是方便别人,也是方便自己,否则,写完一个脚本后也许几天后就不记得脚本的用途了,需要时再重新阅读也会浪费很多宝贵的时间,特别是影响团队的写作效率,以及后来接手维护的人带来维护困难,注释尽量不要中文。

#!/bin/bash# 我是注释

shell脚本的执行

当shell脚本以非交互式的方式(文件方式)运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(通常是.bashrc,.bash_profile,/etc/bashrc,/etc/profile),然后从该环境变量文件开始执行,当读取了ENV文件后,SHELL才开始执行shell脚本中的内容。

Shell脚本的执行通常可以采用以下三种方式

1.  bash script-name或sh script-name (推荐使用)2.  path/script-name或./script-name (当前路径下执行脚本)3.  source script-name或.script-name (注意“.“点号)4.  sh<script-name或cat test.sh|sh (同样适合bash)

执行说明:

  1. 第一种方法是当脚本文件本身没有可执行权限时常使用的方法,这里推荐用bash执行,或者文件开头没有指定解释器。

  2. 第二种方法需要先将脚本文件的权限改为可执行文件,然后通过脚本路径就可以直接执行脚本了。

  3. 第三种方法通常使用source或者.点好读入或加载指定的shell脚本文件(如san.sh),然后,依次执行指定shell脚本文件san.sh中的所有语句。这些语句将作为当前父shell脚本fathe.sh进程的一部分运行。因此,使用source或者.可以将san.sh自身脚本中的变量的值或函数等的返回值传递到当前的父shell脚本father.sh中使用,这是第三种方法和前两种方法的最大区别,也是值得关注的。

  4. source或.点号命令的功能是在当前shell中执行source或者.点好加载并执行的相关脚本文件中的命令及语句,而不是产生一个子shell来执行命令文件中的命令。

1.6、shell脚本开发基本规范及习惯

1、脚本第一行指定脚本解释器

#!/bin/bash或者#!/bin/sh

2、脚本开头加版本版权等信息

# Date:     2017-05-31 14:19:35# Author:   Created by Natasha# mail:     zhang789.blog.51cto.com# Function: this scripts function is..# Version:  1.0

可配置vim编辑文件时自动加上以上信息,方法是修改~/.vimrc配置文件

3、脚本中不使用中文注释

尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰。

4、脚本以.sh为扩展名 
例如:script-name.sh

5、代码书写优秀习惯

1.  成对的符号内容尽量一次写出来,防止遗漏。如:{}、[]、’’、、””2.  []中括号两端要有空格,书写是即可流出空格[ ],然后在退格书写内容,先书写一对中括号,然后退一格,然后再输入两个空格,再退一个格。3.  流程控制语句一次书写完,再添加内容。

6、通过缩进让代码易读

if 条件内容then    内容fi

好的习惯可以让我们避免很多不必要的麻烦,提升很多的工作效率


本文出自 “家住海边喜欢浪” 博客,请务必保留此出处http://zhang789.blog.51cto.com/11045979/1841909

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告