Linux shell编程学习笔记12:布尔运算和逻辑运算

news2024/11/24 4:26:34

Linux  Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、逻辑、字符串、文件测试等多种运算。前面几节我们陆续研究了  Linux shell编程 中的 字符串运算、算术运算和关系运算,今天我们来研究 Linux shell编程中的的布尔运算、逻辑运算。

一、布尔运算

(一)布尔运算符功能说明

运算符说明备注
!非运算,表达式为 true 则返回 0(false),否则返回 1(true)。not
-o或运算,有一个表达式为 true 则返回 1(true),否则返回 0(false)。or
-a与运算,两个表达式都为 true 才返回1(true),否则返回 0(false)。and

(二)布尔运算实例

1.操作数为数值

user @ host : ~ $ a=1
user @ host : ~ $ b=-1
user @ host : ~ $ c=3
user @ host : ~ $ if [ ! $a ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [ ! $b ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [ ! $b == $a ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [  $b == $a -o $b ==$c ]; then echo "true"; else echo "false"; fi
bash: [: -1: 需要一元表达式
false
user @ host : ~ $ if [  $b == $a -o $b == $c ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [  $b == $a -a $b == $c ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [  $b == $a -o $b == $b ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [  $b == $a -a $b == $b ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ 

2.操作数为字符串

user @ host : ~ $ a="a"

user @ host : ~ $ b="b"
user @ host : ~ $ c="c"
user @ host : ~ $ if [ ! $a ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [  $b == $a -o $b == $c ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [  $b == $a -a $b == $c ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [  $b == $a -o $b == $c ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [  $b == $a -a $b == $b ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [  $b == $a -o $b == $b ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ 

3.操作数为布尔值 true 和 false

user @ host : ~ $ c=true
user @ host : ~ $ if [ $c ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [ ! $c ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ f=false
user @ host : ~ $ if [ $f ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [ ! $f ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [ $c -o $f ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [ $c -a $f ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [ $f -a $c ]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [ ! $f -a $c ]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ echo $f
false
user @ host : ~ $ echo $c
true
user @ host : ~ $ echo `expr $f == true `
0
user @ host : ~ $ echo `expr $c == true `
1
user @ host : ~ $ echo `expr $c == false `
0
user @ host : ~ $ echo `expr $f == false `
1
user @ host : ~ $ 

比较奇怪的是,对于变量f,我们初始化其值为false后,执行以下命令的结果。

(1 )命令:

if [ $f ]; then echo "true"; else echo "false"; fi

执行结果是: true

(2)命令:

if [ ! $f ]; then echo "true"; else echo "false"; fi
执行结果是: false

(3)尽管变量c的值为true,但变量f的值为false,所以 表达式$c -a $f  的值应为false

但命令: if [ $c -a $f ]; then echo "true"; else echo "false"; fi
执行结果是:true

二、逻辑运算

(一)逻辑运算符功能说明

运算符说明
&&逻辑的 AND
||逻辑的 OR

这些运算符与汇编语言和C/C++/JavaScript 等语言是一样的。

 (二)逻辑运算实例

一般表达式运算只用1个对[],而逻辑去处要用2对[]。

1.操作数为 布尔值 true 和 false

user @ host : ~ $ c=true
user @ host : ~ $ f=false
user @ host : ~ $ if [ $c && $f ]; then echo "true"; else echo "false"; fi
bash: [: 缺少 `]'
false
user @ host : ~ $ if [[ $c && $f ]]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [[ $c || $f ]]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [[ $c || ! $f ]]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [[ ! $c || ! $f ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [[ ! $c ||  $f ]]; then echo "true"; else echo "false"; fi
true

user @ host : ~ $ if [[ ! $c &&  $f ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [[ $c && ! $f ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ 

以上命令中,c=true, f=false,有些命令的执行结果比较奇怪。

比如 表达式 $c && $f 的值应该是false,但比较奇怪的是命令:

if [[ $c && $f ]]; then echo "true"; else echo "false"; fi

执行结果是:true

2.操作数为数值

user @ host : ~ $ c=1
user @ host : ~ $ f=3
user @ host : ~ $ if [ $c && $f ]; then echo "true"; else echo "false"; fi
bash: [: 缺少 `]'
false
user @ host : ~ $ if [[ $c && $f ]]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ c=0
user @ host : ~ $ if [[ $c && $f ]]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ b=-1
user @ host : ~ $ if [[ $c -gt $b  && $f -gt $b  ]]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [[ $b -gt $c  && $b -gt $f  ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [[ $b -gt $c  || $b -gt $f  ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ 

3.操作数为字符串

user @ host : ~ $ a="a"
user @ host : ~ $ b="b"
user @ host : ~ $ c="c"
user @ host : ~ $ if [[ $a ==  $b  && $a == $c  ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [[ $a ==  $b  || $a == $c  ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ if [[ $a !=  $b  || $a == $c  ]]; then echo "true"; else echo "false"; fi
true
user @ host : ~ $ if [[ $a !=  $b  && $a == $c  ]]; then echo "true"; else echo "false"; fi
false
user @ host : ~ $ 

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

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

相关文章

COM编程入门Part Ⅱ - 深入理解COM服务器[译]

文章目录 1. 本文的目的 2. 介绍 3. 快速浏览COM服务器 4. 服务器生命周期管理 5. 实现接口,从IUnknown开始 6. CoCreateInstance()的内部 7. 注册COM服务器 8. 创建COM对象 - 类工厂 9. 示例自定义接口 10. 客户端使用我们的COM服务 11. 其他细节 本篇…

[入门一]C# webApi创建、与发布、部署、api调用

一.创建web api项目 1.1、项目创建 MVC架构的话,它会有view-model-control三层,在web api中它的前端和后端是分离的,所以只在项目中存在model-control两层 1.2、修改路由 打开App_Start文件夹下,WebApiConfig.cs ,修改路由&…

12.SpringBoot之RestTemplate的使用

SpringBoot之RestTemplate的使用 初识RestTemplate RestTemplate是Spring框架提供用于调用Rest接口的一个应用,它简化了与http服务通信方式。RestTemplate统一Restfull调用的标准,封装HTTP链接,只要需提供URL及返回值类型即可完成调用。相比…

小程序之基础入门(1)

⭐⭐ 小程序专栏:小程序开发专栏 ⭐⭐ 个人主页:个人主页 目录 一.前言 二.小程序简介 2.1 微信小程序的特点和优势: 三.小程序的安装与使用 五.小程序入门案例及目录结构 好啦!!今天的分享就到这啦!…

多测师肖sir_高级金牌讲师_python之模块008

python之模块 一、模块的介绍 (1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句 (2)python对象定义和python语句 (3)模块让你能够有逻辑…

微信浏览器大字体模式 按钮文字居中用line-height 显示异常

按钮文字居中用line-height 的css 在微信浏览器大字体模式,会导致显示错误。改成flex 居中就好了

R语言手动绘制NHANSE数据基线表并聊聊NHANSE数据制作亚组交互效应表的问题(P for interaction)

美国国家健康与营养调查( NHANES, National Health and Nutrition Examination Survey)是一项基于人群的横断面调查,旨在收集有关美国家庭人口健康和营养的信息。 地址为:https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 在既往的…

精品Python基于django就业数据分析平台求职招聘应聘-爬虫可视化大屏

《[含文档PPT源码等]精品基于django就业数据分析平台-爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等! 软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技术:JavaS…

常见锁的分类

入职体验: 今天运维岗位刚入职,但是目前还没有办理入职手续,但是领导发了一堆资料!看了一下,非常多的新东西,只能说努力一把!!! 一、锁的分类 1.1 可重入锁、不可重入锁…

DAE转换GLB格式

1、DAE模型介绍 DAEA(Deep Attentive and Ensemble Autoencoder)模型是一种用于无监督学习的深度学习模型,由华为公司提出。DAEA模型结合了自编码器和深度注意力机制,能够对高维数据进行降维和特征提取,并且在处理大规…

求三维坐标绕坐标轴旋转后的坐标值

目的 旋转矩阵 应用 沿单个坐标轴旋转 沿多个坐标系旋转 目的 由于其他文章原理介绍比较详细,但应用方面较少。本文直接介绍旋转矩阵的应用,条件为坐标系不变,求旋转后的三维坐标。本文方法较傻瓜式,需要自己进行测试以确认是…

Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql

环境准备(非核心方法) 创建表 创建表的sql(下表是基于Oracle创建的) CREATE TABLE "SYSTEM"."STUDENT" ("ID" NUMBER(10, 0),"NAME" VARCHAR2(20 BYTE),"ADDRES" CLOB,PRIMARY KEY ( …

Studio One6.5全新版本更新功能详情介绍

Studio One是一款专业的音乐制作软件,由美国PreSonus公司开发。该软件提供了全面的音频编辑和混音功能,包括录制、编曲、合成、采样等多种工具,可用于制作各种类型的音乐,如流行音乐、电子音乐、摇滚乐等。 Studio One的主要特点…

一文2000字从0到1手把手教你jmeter分布式压测

一、jmeter为什么要做分布式压测 jmeter本身的局限性 一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU等)是有限的由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户…

论文中的算法/伪代码怎么写/理解

文章目录 第零步 基础知识第一步 创建latex文档,导入安装包第二步 写伪代码第三步 美化伪代码补充:latex无法显示中文 准备工作: overleaf:在线的latex文档编辑平台 algorithm2e:Latex的一个写算法的库 第零步 基础知识…

【树莓派 picamera】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言https://www.cnblogs.com/uestc-mm/p/7606855.html 一、picamera是什么?二、使用步骤1.引入库2.先要安装opencv 总结 前言 想用树莓派libcamera &a…

发货100虚拟商品自动发货系统存在SQL注入

漏洞描述 该系统存在SQL注入漏洞,可获取敏感信息及账号密码。 漏洞复现 构造SQL注入延时payload: M_id11%20AND%20(SELECT%208965%20FROM%20(SELECT(SLEEP(5)))sdhh)&typeproduct漏洞证明: 文笔生疏,措辞浅薄,…

C语言网络编程基础(linux)

目录 文件描述符与套接字网络编程的基本流程基础的函数和结构体(持续更新)socket函数sockaddr和sockaddr_in结构体bind函数listen函数accept函数recv函数writev函数readv函数connect函数fcntl函数 epoll相关函数epoll_createepoll_ctl函数epoll_wait函数…

竞赛 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

生物标志物发现中的无偏数据分析策略

目录 0. 导论基本概念 1. 生物标志物发现的注意事项2. 数据预处理2.1 高质量原始数据和缺失值处理2.2 数据过滤2.3 数据归一化 3. 数据质量评估3.1 混杂因素3.2 类别分离3.3 功效分析3.4 批次效应 4. 生物标志物发现4.1 策略4.2 数据分析工具4.3 模型优化策略 0. 导论 组学技术…