当前位置:网站首页>shell编程-测试
shell编程-测试
2022-08-03 11:04:00 【51CTO】
条件测试命令
条件测试:判断需求是否满足,有测试过程来实现
实现评估布尔申明,以便在条件性环境下执行
命令若执行为真,则状态码变量$?返回0
命令若执行为假,则状态码变量$?返回1
条件测试命令:
test 表达式
[空格 表达式 空格] 和test等价,建议使用[]
[[空格 表达式(支持正则) 空格 ]]
变量测试
[ -v NAME ] 判断变量是否定义
[ -R NAME ] 判断变量是否定义并且被引用 ;bash 4.4新特性
数值测试
-eq 是否等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
字符串测试
test和[]方式
-z NAME 字符串是否为空,没定义或空为真,不空为假
-n NAME 字符串是否不空,不空为真,空为假 NAME等同
NAME1 = NAME2 是否等同,=前后有空格
NAME1 != NAME2 是否不能等同
> ascii码是否大于ascii码
< 是否小于
[[ ]] 用法:建议需使用正则或通配符才使用
== 通配符方式
=~ 扩展正则表达式方式
IP正则表达式 ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5]) 包含 0.0.0
文件测试
存在性测试
-a file :同-e 是否存在
-e file :文件存在性测试,存在为真,不存在为假
-b file :文件是否是块文件
-c file :是否是字符设备文件
-d file :是否是目录文件
-f file : 是否是普通文件
-h file 或 -L file : 是否是符号链接文件
-p file : 是否为命名管道文件
-s file :是否为套接字文件
文件权限测试
-r file :是否存在且可读
-w file :是否可写
-x file :是否可执行
-u file :是否存在且拥有suid权限
-g file :是否存在且拥有sgid权限
-k file :是否存在且拥有sticky权限
注意:最终结果由用户对文件的实际权限决定,而为文件属性决定 比如root的权限
文件属性测试
-s file 文件是否为非空
-t fd 文件描述符是否在其他终端打开
-N file 上一次读取是否被修改
-O file 当前用户是否是文件属主
-G file 当前用户组是否为文件属组
FILE1 -ef FILE2 file1是否是file2的硬链接
FILE1 -nt FILE2 file1是否新于file2
FILE1 -of FILE2 file1是否旧于file2
(){}批量执行命令
(command1;command2;...)和{空格command1;command2;...;}可以将多个命令组合在一起,批量执行
()会开启一个子shell,里面的变量就只能在子shell上运行
{}不会开启子shell,变量会影响当前环境
$$ $BASHPID不同点
当您使用 $ $时,即使在子 shell 中,它也会存储创建它的父进程的进程 ID。但是 BASHPID 将存储当前进程 ID,即当在括号内调用时,它将存储子进程 ID。$PPID是相对于$$;意味着脚本文件下运行的进程ID。对于任何给定的脚本,当它运行时,它将只有一个“主”进程ID。无论您调用多少个子壳,$$
将始终返回与该脚本关联的第一个进程ID。 BASHPID
将向您显示当前bash实例的进程ID.
{} 不会开启子shell
组合测试条件
方式一
[ expression1 -a expression2 ] 并且关系
[ expression1 -o expression2 ] 或关系
[[]]不支持
方式二
逻辑与 && 逻辑或 ||
COMMAND1 && COMMAND2 #并且,短路与,代表条件性的AND THEN如果COMMAND1 成功,将执行COMMAND2,否则,将不执行COMMAND2
COMMAND1 || COMMAND2 #或者,短路或,代表条件性的OR ELSE如果COMMAND1 成功,将不执行COMMAND2,否则,将执行COMMAND2
! COMMAND #非,取反
判断ip是否可ping通,只能先 && 在前 ||在后 不能对调
判断账户是否存在,如不存在则创建
边栏推荐
- 3分钟实现内网穿透(基于ngrok实现)
- 机器学习概述
- Machines need tokens more than people
- MATLAB programming and application 2.7 Structural data and unit data
- 完全背包问题
- 【网络原理的概念】
- 本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现
- [Output each bit of an integer, from high to low.With and without recursion]
- MapReduce中ETL数据清洗案例
- ScrollView嵌套RecyclerView滚动冲突
猜你喜欢
Skills required to be a good architect: How to draw a system architecture that everyone will love?What's the secret?Come and open this article to see it!...
卷起来!阿里高工携18位高级架构师耗时57天整合的1658页面试总结
Activiti产生的背景和作用
再谈“雷克萨斯”安全装置失效!安全手册疑点重重,网友:细思极恐
【二分查找详解外加递归写法】附有全部代码
【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解
谷歌实用插件分享
MySQL数据库实战(1)
Fastjson反序列化
Android 技术面试准备(含面试题及答案)
随机推荐
怎么在外头使用容器里php命令
Depth study of 100 cases - convolution neural network (CNN) to realize the clothing image classification
[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly
微信小程序获取用户手机号码
MySQL数据库实战(1)
What is a smart contract?
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
Summary of redis basics - data types (strings, lists, sets, hashes, sets)
记住用户名案例(js)
Analysis of the idea of the complete knapsack problem
JS快速高效开发技巧指南(持续更新)
Skills required to be a good architect: How to draw a system architecture that everyone will love?What's the secret?Come and open this article to see it!...
[Detailed explanation of binary search plus recursive writing method] with all the code
oracle计算同、环比
CADEditorX ActiveX 14.1.X
历史拉链数据处理有人做过吗
增加WebView对localStorage的支持
机器比人更需要通证
MapReduce中ETL数据清洗案例
多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)