shell条件测试

ops/2025/1/12 20:38:55/

为了能够正确处理Shell程序运行过程中遇到的各种情况,Linux Shell提供了一组测试运算符。 通过这些运算符,Shell程序能够判断某种或者几个条件是否成立。条件测试在各种流程控制语句,例如 判断语句和循环语句中发挥了重要的作用,所以,了解和掌握这些条件测试是非常重要的。

1、条件测试的基本语法

在shell程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或假。当指定的条 件为真时,整个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0 值。

2、文件测试表达式

测试文件的读、写、执行等属性,不光是根据文件属性rwx的标识来判断,还要看当前执行测试的用户是 否真的可以按照对应的权限操作文件。

①test示例:

[root@localhost test3]# lltotal 0-rw-r--r--. 1 root root 0 Feb 20 10:35 file[root@localhost test3]# test -f file;echo $?0[root@localhost test3]# test -f file1;echo $?1[root@localhost test3]# test -x file;echo $?1

②[]示例(注意测试表达式和方括号两边需要有空格)

[root@localhost test3]# lltotal 0-rw-r--r--. 1 root root 0 Feb 20 10:35 file[root@localhost test3]# [ -f file ];echo $?0[root@localhost test3]# [ -f file1 ];echo $?1[root@localhost test3]# [ -w file ];echo $?0

③[[]]示例(注意测试表达式和[[]]两边需要有空格)

[root@localhost test3]# lltotal 0-rw-r--r--. 1 root root 0 Feb 20 10:35 file[root@localhost test3]# [[ -f file ]];echo $?0[root@localhost test3]# [[ -f file1 ]];echo $?1[root@localhost test3]# [[ -x file ]];echo $?1

注意:如果测试的文件路径是用变量来代替,变量一 定要加引号

3、字符串测试表达式

①test示例

[root@localhost test3]# test -n abc;echo $?0[root@localhost test3]# test -n "";echo $?1[root@localhost test3]# test -n " ";echo $?0[root@localhost test3]# test -z '';echo $?0[root@localhost test3]# test -z abc;echo $?1[root@localhost test3]# test -z ' ';echo $?1[root@localhost test3]# test abc = abcd ;echo $?    
1[root@localhost test3]# test abc=abcd ;echo $?0

②[]示例

[root@localhost test3]# [ -n '' ];echo $?1[root@localhost test3]# [ -n ' ' ];echo $?0[root@localhost test3]# [ -z '' ];echo $?0[root@localhost test3]# [ abc=abcd ];echo $?0[root@localhost test3]# [ abc = abcd ];echo $?      
1

③[[]]示例

[root@localhost test3]# [[ -n abc ]];echo $?0[root@localhost test3]# [[ -n ' ' ]];echo $?0[root@localhost test3]# [[ -n '' ]];echo $?1[root@localhost test3]# [[ abc=acd ]] ;echo $?0[root@localhost test3]# [[ abc = acd ]] ;echo $? #注意等号两边需要有空格

注意:测试对象是变量时,变量需要加引号

[root@localhost test3]# test -n $name;echo $?
0
[root@localhost test3]# test -n "$name";echo $?
1
[root@localhost test3]# [ -n $name ];echo $?
0
[root@localhost test3]# [ -n "$name" ];echo $?

4、 整数测试表达式

注意: =和!=也可在[]中作比较时使用,在[]中也可使用>和<符号,但需要使用反斜线转义,有时不转译虽然语 法不会报错,但是结果可能会不对;

在[[]]中也可使用包含-gt和-lt的符号,不建议使用;

比较符号两端也要有空格。

5、 逻辑操作符


http://www.ppmy.cn/ops/149544.html

相关文章

基于华为ENSP的OSPF不规则区域划分深入浅出(5)

本篇技术博文摘要 &#x1f31f; OSPF不规则区域划分及其问题解决方案涉及多个技术手段&#xff0c;包括隧道、虚链路和路由重发布等。合理的网络设计和配置对于避免网络中出现的环路问题至关重要。通过多进程双向重发布等方式&#xff0c;能够有效地优化路由协议的互通性和网络…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

web前端-html

HTML部分 HTML&#xff1a;超文本标记语言。是万维网web编程的基础&#xff0c;web是建立在超文本基础上的。HTML 是万维网的基石 打开www.baidu.com的页面源代码可见 超文本标记超的含义 1.最重要的标签&#xff0c;超链接标签&#xff0c;可跳转页面&#xff0c;关联所有页…

免费网站源码下载指南:如何安全获取并降低开发成本

许多开发者或是需要建立网站的人&#xff0c;可以方便地获取免费网站源码。这样的下载能帮助他们降低开发费用&#xff0c;迅速构建起基本框架。但在此过程中&#xff0c;仍有许多需要注意的事项。 许多开发者或是需要建立网站的人&#xff0c;可以方便地获取免费网站源码。这…

附加共享数据库和共享数据库的区别

**“附加共享数据库”和“共享数据库”**实际上指的是两种不同的概念&#xff0c;尽管它们在一定程度上可能会有交集&#xff0c;下面从两个角度解释它们的区别&#xff1a; 1. 附加共享数据库 这是一个特定操作&#xff0c;主要指的是通过 ATTACH DATABASE 命令&#xff0c;将…

Flutter使用BorderRadiusTween实现由矩形变成圆形的动画

BorderRadiusTween 是插值动画中&#xff0c;用于组件边框半径的类&#xff0c;专门作用于组件边框和半径动化过度。 这个类继承自Tween&#xff0c;用法相似。 下面是示例写法 class BorderRadiusTweenPage extends StatefulWidget {overrideState<StatefulWidget> c…

Rust 1.84.0 发布

Cargo 依赖版本选择改进 稳定了最小支持 Rust 版本&#xff08;MSRV&#xff09;感知的解析器&#xff0c;该解析器会优先选择与项目声明的 MSRV 兼容的依赖版本&#xff0c;减少了维护者支持旧工具链的工作量&#xff0c;无需手动为每个依赖选择旧版本。可以通过.cargo/config…

简单易用的PDF工具箱

软件介绍 PDF24 Creator是一款简单易用的PDF工具箱&#xff0c;而且完全免费&#xff0c;没有任何功能限制。既可以访问官网在线使用各种PDF工具&#xff0c;也可以下载软件离线使用各种PDF工具。 软件功能 1、PDF转换 支持将多种文件格式&#xff08;Word、PowerPoint、Exc…