一、Shell 脚本的概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限,便可运行
- 可结合各种 Shell 控制语句以完成更复杂的操作
二、Shell 脚本应用场景
- 重复性操作
- 批量事务处理
- 自动化运维
- 服务运行状态监控
- 定时任务执行
三、Shell 脚本的构成
1.脚本声明
2.注释信息
3.可执行语句
4.常见解释器:
[root@shell ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
四、Shell 脚本的编写与执行
1.编写 Shell 脚本
[root@shell ~]# vim first.sh
#!/bin/bash
#Filename:first.sh
#Author:huyouba1
#Date:2020-04-22
#查看系统内核文件信息
cd /boot/
echo "当前所在路径:"
pwd
echo "内核文件:"
ls -lh vml*
2.执行 Shell 脚本
(1)绝对路径
(2)相对路径
(3)sh 脚本路径(与 “bash 脚本路径” 相同)
(4)source 脚本路径(与 “. 脚本路径” 相同)
其中,绝对路径与相对路径实行 shell 脚本时,该脚本文件必须具有可执行权限。source 脚本路径的方法,只在当前环境生效,其他三种方法是另外再开一个 shell。
3.Shell 脚本的使用
[root@shell boot]# echo "/root/first.sh" >>/etc/rc.local //对所有用户生效
[root@shell boot]# echo "/root/first.sh" >>/etc/profile //对所有用户生效
[root@shell boot]# echo "/root/first.sh" >>~/.bashrc //只对某用户生效
[root@shell boot]# echo "/root/first.sh" >>~/.bash_profile //只对某用户生效
五、管道操作
1.管道操作符号
“|”
2.管道符号的作用:
将左侧的命令输出结果,作为右侧命令的处理对象
3.格式:
cmd1 |cmd2 […|cmdn]
4.示例:
六、重定向操作
1.标准输入、标准输出与标准错误输出
(1)标准输入: 从该设备接收用户输入的数据 (2)标准输出: 通过该设备向用户输出数据 (3)标准错误: 通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
2. 重定向操作分类
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据 |
重定向输出 | > | 将输出结果保存到指定文件 |
- | » | 将输出结果追加到指定文件 |
标准错误输出 | 2> | 将错误信息保存到指定文件 |
- | 2» | 将错误信息追加到指定文件 |
混合输出 | &> | 将标准输出、标准错误输出保存到同一文件 |
重定向输入:
覆盖重定向:
标准错误输出重定向:(覆盖重定向及追加重定向):
混合输出:
七、变量
1.变量的概念
变量用来存放系统或用户需要使用的特定参数或者值,变量的值可以根据用户设定或者系统环境变化而相应变化,在 Shell 脚本中使用变量,可使脚本更加灵活,适应性更强。
2.变量的分类
(1)自定义变量:由用户自己定义、修改和使用
(2)环境变量:由系统维护,用于设置工作环境
其中 PATH 变量用于设置可执行程序的默认搜索路径
此时 PATH 环境变量被临时修改。
可以修改全局变量文件/etc/profile 或修改某用户家目录下的~/.bash_profile文件永久改 变环境变量。
(3)位置变量:通过命令行给脚本程序传递参数(也属于预定义变量)
为了在使用 Shell 脚本程序时,方便通过命令行为程序提供操作参数,Bash 引入了位置变量的概念
位置变量有 0,n,n 为 1~9 之间的数字
0:第一个字段表示命令名或脚本名称
1:脚本要处理的第一个参数
$2:脚本要处理的第一个参数
……
脚本最多可以直接处理 9 个参数
(4)预定义变量:Bash 中内置的一类变量,不能直接修改
预定义变量是 Bash 程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不 能创建新的预定义变量,也不能直接为预定义变量赋值。
$*、$@ 保存了脚本要处理的所有参数($*把所有参数视为整体,$@单个参数的 组合)
$0 保存了脚本的名称
$? 保存着命令或脚本执行状态码
$# 保存了脚本要处理的参数的个数
3.变量定义与输出
(1)定义一个新的变量
格式:变量名=变量值
注意:变量名必须以字母或下划线开头,严格区分大小写
(2)赋值可使用引号
- 双引号:允许通过 $ 符号引用其他变量值
- 单引号:禁止引用其他变量值,$ 视为普通字符
- 反撇号:`` 或 $():命令替换,提取命令的执行结果
(3)输入输出
- 输入格式:read [-p “提示信息”] 变量名
- 输出格式: echo $变量名
4.变量作用范围
默认情况下,新定义的变量只在当前 Shell 环境中有效,因此称为局部变量。当进入子程序或新的子 Shell 时,局部变量将无法再使用。为了使用户定义的变量再所以子 Shell 环境中能够继续使用,减少重复设置工作,可以通过内部命令 export 将指定的变量导出为 “全局变量”
格式1:export 变量名
格式2:export 变量名=变量值
两种格式可以混合使用
5.变量的算数运算
变量的数值运算多用于脚本程序的过程控制,只能进行简单的整数运算,不支持小数运 算,整数值的运算主要通过内部命令 expr 进行。
格式:expr 变量1 运算符 变量2 [运算符 变量3]……
运行符号及示例:
[root@shell ~]# X=111
[root@shell ~]# Y=123
+(加):[root@shell ~]# expr $X + $Y
-(减):[root@shell ~]# expr $X - $Y
\*(乘):[root@shell ~]# expr $X \* $Y
/(除):[root@shell ~]# expr $X / $Y
%(取余):[root@shell ~]# expr $X % $Y
求精度计算: