一、什么是shell脚本
shell脚本是文本的一种
shell脚本是可以运行的文本
shell脚本的内容是由逻辑和数据组成
shell脚本是解释型语言
二、shell脚本存在的意义
Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具
Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。
每一个合格 的Linux运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅读系统及各类软 件附带的Shell脚本内容。
一次编编写永久受益
注:系统支持的shell类型可以查看/etc/shells,常见shell种类有:
Bourne Shell(/usr/bin/sh或/bin/sh):标识为sh,该Shell由Steve Bourne在贝尔实验室时编 写。在许多Unix系统中,该Shell是root用户的默认的Shell。
Bourne Again Shell(/bin/bash):标识为bash,该Shell由Brian Fox在1987年编写,是绝大多 数发行版的默认的Shell,当运行sh时其实调用的是bash。
C Shell(/usr/bin/csh):标识为csh,该Shell由Bill Joy在BSD系统上开发。由于其语法类似于C语 言,因此称为C Shell。
K Shell(/usr/bin/ksh):标识为ksh,该Shell由贝尔实验室的David Korn在二十世纪八十年代早 期编写。它完全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。
三、shell脚本中的基本元素
1.脚本的基本结构
脚本幻数,即脚本解释器,脚本运行的最优先指令,负责对脚本中其他命令进行解释 程序主题,程序主体通常由命令,执行逻辑控制器和数据组成
注释,脚本中的说明文字,不参与脚本执行,只是对脚本中的代码进行说明
1.1脚本幻数为常量,基本不变,例如#!

一个文件中的程序是运行在该脚本幻数中的
1.2注释为#号
2.脚本中的注释方法
2.1单行内容的注释(标红框的为注释)

2.2多行内容的注释,用:" ",双引号中间的内容即为注释

注: :和"中间必须输入空格
命令书写错误时,此时执行命令会显示报错内容,而此时报错了的命令系统已经尝试执行了
四、脚本的书写规范
1.书写规范注意事项
1.1脚本文件名应见名知意,例如backup_mysql.sh
1.2文件开头指定脚本解释器 #!/bin/sh 或 #!/bin/bash
1.3脚本中尽量不要用中文注释,防止本机或切换系统环境后中文乱码的困扰
1.4多使用内部命令,如:echo、eval、exec、export、read、shift、exit
1.5尽量用少的命令完成动作
例如下可知,尽量少的命令可以是user时间和sys时间减少


1.6开头加版本特权等信息,这些信息如下:
Date:创建日期
Author:作者
Mail:联系方式
Function:功能
Version:版本
如

1.7利用缩进体现代码结构,更加利于后期阅读,详情如下:


2.vim用于书写脚本的设定
在编写一个脚本时我们需要书写一些主属性信息用来利与脚本阅读,如果每次都手写这些信息,很显然有做了很多重复动作,用vim的自动编写功能可以实现对于这些重复动作的简化
首先进入编辑

然后输入内容

set et可以使你在vim编写中按空格键可以一格一格的跳,ts为你每一跳的长度
ai可以使你在vim编写中按enter键后会缩进,sw可以设定你的缩进长度
func为函数,其后面要跟大写,endfunc结束
call为调用,append后加数字为指定在第几行
map和auto任写其一
buf表示一个状态,后加的是一个该状态的类型,call后的调用与func后的一致
五、脚本执行方法
1.在当前环境下运行
我们设置一个测试脚本内容

1.1用.加空格

1.2用source

注:这两种执行方式都不需要脚本本身有执行权限
2.在指定环境中运行
2.1用sh

2.2用chmod +x lee.sh(这个命令为添加可使用权限),这个命令执行后你就可以用根目录的方式去调用,如/script/test.sh
六、脚本调试
脚本在执行过程中如果出现问题,单从脚本的执行报错中找问题困难比较大,如果在执行时显示执行过程这样就可以快速定位脚本的问题所在
1.接下来说明然后显示执行过程
例(其中cat命令应为cal显示系统日历,用这个错误命令为例)

直接执行脚本的效果

显示命令执行过程的效果

注:在显示执行过程时,+行表示命令,不带+的行表示命令的输出
所以,显示命令执行过程后我们可以清晰的看到脚本错误的地方,错误的脚本不会执行
七、命令退出值
1.什么是退出值
在UNIX或者Linux中,每个命令都会返回一个退出状态码
退出状态码是一个整数,其有效范围为0~255
通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码
行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功。
2.查看和更改退出值
2.1查看退出值

2.2修改脚本退出值
在未指定退出值时


指定退出值时

