十三、SHELL条件测试

一、命令执行结果判定

&& 在命令执行后如果没有任何报错时会执行符号后面的动作

|| 在命令执行后如果命令有报错会执行符号后的动作

示例:

[root@node ~]# vim sen.sh
#!/bin/bash
ls /mnt/file &> /dev/null && {echo /mnt/file is existecho yes
}|| {echo /mnt/file is not existecho no
}
[root@tnode ~]# sh sen.sh
/mnt/file is not exist
no

二、条件判断方法

在shell程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或假

条件测试语法说明
语法1: test< 测试 表达式>test命令和测试表达式>之间至少有一个空格
语法2:[ <测试表 达式> ]该方法和test命令的用法一样,[]的边界和内容之间至少有一个空格
语法3:[[ <测试表 达式> ]]比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可 以使用通配符等进行模式匹配
语法4:(( <测试表达 式>))一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数

示例:

1.test示例

[root@node ~]# test $a = $b && echo yes || echo no
yes

2.[]示例

[root@node ~]# [ $a = $b ] && echo yes || echo no
yes

3.[[]]示例

[root@node ~]# a=2
[root@node ~]# [[ $a =~ 2|10 ]] && echo yes || echo no
yes

4.(())示例

[root@node ~]# a=3
(($a > 0,$a<10)) && echo yes
[root@node ~]# a=-1
[root@node ~]# (($a < 0|$a>10)) && echo yes
yes

三、判断表达式

1.文件判断表达式

常用的文件测试操作符

说明

-a/-e 文件文件是否存在
-b 文件文件是否存在,且为块文件,如果文件存在且是一个块文件,则结果 为0
-c 文件文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结 果为0
-L 文件文件存在且为链接文件则为真
-d 文件文件存在且为目录则为真,即测试表达式成立
-f 文件文件存在且为普通文件则为真,即测试表达式成立
-s 文件文件存在且文件大小不为0则为真
-u 文件文件是否设置suid位,如果设置了suid,则结果为0
-r 文件文件存在且可读为真
-w 文件文件存在且可写为真
-x 文件文件存在且可执行则为真
f1 -nt f2,nt为newer than文件f1比文件f2新则为真,根据文件的修改时间来计算
f1 -ot f2,ot为older than文件f1比文件f2旧则为真,根据文件的修改时间来计算

示例:

a.判断文件是否存在

[root@node ~]# [ -a sen.sh ] && echo yes || echo no
yes

b.判断文件类型

[root@node ~]# [ -d /mnt ] && echo /mnt is directory
/mnt is directory

c.判断文件是否存在并不为空

[root@node ~]# [ -s file ] || echo file is not exist or file is empty file
file is not exist or file is empty file

d.判断文件权限

[root@node ~]# [ -x file ] || echo file is not execute
file is not execute

e.判定文件新旧

[root@node ~]# [ file -ot file1 ] && echo yes
yes

Note

在使用变量作为判断元素时需要用引号引用变量值
当checkdir未被赋值时[root@node ~]# [ -f $chekdir ] && echo yes || echo no
yes
[root@node ~]# [ -f "$chekdir" ] && echo yes || echo no
no

2.字符串测试表达式

常用字符串测试操作符说明
-n “字符串”若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero
-z “字符串”若字符串的长度为0,则为真,z可以理解为zero
“串1”=“串2”若字符串1等于字符串2,则为真,可使用==代替=
“串1”!=“串2”若字符串1不等于字符串2,则为真

示例:

a.检测变量是否为空

[root@node ~]# LEEVAR=sen
[root@node ~]# [ -z "$LEEVAR" ] && echo yes || echo no
no
[root@node ~]# [ -n "$LEEVAR" ] && echo yes || echo no
yes

b.比较字符

[root@node ~]# LEEVAR=sen
[root@node ~]# LEEVAR1=lazy
[root@node ~]# [ "$$LEEVAR" = "$LEEVAR" ] && echo yes || echo no
no
[root@node ~]# [ "$$LEEVAR" != "$LEEVAR" ] && echo yes || echo no
yes

四、阶段练习脚本

编写脚本效果如下:

[root@node ~]# sh checkfile.sh 
please input filename:     当未输入任何字符时回车Error: no checkfilename,Please input filename for check !! 报错please input filename: /mnt/leefile 当输入/mnt/leeifle时
文件不存在时/mnt/file is not exist当文件存在时输入文件类型/mnt/file is commom file 注意文件是什么类型就输出文件类型的相关输出

五.整数测试表达式

在[]以及test中使用的比较符在(())和[[]]中使用的比较符号说明
-eq==或=相等,全拼为equal
-ne!=不想等,全拼为not equal
-gt>大于,全拼为greater equal
-ge>=大于等于,全拼为greater equal
-lt小于,全拼为less than
-le<=小于等于,全拼为less equal

