1、脚本相关命令
1.1 tr
tr 具有 替换、压缩、删除的功能,文本处理工具,后面跟正则表达式,处理文本内容或者字符串
| 选项 | 含义 |
|---|---|
| -d | 删除 |
| -s | 压缩 |
| -c | 补集 |
tr 1 a 把1替换成a
tr -d 1 遇到1就删掉
tr -d % 删除%
tr -s 1 把连续的多个1 压缩为单个1
示例:
[root@localhost ~]# vim abc
[root@localhost ~]# cat abc
a%
b%
c%
dd$
[root@localhost ~]# cat abc |tr -d % //删除%
a
b
c
dd$
1.2 seq 分隔符
shell中默认的换行符是回车。
| 选项 | 含义 |
|---|---|
| -s | 指定分隔符 |
示例:
[root@localhost ~]# seq 100 //打印 从1-100
1
2
3
4
...
100
[root@localhost ~]# seq 10 |cat -A //cat选项只有大A(查看隐藏字符),没有小a
1$
2$
3$
4$
5$
6$
7$
8$
9$
10$
[root@localhost ~]# seq -s + 5 //打印1-5,指定分隔符是+
1+2+3+4+5
[root@localhost ~]# seq -s - 5
1-2-3-4-5
[root@localhost ~]# seq -s + 5 |bc //计算1-5的和,bc是计算器,计算总和
15
小拓展:access.log是日志文件,访问日志
1.3 cut 切列
| 选项 | 含义 |
|---|---|
| -d | 指定分隔符 |
| -f | 指定列 |
| -c | 取字符 |
-f 格式:
- #,#[,#]:离散的多个字段,例如 1,3,6
- #-#:连续的多个字段, 例如 1-6
- 混合使用:1-3,7
示例:
[root@localhost ~]# cut -d: -f1 /etc/passwd //以:为分隔符,并且只取第1列。
[root@localhost ~]# cut -d: -f1,3 /etc/passwd //取第1列和第3列
cut命令弊端: 不能将连续的字符当作分隔符
1.4 sort 排序
默认不以数字大小排序,sotr默认先以a-z,再以0-9排序
| 选项 | 含义 |
|---|---|
| -k | 指定列 |
| -n | 按照数字大小排序 |
| -r | 倒序 |
| -t | 指定分隔符 |
| -R | 随机排序 |
| -f | 忽略大小写 |
1.5 uniq 去重
只能将连续的重复部分去掉
| 选项 | 含义 |
|---|---|
| -c | 显示出现的次数 |
| -d | 仅显示重复过的行 |
| -u | 仅显示不曾重复的行 |
2、shell脚本
2.1 shell脚本构成
-
脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect
-
注释信息:以#开头的语句表示为注释信息 # 注 释
-
可执行语句:比如echo命令用于输出“ ”之间的字符串
-
直接使用:bash + 脚本,直接使用shell程序来读取脚本中的命令,不需要执行权限
-
使用路径执行,需要权限
- 相对路径
- 绝对路径
-
source 或者. 不需要权限。但不推荐该种方法。
-
// 总结:前两种方法,执行中不会影响当前环境中bash设置,会开启一个新的bash脚本;但是第三种,会影响当前bash 环境中的配置。
2.2 脚本执行方式
- 顺序执行:程序按从上到下顺序执行 。命令出错不会影响接下来的命令,会继续执行,注意这样有风险,如何规避:
使用此命令:set -e 一旦出错,脚本立即停止执行。
检查命令错误和语法错误:
- bash -n
- bash -x
- 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
- 循环执行:程序执行过程中需要重复执行多次某段语句
- 已知次数
- 已知条件
// 不然会成为死循环
安装本地yum仓库的脚本:
3、重定向
重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置。
- 标准输入:从该设备接收用户输入的数据
- 标准(正确)输出:通过该设备向用户输出数据
- 标准错误输出:通过该设备报告执行出错信息
| 类型 | 设备文件 | 文件描述编号 |
|---|---|---|
| 标准输入 | /dev/stdin | 0 |
| 标准输出 | /dev/stdout | 1,可以省略 |
| 标准错误输出 | /dev/stderr | 2 |
// 上面设备文件,相当于做了个软链接。
3.1 重定向输入
| 操作符 | 含义 |
|---|---|
| < | 从指定的文件读取数据,而不是从键盘输入 |
| << |
[root@localhost ~]# vim test1.txt
你好,世界!
[root@localhost ~]# cat < test1.txt
你好,世界!
3.2 重定向输出
3.2.1 正确输出和错误输出
- 1是正确,1可以省略
- 2是错误,2不可以省略
| 操作符 | 含义 |
|---|---|
| 1> | 覆盖 |
| 1>> | 追加(追加到尾部,不会覆盖原有内容) |
| 2> | 将错误信息保存到指定文件(覆盖原有内容) |
| 2>> | 将错误信息追加到指定文件 |
3.2.2 混合输出
| 操作符 | 含义 |
|---|---|
| &> | 将正确和错误输出,都保存到同一个文件中。 &可以放到前面,也可以放后面,效果一样。 |
4、变量
变量前加$
注意:脚本中,命令尽量不要写死,不然修改会很麻烦,设置变量是为了方便我们修改脚本。
哪些不能设置成变量:
- 1、2是常量,不要设置
- 系统保留的占位符,比如if while
4.1 变量分类
- 环境变量
- 预定义变量
- 位置变量
- 只读变量
4.2 定义变量
shell 数据类型都是字符串
变量是临时性的,想要永久使用,可以写到 .bashrc或者/etc/profile,(一般用/etc/profile,是环境变量)
4.3 变量的四大符号
{ } :确定变量的起始结束范围,建议只要有变量就加
“ ” :弱引用,可以识别变量 ,聪明的
‘ ’ :强引用,不识别变量, 不聪明
`` :反撇号,调用命令执行结果,效果等同于$()