目录
Shell脚本概述
一、Shell脚本的概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
二、Shell脚本应用场景
- 重复性操作 例如:可以帮助我们解决类似定期备份文件等重复性工作
- 交互性任务 例如:可以帮助我们解决需要繁琐配置密钥解决交互的问题
- 批量事务处理 例如:可以帮我们在批量递归查询某文件时,稳定精确的找到我们所需要的文件
- 服务运行状态监控 例如:当有大量服务时,人为的去一条条监控明显不现实,这时就可以用脚本来进行监控
- 定时任务执行(绝对路径) 例如:可以帮助我们完成例如定时发布或定时备份等操作
三、Shell脚本的作用
自动化运维
批量化重复操作可以编写脚本结合计划任务自动周期运行
减轻管理员工作量
提高处理文本文件的速度
避免配置出错
四、Shell脚本的构成
构成:
脚本申明(解释器):第一行开头"#!/bin/bash",表示此行一下的代码语句是通过/bin/bash程序来结实执行,#!/bin/bash为默认解释器,还有其他类型的解释器,比如:
#!/usr/bin/python #!/usr/bin/expect
注释信息:以“#”开头的语句表示为注释信息,<u>被注释的语句在运行脚本时将不被执行</u>
可执行语句:比如echo命令,用于输出" "之间的字符串
五、Shell脚本的执行
编写Shell脚本
使用vim文本编辑器
每行一条Linux命令,按执行顺序依次编写
赋予可执行权限
使脚本具有可执行属性
方法一:指定路径去执行文件,脚本文件路径(绝对路径与相对路径)
方法二:指定Shell去执行脚本
通过bash命令找到Bash解释器所在的目录,然后再运行,只不过多了一个查找的过程
六、重定向
1、交互式硬件设备
- 标准输入:从设备(字符设备:键盘鼠标)接收用户输入的数据
- 标准输出:通过设备(显示器)向用户输出数据
- 标准错误:通过设备(显示器)报告执行出错信息
2、重定向操作
3、管道操作 |
将管道符号"|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
ps aux | wc -l #查看当前进程的数量
echo "123456" | passwd --stdin zhangshan#批量修改登录码,stdin模拟键盘输入
七、Shell脚本的变量
变量的作用
- 用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
- 自定义变量:由用户自己定义、修改和使用
- 特殊变量:环境变量,只读变量,位置变量,预定义变量
自定义变量:由用户自己定义,修改和使用
环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:Bash中内置的一类变量,不能修改
命名要求
- 区分大小写
- 不能使用程序中保留和内置变量:if,for,hostname
- 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持持短横线"-",和主机名相反
- 不要使用内置的变量,使用英文尽量使用词义通俗易懂
- 大驼峰 StudentFirstName
- 小驼峰 studentFirstName
- 下划线 student_name
八、自定义变量
定义一个新的变量
- 变量名以字母或下划线开头,不能以数字符号开头;区分大小写,建议全大写
变量名=变量值 #定义一个新的变量
或/补:
declare [+/-][rxi][变量名称=设置值]
+/- "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
-f 仅显示函数。
r 将变量设置为只读。
x 指定的变量会成为环境变量,可供shell以外的程序来使用。
i [设置值]可以是数值,字符串或运算式。
查看变量的值
echo $变量名 #查看变量的值,$为变量替换的代表符号
unset 变量值 #取消变量
赋值时使用符号
变量追加值
格式:变量名+=追加值
Shell编程规范与变量
expr 整数 运算符 整数
运算符号 | 介绍 |
+ | 加法 |
- | 减法 |
\* | 乘法 |
/ | 除法 |
% | 取余 |
expr 12 \* 5
echo $[12*5]
echo $((12*5))
let i=12*5
echo $i
例:
[root@localhost~]#let i++
[root@localhost~]#echo $i
61
i++ 是先赋值 再加一;相当于i=$[$i]
++i 是先加一 再赋值;相当于[$i=]
echo $[RANDOM%34 +1]
特殊的Shell变量
环境变量
变量的作用范围:
默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用。
可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。
格式一:export 变量名
格式二:export 变量名=变量值
#两种格式可以混合使用
位置变量
表示为$n,n为1~9之间的数字
预定义变量