当前位置: 首页 > news >正文

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 found
127
使用 && 等符号的正确示例:
[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: 让用户输入一个文件名,并做如下判断:

1 )如果用户输入的文件为空时显示: you must input a filename ,并中断程序;
2 )如果用户输入的文件不存在时,显示 the file do not exist ,并中断程序;
3 )如果文件存在,判断该文件的文件类型和执行者对该文件所拥有的的权限。
说明:由于 root 在很多权限的限制上面都是无效的,所以使用 root 执行这个脚本时,常常会发现与 ls -l 的结果不相同。所以建议使用一般用户来执行这个脚本
#! /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 程序运行过程中遇到的各种情况&#xff0c; Linux Shell 提供了一组测试运算符。 通过这些运算符&#xff0c;Shell 程序能够…...

【线程】Java线程操作

【线程】Java线程操作 一、启动线程1.1 run()和start()的区别 二、终止线程三、等待线程四、线程的状态 一、启动线程 Java中通过start()方法来启动一个线程&#xff0c;其次我们要着重理解start()和run()的区别。 1.1 run()和start()的区别 我们通过一份代码来进行观察&…...

Linux内核

Linux内核是Linux操作系统的核心部分&#xff0c;它管理着硬件资源并提供基本的服务给用户程序。以下是Linux内核的几个关键方面&#xff1a; 1. 架构&#xff1a; 单内核设计&#xff1a;Linux采用的是单内核设计&#xff0c;这意味着所有操作系统服务都在一个地址空间内运行…...

Sentinel服务保护

Sentinel是阿里巴巴开源的一款服务保护框架&#xff0c;目前已经加入SpringCloudAlibaba中。官方网站&#xff1a; home | Sentinel Sentinel 的使用可以分为两个部分: 核心库&#xff08;Jar包&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行于 Java 8 及以…...

python代码制作数据集的测试和数据质量检测思路

前言 本文指的数据集为通用数据集&#xff0c;并不单是给机器学习领域使用。包含科研和工业领域需要自己制作数据集的。 首先&#xff0c;在制作大型数据集时&#xff0c;代码错误和数据问题可能会非常复杂。 前期逻辑总是简单的&#xff0c;库库一顿写&#xff0c;等排查的时…...

笔记记录 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是一个以生成图像为目标的人工智能系统&#xff0c;可能采用了类似于OpenAI的DALLE、MidJourney等文本生成图像的技术。通过自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;相结合&#xff0c;Kolors能够根据用户提供的文本描述生成符合…...

【Vue】 npm install amap-js-api-loader指南

前言 项目中的地图模块突然打不开了 正文 版本太低了&#xff0c;而且Vue项目就应该正经走项目流程啊喂&#xff01; npm i amap/amap-jsapi-loader --save 官方说这样执行完&#xff0c;就这结束啦&#xff01;它结束了&#xff0c;我还没有&#xff0c;不然不可能记录这篇文…...

MacOS下的Opencv3.4.16的编译

前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意&#xff0c;我们使用的是Mac&#xff0c;所以ios pack并不能使用。 如何嫌官网上下载比较慢的话&#xff0c;可以考虑在csdn网站上下载&#xff0c;应该也是可以找到的。 2、cmake的下载 官网的链接&…...

Android中的依赖注入(DI)框架Hilt

Hilt 是 Android 提供的一种依赖注入&#xff08;DI&#xff09;框架&#xff0c;它基于 Dagger&#xff0c;目的是简化依赖注入的使用&#xff0c;提供更易用的接口和与 Android 生命周期组件的紧密集成。下面是 Hilt 的详细介绍。 为什么选择 Hilt? 依赖注入的优势&#xf…...

5.STM32之通信接口《精讲》之USART通信---实验串口接收程序

根据上节&#xff0c;我们一已经完成了串口发送程序的代码&#xff0c;并且深入的解析探索了串口的原理&#xff0c;接下来&#xff0c;Whappy小编将带领大家进入串口接收程序的探索与实验&#xff0c;并将结合上一节串口发送一起来完成串口的发送和接收实验。 上来两张图 上图…...

【Redis_Day6】Hash类型

【Redis_Day6】Hash类型 Hash类型操作hash的命令hset&#xff1a;设置hash中指定的字段&#xff08;field&#xff09;的值&#xff08;value&#xff09;hsetnx&#xff1a;想hash中添加字段并设置值hget&#xff1a;获取hash中指定字段的值hexists&#xff1a;判断hash中是否…...

[开源] SafeLine 好用的Web 应用防火墙(WAF)

SafeLine&#xff0c;中文名 “雷池”&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击 一、简介 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注…...

40分钟学 Go 语言高并发:Select多路复用

Select多路复用 学习目标 知识点掌握程度应用场景select实现原理深入理解底层机制channel通信和多路选择超时处理掌握超时控制方法避免阻塞和资源浪费优先级控制理解优先级实现处理多个channel的顺序性能考虑了解性能优化点高并发场景优化 1. Select实现原理 让我们通过一个…...

candence: 如何快速设置SUBCLASS 的颜色

如何快速设置SUBCLASS 的颜色 一、一般操作 正常情况下修改SUBCLASS&#xff0c;需要如下步骤进行设置&#xff1a; 二、快速操作 右键&#xff0c;选择一个颜色即可...

FinalShell进行前端项目部署及nginx配置

首先需要准备服务器(阿里云、腾讯云都可)与域名&#xff1b; 示例为阿里云服务器&#xff1b; 1.进行FinalShell下载 下载官网 https://www.hostbuf.com/ 2.下载完毕后 配置FinalShell ssh ​ 名称自定义即可&#xff01; 2-1 提示连接成功 ​ 3.首先检查nginx是否下载 …...

神经网络(系统性学习一):入门篇——简介、发展历程、应用领域、基本概念、超参数调优、网络类型分类

相关文章&#xff1a; 神经网络中常用的激活函数 神经网络简介 神经网络&#xff08;Neural Networks&#xff09;是受生物神经系统启发而设计的数学模型&#xff0c;用于模拟人类大脑处理信息的方式。它由大量的节点&#xff08;或称为“神经元”&#xff09;组成&#xff0…...

用nextjs开发时遇到的问题

这几天已经基本把node后端的接口全部写完了&#xff0c;在前端开发时考虑时博客视频类型&#xff0c;考虑了ssr&#xff0c;于是选用了nextJs&#xff0c;用的是nextUi,tailwincss,目前碰到两个比较难受的事情。 1.nextUI个别组件无法在服务器段渲染 目前简单的解决方法&…...

微前端基础知识入门篇(二)

概述 在上一篇介绍了一些微前端的基础知识,详见微前端基础知识入门篇(一)。本文主要介绍qiankun微前端框架的实战入门内容。 qiankun微前端实践 通过Vite脚手架分别创建三个程序,主应用A为:vite+vue3+ts,两个微应用分别为B:vite+vue3+ts;C:vite+React+ts。因为qiankun的…...

自然语言处理:第六十五章 MinerU 开源PDF文档解析方案

本人项目地址大全&#xff1a;Victor94-king/NLP__ManVictor: CSDN of ManVictor 原文地址&#xff1a;MinerU&#xff1a;精准解析PDF文档的开源解决方案 论文链接&#xff1a;MinerU: An Open-Source Solution for Precise Document Content Extraction git地址&#xff1…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...