shell 基础知识2 ---条件测试
目录
一、条件测试的基本语法
二、文件测试表达式
三、字符串测试表达式
四、整数测试表达式
五、逻辑操作符
六、实验
为了能够正确处理 Shell 程序运行过程中遇到的各种情况, Linux Shell 提供了一组测试运算符。 通过这些运算符,Shell 程序能够 判断某种或者几个条件是否成立 。条件测试在各种流程控制语句,例如判断语句和循环语句中发挥了重要的作用,所以,了解和掌握这些条件测试是非常重要的
一、条件测试的基本语法
| 条件测试语法 | 说明 |
| test <测试表达式> | test 命令和 < 测试表达式 > 之间至少有一个空格 |
| [ 测试表达式 ] | [ ] 的边界和内容之间至少有一个空格 |
| [[ 测试表达式 ]] | [[ ]] 的边界和内容之间至少有一个空格。 [[]] 中可以使用通配符等进行模式匹配 |
| ((测试表达式)) | 一般用于 if 语句里,双小括号两端不需要有空格,测试对象只能是整数 |
二、文件测试表达式
| 常用的文件测试操作符 | 说明 |
| -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 新则为真,根据文件的修改时间来计算 stat 文件或目录查看时间 |
| f1 -ot f2 , ot 为 older than | 文件 f1 比文件 f2 旧则为真,根据文件的修改时间来计算 |
三、字符串测试表达式
| 常用字符串测试操作 符 | 说明 |
| -n “ 字符串” | 若字符串的长度不为 0 ,则为真,即测试表达式成立, n 可以理解为 no zero |
| -z “字符串” | 若字符串的长度为 0 ,则为真, z 可以理解为 zero。可以用来判断是否为空 |
| “ 串 1”=“ 串 2” | 若字符串 1 等于字符串 2 ,则为真,可使用 == 代替 = |
| “ 串 1”!=“ 串 2” | 若字符串 1 不等于字符串 2 ,则为真 |
四、整数测试表达式
| 在 [ ] 以及 test 中使用的比较符 号 | 在 (( )) 和 [[ ]] 中使用的比较符 号 | 说明 |
| -eq | ==或= | 相等,equal |
| -ne | != | 不相等,not equal |
| -gt | > | 大于,greater than |
| -ge | >= | 大于等于,greater equal |
| -lt | < | 小于,less than |
| -le | <= | 小于等于,less equal |
五、逻辑操作符
| 在 [ ] 中使用的逻辑操 作符 | 在 test 、 [[ ]] 和 (( )) 中使用的逻辑操 作符 | 说明 |
| -a | && | and ,与,两端都为真,则结果为真 |
| -o | || | or ,或,两端有一个为真,则结果为真 |
| ! | ! | not ,非,两端相反,则结果为真 |
使用&&等符号的错误示例:&&不能用在 [ ] 中
[root@localhost test3] # [ -f ceshi && -f file ];echo $?-bash : [: missing `]'2[root@localhost test3] # [ -f ceshi || -f file ];echo $?-bash : [: missing `]'-bash : -f : command not found127使用 && 等符号的正确示例:[root@localhost test3] # [ -f file ] && [ -f ceshi ];echo $?1[root@localhost test3] # [ -f file ] || [ -f ceshi ];echo $?0[root@localhost test3] # [ -f file ] || [ -d ceshi ];echo $?
六、实验
实验1: 让用户输入一个文件名,并做如下判断:
#! /bin/bash
read -p "please input filename:" file
[ -z $file ] && echo "you must input a filename!!!"&& exit
[ ! -e $file ] && echo "the $file do not exit."&& exit
[ -b $file ] && echo "the $file is block"
[ -d $file ] && echo "the $file is dir"
[ -f $file ] && echo "the $file is file"
[ -r $file ] && echo "has a read previlege"
[ -w $file ] && echo "has a write previlege"
[ -x $file ] && echo "has a execute previlege"
[ ! -r $file -a ! -w $file -a ! -x $file ] && echo "is not any previlege"
~
实验2: 通过read传入一个数字,如果传入的数字等于1,就打印1;如果等于2,就打印2,如果不等于1 也不等于2,就提示输入不对,然后退出程序。

实验3:通过read读入两个整数,并比较他们的大小

实验4:选择一个用户输入,判断是root账户还是系统账户还是普通账户

