脚本:由多条命令构成的文件(可通过文本编辑器查看)
1)Shell属于Linux内置脚本(常见脚本:JS、JSP、PHP、SQL、Python等)
2)脚本周期:一个Shell文件运行完成的过程
3)Shell脚本分为:简单写法(简单命令的堆积)、复杂写法(程序设计)
编写Shell脚本需遵守以下规定:
(1)文件名规范
1)文件名命名格式:文件名.sh
//.sh后缀是为了区分普通文件,且.sh是Bash默认后缀
(2)代码规范
1)Shell脚本文件中第一行必须为:#!/bin/bash
//表示当前脚本文件所使用的Shell解释器
2)脚本以“exit N”形式结束(N是返回的数值),且N范围为0~255
//可通过${?}获得N的值,便于调式
//若N的值超过255,则该值除以256的余数作为返回状态码
常用的退出状态码
状态码 | 说明 |
---|---|
0 | 命令成功结束 |
1 | 无效参数 |
2 | 不适合的Shell命令 |
126 | 命令执行失败(无权限) |
127 | 无指定命令 |
128 | 无效的退出参数 |
128+x | x信号相关的错误 |
130 | 被Ctrl+C终止 |
255 | 正常范围之外的退出状态码 |
(3)注释规范
1)注释应包含:脚本功能、版本信息和运行所需的环境
//最好还包含:作者、联系方式、脚本的历史记录和脚本的特殊命令
(4)调用规范
1)脚本的调用需用户拥有该文件的执行权限(x);
2)脚本文件可通过以下方式调用:
脚本路径、sh 脚本文件名、source 脚本文件名
//前两种方式均是子Shell中执行脚本,而source则在父Shell中执行脚本
(5)特殊符号
特殊符号 | 含义 |
---|---|
# | 注释符号 |
; | 命令分隔符 |
& | 命令变成后台任务 |
如:使用Shell脚本程序,输出“Hello world!”
2)b.脚本文件内容如下:
//强烈建议使用第二种写法,能够保证后续脚本的维护与更新
//编写脚本工具最好使用Vim而不是Vi(Vim有额外的语法检测功能)
trap命令:设置当Shell脚本接受到信号后的反应
指令格式1:trap 命令 信号
1)接受到指定信号后,运行指定命令;
2)多个trap命令时,则仅在运行该trap命令相关的部分时,才执行指定命令;
如:使用Ctrl+C终止带有trap命令捕获信号的脚本
1)编写test23.sh脚本文件
2)调用test23.sh脚本文件
指令格式2:trap 单破折号或双破折号 信号 //恢复信号原作用
1)若信号在恢复前被捕获,则按照trap命令指定的命令执行
如:通过trap命令捕获信号后,恢复信号原作用
sh命令:shell命令解释器
指令格式:sh 选项 文件路径
1)最常用的是不加选项让系统以Bash的功能执行文件
2)sh是在子进程中执行脚本文件
选项 | 含义 |
---|---|
-v | 执行shell脚本前,先将内容输出到屏幕 |
-n | 只对shell脚本进行语法检查,并不执行 |
-x | 对shell脚本进行逐条语句的跟踪 |
//最常用-x选项对脚本文件进行debug
source命令:在当前Bash环境下执行文件并立刻生效
指令格式:source 文件路径
1)source命令也为“.”点命令(两者完全相同)
2)source命令常用于执行刚修改的初始化文件,使该文件立即生效
3)source是在父进程中执行脚本文件
其他方式调用Shell脚本:
1)以绝对路径或相对路径调用;
2)通过Shell解释器的绝对路径和脚本文件路径调用;
//如:/bin/bash 文件路径