示例:

相等或不等

[root@node ~]# A=1;B=1
[root@node ~]# [ "$A" -eq "$B" ] && echo yes || echo no
yes
[root@node ~]# [ "$A" -ne "$B" ] && echo yes || echo no
no

大小对比

[root@node ~]# A=1;B=2
[root@node ~]# [ "$A" -gt "$B" ] && echo yes || echo no
no
[root@node ~]# [ "$A" -ge "$B" ] && echo yes || echo no
no
[root@node ~]# [ "$A" -lt "$B" ] && echo yes || echo no
yes
[root@node ~]# [ "$A" -le "$B" ] && echo yes || echo no
no

六、逻辑操作符

在[]中使用的逻辑操作符在test、[[]]和(())中使用的逻辑操作符说明
-a&&and,与,两端都为真,则结果为真
-o| |or,或,两端有一个为真,则结果为真
not,非,两端相反,则结果为真

示例:

[root@node ~]# ls -l senfile sen
-rw-r--r-- 1 root root 0 Apr 7 23:59 sen
-rw-r--r-- 1 root root 0 Apr 7 23:59 senfiletest 示例
[root@node ~]# test -f senfile -a -f sen && echo yes || echo no
yes
[root@node ~]# test -f senfile1 -a -f sen && echo yes || echo no
no
[root@node ~]# test -f senfile1 -o -f sen && echo yes || echo no
yes
[root@node ~]# test ! -f senfile1   && echo yes || echo no
yes
[root@node ~]# test -f senfile1   && echo yes || echo no
no[]示例
[root@node ~]# [ -f "senfile" -a -f "sen" ] && echo yes || echo no
yes
[root@node ~]# [ -f "senfile1" -a -f "sen" ] && echo yes || echo no
no
[root@node ~]# [ -f "senfile1" -o -f "sen" ] && echo yes || echo no
yes
[root@node ~]# [ ! -f "senfile1" ] && echo yes || echo no
yes[[]]示例
[root@node ~]# [[ -f "senfile" && -f "sen" ]] && echo yes || echo no
yes
[root@node ~]# [[ -f "senfile1" && -f "sen" ]] && echo yes || echo no
no
[root@node ~]# [[ -f "senfile1" || -f "sen" ]] && echo yes || echo no
yes
[root@node ~]# [[ ! -f "senfile1" ]] && echo yes || echo no
yes(())示例
[root@node ~]# A=3
[root@node ~]# (( $A >=0 && $A<5 )) && echo yes || echo no
yes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35620.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

1.1 Beginner Level学习之“使用 rosed 在 ROS 中编辑文件”(第九节)

学习大纲&#xff1a; 1. 使用 rosed rosed 是 ROS 自带的 Rosbash Suite 的一部分&#xff0c;它的目的是让你通过 ROS 包的名称快速编辑文件&#xff0c;而不用手动输入完整的路径&#xff0c;节省开发时间。 基本用法&#xff1a;$ rosed [package_name] [filename] 示例…

MySQL语句学习第三篇_数据库

MySQL语句学习第三篇_数据库 专栏记录MySQL的学习&#xff0c;感谢大家观看。 本章的专栏&#x1f4da;➡️MySQL语法学习 本博客前一章节指向➡️MySQL语句学习第二篇 本人的博客➡️:如烟花般绚烂却又稍纵即逝的主页 文章目录 MySQL的基础操作&#xff08;改与查&#xff0…

HCIA-openGauss_2_2连接与认证

设置客户端认证策略 设置配置文件参数 gssql客户端连接-确定连接信息 客户端工具通过数据库主节点连接数据库&#xff0c;因此连接前&#xff0c;需要获取数据库主节点的在服务器的IP地址及数据库主节点的端口号信息。 步骤1&#xff1a;以操作系统用户omm登录数据库主节点。…

什么?RayLink远程控制软件支持企业IT应用!

在当今企业IT管理中&#xff0c;远程控制工具扮演着不可或缺的角色。设想一下&#xff0c;你的团队成员分散在全球各地&#xff0c;或者员工正在远程工作&#xff0c;这时电脑突然出现问题。如果IT支持团队能够利用远程控制软件&#xff0c;比如RayLink&#xff0c;迅速远程接入…

【C++】——精细化哈希表架构:理论与实践的综合分析

先找出你的能力在哪里&#xff0c;然后再决定你是谁。 —— 塔拉韦斯特弗 《你当像鸟飞往你的山》 目录 1. C 与哈希表&#xff1a;核心概念与引入 2. 哈希表的底层机制&#xff1a;原理与挑战 2.1 核心功能解析&#xff1a;效率与灵活性的平衡 2.2 哈希冲突的本质&#x…