实验5:给定文件/etc/sos/sos.conf,判断是否存在空白行,若存在则显示行 数,否则显示“无空白行”提示信息
下面判断大小时:[ $num -gt 0 ] 可以写成(($num > 0))
相关文章:
shell 基础知识2 ---条件测试
目录 一、条件测试的基本语法 二、文件测试表达式 三、字符串测试表达式 四、整数测试表达式 五、逻辑操作符 六、实验 为了能够正确处理 Shell 程序运行过程中遇到的各种情况, Linux Shell 提供了一组测试运算符。 通过这些运算符,Shell 程序能够…...
【线程】Java线程操作
【线程】Java线程操作 一、启动线程1.1 run()和start()的区别 二、终止线程三、等待线程四、线程的状态 一、启动线程 Java中通过start()方法来启动一个线程,其次我们要着重理解start()和run()的区别。 1.1 run()和start()的区别 我们通过一份代码来进行观察&…...
Linux内核
Linux内核是Linux操作系统的核心部分,它管理着硬件资源并提供基本的服务给用户程序。以下是Linux内核的几个关键方面: 1. 架构: 单内核设计:Linux采用的是单内核设计,这意味着所有操作系统服务都在一个地址空间内运行…...
Sentinel服务保护
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站: home | Sentinel Sentinel 的使用可以分为两个部分: 核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以…...
python代码制作数据集的测试和数据质量检测思路
前言 本文指的数据集为通用数据集,并不单是给机器学习领域使用。包含科研和工业领域需要自己制作数据集的。 首先,在制作大型数据集时,代码错误和数据问题可能会非常复杂。 前期逻辑总是简单的,库库一顿写,等排查的时…...
笔记记录 k8s-install
master节点安装: yum upgrade -y 更新系统 yum update -y 升级内核 ifconfig ens33 关闭swap swapoff -a (临时) vim /etc/fstab (永久) #/dev/mapper/cl-swap swap swap defaults 0 0 vim /etc/sysctl.conf vm.swappin…...
丹摩征文活动|基于丹摩算力的可图(Kolors)的部署与使用
Kolors是一个以生成图像为目标的人工智能系统,可能采用了类似于OpenAI的DALLE、MidJourney等文本生成图像的技术。通过自然语言处理(NLP)和计算机视觉(CV)相结合,Kolors能够根据用户提供的文本描述生成符合…...
【Vue】 npm install amap-js-api-loader指南
前言 项目中的地图模块突然打不开了 正文 版本太低了,而且Vue项目就应该正经走项目流程啊喂! npm i amap/amap-jsapi-loader --save 官方说这样执行完,就这结束啦!它结束了,我还没有,不然不可能记录这篇文…...
MacOS下的Opencv3.4.16的编译
前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意,我们使用的是Mac,所以ios pack并不能使用。 如何嫌官网上下载比较慢的话,可以考虑在csdn网站上下载,应该也是可以找到的。 2、cmake的下载 官网的链接&…...
Android中的依赖注入(DI)框架Hilt
Hilt 是 Android 提供的一种依赖注入(DI)框架,它基于 Dagger,目的是简化依赖注入的使用,提供更易用的接口和与 Android 生命周期组件的紧密集成。下面是 Hilt 的详细介绍。 为什么选择 Hilt? 依赖注入的优势…...
5.STM32之通信接口《精讲》之USART通信---实验串口接收程序
根据上节,我们一已经完成了串口发送程序的代码,并且深入的解析探索了串口的原理,接下来,Whappy小编将带领大家进入串口接收程序的探索与实验,并将结合上一节串口发送一起来完成串口的发送和接收实验。 上来两张图 上图…...
【Redis_Day6】Hash类型
【Redis_Day6】Hash类型 Hash类型操作hash的命令hset:设置hash中指定的字段(field)的值(value)hsetnx:想hash中添加字段并设置值hget:获取hash中指定字段的值hexists:判断hash中是否…...
[开源] SafeLine 好用的Web 应用防火墙(WAF)
SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击 一、简介 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注…...
40分钟学 Go 语言高并发:Select多路复用
Select多路复用 学习目标 知识点掌握程度应用场景select实现原理深入理解底层机制channel通信和多路选择超时处理掌握超时控制方法避免阻塞和资源浪费优先级控制理解优先级实现处理多个channel的顺序性能考虑了解性能优化点高并发场景优化 1. Select实现原理 让我们通过一个…...
candence: 如何快速设置SUBCLASS 的颜色
如何快速设置SUBCLASS 的颜色 一、一般操作 正常情况下修改SUBCLASS,需要如下步骤进行设置: 二、快速操作 右键,选择一个颜色即可...
FinalShell进行前端项目部署及nginx配置
首先需要准备服务器(阿里云、腾讯云都可)与域名; 示例为阿里云服务器; 1.进行FinalShell下载 下载官网 https://www.hostbuf.com/ 2.下载完毕后 配置FinalShell ssh 名称自定义即可! 2-1 提示连接成功 3.首先检查nginx是否下载 …...
神经网络(系统性学习一):入门篇——简介、发展历程、应用领域、基本概念、超参数调优、网络类型分类
相关文章: 神经网络中常用的激活函数 神经网络简介 神经网络(Neural Networks)是受生物神经系统启发而设计的数学模型,用于模拟人类大脑处理信息的方式。它由大量的节点(或称为“神经元”)组成࿰…...
用nextjs开发时遇到的问题
这几天已经基本把node后端的接口全部写完了,在前端开发时考虑时博客视频类型,考虑了ssr,于是选用了nextJs,用的是nextUi,tailwincss,目前碰到两个比较难受的事情。 1.nextUI个别组件无法在服务器段渲染 目前简单的解决方法&…...
微前端基础知识入门篇(二)
概述 在上一篇介绍了一些微前端的基础知识,详见微前端基础知识入门篇(一)。本文主要介绍qiankun微前端框架的实战入门内容。 qiankun微前端实践 通过Vite脚手架分别创建三个程序,主应用A为:vite+vue3+ts,两个微应用分别为B:vite+vue3+ts;C:vite+React+ts。因为qiankun的…...
自然语言处理:第六十五章 MinerU 开源PDF文档解析方案
本人项目地址大全:Victor94-king/NLP__ManVictor: CSDN of ManVictor 原文地址:MinerU:精准解析PDF文档的开源解决方案 论文链接:MinerU: An Open-Source Solution for Precise Document Content Extraction git地址࿱…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
