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

判断账户是否存在,如不存在则创建
边栏推荐
猜你喜欢

numpy

袋鼠云思枢:数驹 DTengine,助力企业构建高效的流批一体数据湖计算平台

Classical Architecture and Memory Classification of Embedded Software Components

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!...

Fastjson反序列化

QT with OpenGL(Shadow Mapping)(面光源篇)

How to retrieve IDC research reports?

【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解

LyScript 实现对内存堆栈扫描

RICON:NER SOTA 又来!
随机推荐
在线生成接口文档
[Detailed explanation of binary search plus recursive writing method] with all the code
微信多开批处理(自动获取安装路径)
面试一面
LyScript implements memory stack scanning
MATLAB Programming and Applications 2.6 Strings
嵌入式软件组件经典架构与存储器分类
complete knapsack problem
C#+WPF 单元测试项目类高级程序员必知必会
Babbitt | Metaverse daily must-read: Players leave, platforms are shut down, and the digital collection market is gradually cooling down. Where is the future of the industry?...
Summary of redis basics - data types (strings, lists, sets, hashes, sets)
实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣
How to use outside the PHP command in the container
代码分析Objective-C中的深拷贝与浅拷贝
ERC20通证标准是什么?
完全背包问题的思路解析
How to retrieve IDC research reports?
Matplotlib
【LeetCode—第2题 两数之和 代码详解 】附有源码,可直接复制
【TypeScript】Why choose TypeScript?