一、shell条件测试
1.1测试格式
测试的方法;
1.1.1格式1
test 条件表达式
exp:
类似的参数除了 -d,-f等等还有很多,以下列出:
参数 | 含义 |
---|---|
-f | 存在时返回真 |
-b | 存在并且是块文件时返回真(返回0) |
d | 存在并且是一个目录时返回真 |
-h | 存在并且是符号链接文件时返回真 (或 -L filename) |
-u | 指定的文件或目录存在并且设置了SUID 位时返回真 |
-c | 存在并且是字符文件时返回真 |
-e | 指定的文件或目录存在时返回真 |
-g | 指定的文件或目录存在并且设置了SGID 位时返回真 |
-k | 指定的文件或目录存在并且设置了"粘滞"位时返回真 |
-p | 存在并且是命名管道时返回真 |
-r | 指定的文件或目录存在并且可读时返回真 |
-s | 存在并且文件大小大于0 时返回真 |
-S | 存在并且是socket 时返回真 |
-t fd | 当fd 是与终端设备相关联的文件描述符时返回真 |
-w | 指定的文件或目录存在并且可写时返回真 |
-x | 指定的文件或目录存在并且可执行时返回真 |
-O | 存在并且被当前进程的有效用户id 的用户拥有时返回真(字母O 大写) |
-G | 存在并且属于当前进程的有效用户id 的用户的用户组时返回真 |
1.1.2格式2
[ 条件表达式 ] 也即中括号里直接加上要测试的内容
exp:
1.1.3格式3
[[ 条件表达式 ]] 使用两个中括号
&&调用正则时,请使用双中括号。 一般很少使用
1.2文件测试
文件测试的方法可以使用上面提到的测试方法。这里不再细讲。
1.3数值测试
操作符
操作符 | 含义 |
---|---|
-gt | 大于 |
-lt | 小于 |
-eq | 等于 |
-ne | 不等于 |
-ge | 大于等于 |
-le | 小于等于 |
exp:
1.4字符串测试
二、流程控制 (if语句)
2.1if单分支结构
语法:
if 条件测试
then 命令序列
fi
exp:
需求 :编写脚本,由用户输入用户名,如果用户不存在,则创建该用户,并设置密码为123456
2.2if双分支结构
语法:
if 条件测试
then
命令序列
else
命令序列
fi
exp:
需求:编写脚本,由用户输入用户名,如果用户不存在,则创建该用户,并设置密码为123456;否则,提示用户已经存在
2.3if多分支结构
语法:
多分支结构
if 条件测试1
then 命令序列
elif 条件测试2
then 命令序列
elif 条件测试3
then 命令序列…
else 命令序列
fi
exp:
需求:编写脚本,取出系统时间的小时,对数字进行判断
6–10 this is morning
11-13 this is noon
14-18 this is afternoon
其他 this is night
在多分支结构中,所有的if都针对同一变量进行判断。双分支也是一种特殊的多分枝。
2.4if嵌套结构
语法:
**嵌套结构
if 条件测试1 then 命令序列
if 条件测试1 then 命令序列
else 命令序列
fi
else 命令序列
fi**
exp:
三、模式匹配 (case 语句)
3.1case介绍以及它的简单案例
case语法和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。
case 语法:
*case 变量 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
)
无匹配后命令序列
esac
exp:
案例1:简单的模式匹配
邀请用户输入待删除用户名。
询问用户,确定要继续删除吗 yes/no: " y
我们先来看看if语句编写:
完全可以使用elif语句再添加一次判断,而这次判断可以设置多个选项,这其实就和case语句本质上是一样的如下图:
那么下面我们使用case语句来编写这个脚本:
3.2case案例2 设置跳板机
现在一定规模互联网企业,往往都拥有大量服务器,如何安全并高效的管理这些服务器是每个系统运维或安全运维人员必要工作。现在比较常见的方案是搭建堡垒机环境作为线上服务器的入口,所有服务器只能通过堡垒机进行登陆访问。
=======================================================================================================
因此需要通过终端连接到远程开发机进行工作,由于安全等因素,登录开发机时需要先登录跳板机,然后在跳板机上再实际连接开发机,如下图所示:
登录跳板机成功后,在跳板机分配的终端中使用ssh命令再登录开发机,跳板机和开发机之间采用带密码的ssh验证,因此需要输入ssh私钥的密码。
那么接下来我们就用case语句编写一个脚本来设置一个跳板机。
3.3case案例3 系统管理工具箱
可以编写一个脚本,设置一些快捷键在里边。
exp:
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序