当前位置:网站首页>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通,只能先 && 在前 ||在后 不能对调
判断账户是否存在,如不存在则创建
边栏推荐
- 直播弱网优化
- What is a smart contract?
- 如何检索IDC研究报告?
- LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二
- What is the relationship between The Matrix and 6G?
- GBase 8c与openGauss是什么关系?
- CADEditorX ActiveX 14.1.X
- [Detailed explanation of binary search plus recursive writing method] with all the code
- 成为优秀架构师必备技能:怎样才能画出让所有人赞不绝口的系统架构图?秘诀是什么?快来打开这篇文章看看吧!...
- 再谈“雷克萨斯”安全装置失效!安全手册疑点重重,网友:细思极恐
猜你喜欢
创建C UDR时,指定的HANDLESNULLS的作用是什么?
[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly
LyScript implements memory stack scanning
科普大佬说 | 黑客帝国与6G有什么关系?
2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
Who is more popular for hybrid products, depending on technology or market?
Android 技术面试准备(含面试题及答案)
MySQL database combat (1)
numpy
鸿蒙第三次
随机推荐
[Output each bit of an integer, from high to low.With and without recursion]
Machine Learning Overview
Win10/11 删除文件资源管理器左侧栏目文件夹
在线生成接口文档
complete knapsack problem
Depth study of 100 cases - convolution neural network (CNN) to realize the clothing image classification
"Global Digital Economy Conference" landed in N World, Rongyun provides communication cloud service support
Question G: Word Analysis ← Questions for the second provincial competition of the 11th Blue Bridge Cup Competition
Advanced use of MySQL database
巴比特 | 元宇宙每日必读:玩家离场,平台关停,数字藏品市场正逐渐降温,行业的未来究竟在哪里?...
历史拉链数据处理有人做过吗
使用.NET简单实现一个Redis的高性能克隆版(一)
白帽黑客与留守儿童破壁对“画”!ISC、中国光华科技基金会、光明网携手启动数字安全元宇宙公益展
ABAB-740新语法
MATLAB程序设计与应用 2.7 结构数据与单元数据
Simple implementation of a high-performance clone of Redis using .NET (1)
Android 技术面试准备(含面试题及答案)
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?...
LyScript 实现对内存堆栈扫描
RICON:NER SOTA 又来!