shell基础
写在最前,作为一名软件测试人员,shell基础也是必不可少的技能,就笔者遇到的工作场景中,在linux部署测试环境,查看错误信息,监控服务器性能都会用到shell语句,此外,不管是dockerfile,或者是自动化脚本都需要用到这块的技术,这篇文章一方面也是梳理一下比较杂乱的技能点,另一方面也是留个档,方面后面持续查看学习。本文主要梳理shell基础,详见正文。
一、shell介绍
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到linux内核。它是一门弱类型的脚本语言。
二、shell脚本格式
shell脚本是以.sh结尾的文件,其中文件的第一行内容为#!/bin/bash,第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行。
#!/bin/bash
三、shell变量及参数传递
- 变量定义及使用
shell变量的名称定义与其他变成语言一致,包括:
1. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
2. 中间不能有空格,可以使用下划线,不能使用标点符号
3. 不能使用bash里的关键字
这里要特别注意的是:变量名和等号之间不能有空格,如下:
变量值输出:echo $变量名
变量释放:unset 变量
案例如下:
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122203233064-197671763.png)
特殊变量定义:双引号、单引号、反单引号
"" 双引号括起来的变量:会将其中的变量转变为实际值输出
'' 单引号括起来的变量:输入什么就是什么
`` 反单引号包含的内容:会作为shell命令执行,返回结果
样例如下:
- 参数传递
输入操作:read -p "提示信息" 变量名
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122204437454-757737615.png)
以文件形式接收参数:
$1--->传递第一个参数
$n---->传递第n个参数
$0:显示的是文件名称
$@:显示所有的参数
$#:显示的参数的个数
样例如下:
脚本内容:
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122205040395-1301376260.png)
输出内容:
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122204829186-390162468.png)
- 重定向
>覆盖,>>追加
案例如下:执行 >> 两遍追加,输入内容是追加的,如果是执行 > ,则会覆盖删除
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122205501080-551107207.png)
四、shell逻辑判断
- 分支结构
if分支
if...then...elif...then...else...fi分支,案例如下:
注意:[] 前后都需要有空格
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122210145646-1780028210.png)
case分支
第一行最后必须为in,每个执行语句以;;结束,最后以esac结束,如下:
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122210651894-191686502.png)
补充:
逻辑运算符:
-a :且
-o :或
! : 否
比较运算符:
-eq:equal 相等
-ne:not equal 不相等
-ge:greater equal 大于等于
-gt:greater than 大于
-le:less equal 小于等于
-lt:less than 小于
字符串比较:
== 相等
!= 不等
-z 判断字符串长度是否为0
-n 判断字符床是否为空
测试文件/目录状态 :
-d dir 判断是否为目录
-f file 判断是否为文件
-e file 判断文件或目录是否存在
-w、-r 、-x 判断文件是否可写,可读、可执行
五、shell循环体
for循环
格式:
for 变量名 in 列表
do
语句
done
案例如下:
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122212107741-1966251020.png)
其中:命令: seq start size max,可以生成一个指定起始、结尾、步长的列表
while循环
格式:
while [ 条件 ]
do
执行语句
done
案例如下:
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122213427220-706754045.png)
六、shell函数
定义:函数名(){}
案例如下:
![](https://img2020.cnblogs.com/blog/1848974/202011/1848974-20201122213821079-805359313.png)