当前位置:网站首页>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通,只能先 && 在前 ||在后 不能对调

判断账户是否存在,如不存在则创建
边栏推荐
- CADEditorX ActiveX 14.1.X
- 苏州大学:从PostgreSQL到TDengine
- For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received
- 在安装GBase 8c数据库的时候,报错显示“Host ips belong to different cluster”。这是为什么呢?有什么解决办法?
- MATLAB programming and application 2.7 Structural data and unit data
- 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!...
- 3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
- 如何检索IDC研究报告?
- 鸿蒙第三次
- 【文件IO的简单实现】
猜你喜欢

Win10/11 删除文件资源管理器左侧栏目文件夹

Matplotlib

MySQL数据库高级使用

Advanced use of MySQL database

Polymorphism in detail (simple implementation to buy tickets system simulation, covering/weight definition, principle of polymorphism, virtual table)

在 Chrome 开发者工具里通过 network 选项模拟网站的离线访问模式

Spinner文字显示不全解决办法
![[Star Project] Little Hat Plane Battle (9)](/img/e3/c7d2728080bcdccc181a7e5c50ee6f.png)
[Star Project] Little Hat Plane Battle (9)

程序员架构修炼之道:软件架构基本概念和思维

科普大佬说 | 黑客帝国与6G有什么关系?
随机推荐
[Star Project] Little Hat Plane Battle (9)
CADEditorX ActiveX 14.1.X
深度学习100例——卷积神经网络(CNN)实现服装图像分类
嵌入式软件组件经典架构与存储器分类
"Global Digital Economy Conference" landed in N World, Rongyun provides communication cloud service support
numpy
[Output each bit of an integer, from high to low.With and without recursion]
What is the ERC20 token standard?
多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)
oracle计算同、环比
This article takes you to understand the principle of CDN technology
Traceback (most recent call last): File
像用户体验设计师一样思考
机器比人更需要通证
Web Server 设置缓存响应字段的一些推荐方案
一文带你弄懂 CDN 技术的原理
【文件IO的简单实现】
LyScript 实现对内存堆栈扫描
巴比特 | 元宇宙每日必读:玩家离场,平台关停,数字藏品市场正逐渐降温,行业的未来究竟在哪里?...
直播弱网优化