12月第1周AI资讯

阅读时间:3-4min 更新时间:2024.12.2-2024.12.6 目录 OpenAI CEO Sam Altman 预告“12天OpenAI”系列活动 腾讯HunyuanVideo:130亿参数的开源视频生成模型 李飞飞的World Labs发布空间智能技术预览版 中科院联手腾讯打造“AI带货王”AnchorCrafter OpenAI CEO Sam Alt…

10_C语言 -数组(常规)

数组 引例 如果我们要在程序中表示一个学生的成绩&#xff0c;我们会使用一个int来表示&#xff0c;如&#xff1a;int score。假如我们要在程序中表示一组成绩&#xff0c;此时我们所学的常规数据类型就无法再表示&#xff0c;这个 时候我们就需要使用到一种新的表现形式&am…

红蓝对抗之Windows内网渗透

前言 无论是渗透测试&#xff0c;还是红蓝对抗&#xff0c;目的都是暴露风险&#xff0c;促进提升安全水平。企业往往在外网布置重兵把守&#xff0c;而内网防护相对来说千疮百孔&#xff0c;所以渗透高手往往通过攻击员工电脑、外网服务、职场WiFi等方式进入内网&#xff0c;…

Google推出 PaliGemma 2

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Spring IoC的基本概念

引言 在 Java 中&#xff0c;出现了大量轻量级容器&#xff0c;这些容器有助于将来自不同项目的组件组装成一个有凝聚力的应用程序。这些容器的底层是它们如何执行布线的常见模式&#xff0c;它们将这一概念称为“控制反转”。 &#x1f3e2; 本章内容 &#x1f3ed; IoC服务…

图神经网络GNN入门

参考教程&#xff1a;A Gentle Introduction to Graph Neural Networks 图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是一类专门用于处理图结构数据的神经网络&#xff0c;旨在通过节点、边和图的结构信息来学习图中节点和图的表示。GNN通过消息传…

卧式螺旋混合机搅拌机:饲料加工设备

卧式螺旋混合机搅拌机是一种用于饲料混合的设备&#xff0c;其结构特点为卧式&#xff0c;即搅拌桶体水平放置。这种设计使得物料在搅拌过程中能够充分混合&#xff0c;且搅拌效率高、混合均匀度好。卧式饲料混合机广泛应用于畜牧业、养殖业以及饲料加工行业&#xff0c;是饲料…

【北京迅为】iTOP-4412全能版使用手册-第四十二章 驱动注册

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

交易系统:线上交易系统流程详解

大家好&#xff0c;我是汤师爷~ 今天聊聊线上交易系统流程详解。 线上交易系统为新零售连锁商家提供一站式线上交易解决方案。其核心目标是&#xff0c;通过数字化手段扩大商家的服务范围&#xff0c;突破传统门店的地理限制。系统支持电商、O2O等多种业务形态&#xff0c;为…

Postman接口测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 pre-request script 介绍 在过往的工作中&#xff0c;遇到很多测试小伙伴使用 postman 的时候都是直接通过 api 文档的描述请求&#xff0c;检查返回的数据是否正…

【单链表】(更新中...)

一、 题单 206.反转链表203.移除链表元素 876.链表的中间结点BM8 链表中倒数最后k个结点21.合并两个有序链表 二、题目简介及思路 206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 思路简单&#xff0c;但是除了要两个指针进…

深入理解 SQL 注入:原理、攻击流程与防御措施

深入理解 SQL 注入&#xff1a;原理、攻击流程与防御措施 在当今数字化的时代&#xff0c;数据安全已成为每个企业和开发者必须面对的重要课题。SQL 注入&#xff08;SQL Injection&#xff09;作为一种常见的网络攻击方式&#xff0c;给无数企业带来了巨大的损失。本文将深入…

市场上显卡型号需求分析

两个平台统计&#xff1a;&#xff08;关键词统计&#xff0c;仅做参考&#xff09; GPU型号&#xff5c;平台 github(提交量/万) huggingface&#xff08;模型量/个&#xff09; H100 6.6 210 A100 17.2 483 V100 14.4 484 4090 27.3 31 3090 11.1 92 在git…

C# WPF抽奖程序

C# WPF抽奖程序 using Microsoft.Win32; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.…

Master EDI 项目需求分析

Master Electronics 通过其全球分销网络&#xff0c;支持多种采购需求&#xff0c;确保能够为客户提供可靠的元件供应链解决方案&#xff0c;同时为快速高效的与全球伙伴建立合作&#xff0c;Master 选择通过EDI来实现与交易伙伴间的数据传输。 EDI为交易伙伴之间建立了一个安…