shell
shell脚本概述
- 将要执行的命令按顺序保存到一个文本文件
- 给改文件可执行权限
- 可结合各种shell控制语句以完成更复杂的操作
shell脚本应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
- ................................
定义解释器:
- #!/bin/bash
表示用什么程序去解释写入的代码
在脚本执行时候,会新开启一个bash,执行完脚本后会回到原来的bash,每个bash之间都是不关联的,单独的个体
脚本执行的方式
- 需要执行权限:路径 + 文件名
路径(绝对路径和相对路径都可以)
- 相对路径:./脚本名
- 绝对路径:/脚本名
- 不需要权限:直接使用shell程序解释
- shell + 文件名
- bash + 文件名
- source或者 . 不需要权限(不建议使用,会影响当前环境)
- source 文件名
- . 文件名
- source=.
脚本执行逻辑
- 顺序执行:程序从上到下顺序执行
- 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
- 循环执行:程序执行过程中需要重复执行多次某段语句
错误类型
- 命令错误
不会影响后续执行,只会出现报错信息
- 语法错误
会出现语法报错信息
- 逻辑错误
不是错误,是能力问题,可以使用bash -x 脚本名对脚本进行追踪,查看哪里有错误;bash -n 脚本名也可以调试脚本
重定向
重定向的意思就是 ,不通过标准输出到屏幕上,输出到你指定的位置
交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
输出重定向
输入重定向
多行重定向
read -p
从键盘输入的内容变成变量
常见的shell环境变量
- 自定义变量:由用户自己定义,修改和使用
- 环境变量:由系统维护,用户设置工作环境
- 只读变量:只可以读取不可以更改
- 位置变量:通过命令行给脚本传递参数
- 预定义变量:bash中内置的一类变量,不能修改,有规定好的变量,供使用
特殊变量
| 符号 | 功能 |
|---|---|
| {} | 定义变量范围,确定一个变量的长度 |
| '' | 里面的参数不被识别,不识别变量,只会被看成普通符号 |
| "" | 能识别变量,并且保留格式 |
| `` | 反撇号,调用命令执行结果,不会被替换变量 |
语言分为
- 汇编语言:需要硬件,源代码写好,一次性编译
- 解释型语言:shell,写一条,传给bash。执行一条
环境变量
env:可以查看所有环境变量
| 环境变量 | 功能 |
|---|---|
| $USER | 表示用户名称 |
| $HOME | 表示用户的宿主目录 |
| $LANG | 表示语言和字符集 |
| $PWD | 表示当前所在工作目录 |
| $PATH | 表示可执行用户程序的默认路劲 |
只读变量
变量值不允许修改(重新赋值)的情况
位置变量
- 位置变量也称为位置参数
- 位置变量大于10,需要使用{}括起来
预定义变量
系统定义好的变量,直接拿来使用
| 变量 | 功能 |
|---|---|
| $* | 表示将所有参数看做一个整体返回,并且返回所有 |
| $@ | 表示将所有参数的内容分割成n份,每份都当做一个整体返回出去 |
| $? | 表示表示返回上一次命令的结果,0表示成功,非0表示不成功 |
| $# | 表示命令行中位置参数的总个数 |
| $0 | 表示当前执行脚本的名字 |
$!|后台执行任务的最后一个id
**$@与¥星号(写的时候要写英文)只有在被双引号包起来的时,才会有差异**
## 比较整数数值
公式:[ 整数1 操作数 整数2 ]
| 比较 | 功能 |
| --- | --- |
| -eq | 等于 |
-ne|不等于
-gt|大于
-lt|小于
-le|小于或者等于
-ge|大于或者等于


## 实验
提取CPU型号:


- -f2:表示取第二列
- cut -d:指定分割符
### 写在脚本里面
名字自定义一下



## 逻辑测试
- &&:逻辑与,表示全真才为真,一假则全为假
- ||:逻辑或,表示一真即为真,有一个为假也是真
- !:逻辑否
## echo语句
| echo命令 | 意思 |
| --- | --- |
| echo -n | 表示不换行输出 |
echo -e|表示输出转义符
### 选项
| 选项 | 功能 |
| --- | --- |
| \n | 输出换行 |
\r|光标移至行首,并且不换行
\s|当前shell的名称,如bash
\t|插入Tab键
\f|换行,但光标仍停留在原处
\\|表示插入“\”本身
\b|表示退格,不显示前一个字符
\c|抑制更多的输出或不换行


**注意:空格键和Tab键不能混用**
## date
查看当前系统时间
- -d:你描述的日期,显示指定字符串所藐视的时间,而非当前时间
- %F:完整的日期格式,等价于%Y-%m-%d
- %T:时间(24小时制)(hh:mm:ss)

## 文件测试test
测试文件是否为目录
- test -d /etc
-d 前面一定要有空格,也是测试文件是否是目录,打全括号
- [ -d /dev ]
### 操作符
| 操作符 | 功能 |
| --- | --- |
| -d | 测试是否为目录(directory) |
-e|测试目录文件是否存在(exist)
-a|测试目录或文件是否存在(exist)
-f|测试是否为文件
-r|测试当前用户是否有权限读取
-w|测试当前用户是否有权限写入
-x|测试当前用户是否有权限执行
-L|测试是否为软连接文件
- 测试权限是以操作权限为准
- -a不建议使用
- **删掉软连接**
**rm -rf 123**
- **将软连接里面的文件全部删掉**
**rm -rf 123/**