bash之基本运算符

一.算术运算符

vim test.sh

#!/bin/bash

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a == b"
fi
if [ $a != $b ]
then
   echo "a != b"
fi

运行:

bash test.sh

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a != b

        原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
        expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
        注意使用的反引号(esc 键下边)
        表达式和运算符之间要有空格 $a + $b 写成 $a+$b 不行
        条件表达式要放在方括号之间,并且要有空格 [ $a == $b ] 写成 [$a==$b] 不行
        乘号(*)前边必须加反斜杠(\)才能实现乘法运算

二.关系运算符

  1. -eq
    • 含义:等于(Equal)
    • 示例:if [ $a -eq $b ]; then echo "a等于b"; fi,当$a的值等于$b的值时,条件为真,执行echo语句。
  2. -ne
    • 含义:不等于(Not Equal)
    • 示例:if [ $a -ne $b ]; then echo "a不等于b"; fi,当$a的值不等于$b的值时,条件为真。
  3. -lt
    • 含义:小于(Less Than)
    • 示例:if [ $a -lt $b ]; then echo "a小于b"; fi,当$a的值小于$b的值时,条件为真。
  4. -le
    • 含义:小于等于(Less Than or Equal)
    • 示例:if [ $a -le $b ]; then echo "a小于等于b"; fi,当$a的值小于或等于$b的值时,条件为真。
  5. -gt
    • 含义:大于(Greater Than)
    • 示例:if [ $a -gt $b ]; then echo "a大于b"; fi,当$a的值大于$b的值时,条件为真。
  6. -ge
    • 含义:大于等于(Greater Than or Equal)
    • 示例:if [ $a -ge $b ]; then echo "a大于等于b"; fi,当$a的值大于或等于$b的值时,条件为真。

vim test2.sh

#!/bin/bash

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a == b"
else
   echo "$a -eq $b: a != b"
fi
bash test2.sh

10 -eq 20: a != b

三.逻辑运算符

1. “&&”(与运算符)
        功能:当使用 “&&” 连接两个命令或条件表达式时,只有当左边的命令或条件为真时,才会执行右边的命令或检查右边的条件。如果左边为假,则右边的操作不会执行,整个表达式的值为假。
示例:
command1 && command2:先执行command1,如果command1执行成功(返回值为 0,在 Bash 中表示真),则接着执行command2;如果command1失败(返回非 0 值),则command2不会执行。
[ $a -gt 10 ] && [ $b -lt 20 ]:当变量$a的值大于 10 并且变量$b的值小于 20 时,整个表达式为真。
2. “||”(或运算符)
        功能:当使用 “||” 连接两个命令或条件表达式时,如果左边的命令或条件为假,则会执行右边的命令或检查右边的条件。只要左边或右边其中一个为真,整个表达式的值就为真。
示例:
command1 || command2:先执行command1,如果command1失败(返回非 0 值),则接着执行command2;如果command1成功(返回值为 0),则command2不会执行。
[ $a -eq 5 ] || [ $a -eq 10 ]:当变量$a的值等于 5 或者等于 10 时,整个表达式为真。

四.字符串运算符

=  检测两个字符串是否相等,相等就返回true

!= 检测两个字符串是否相等,不相等就返回true

-z 检测两个字符串长度是否为0,为0就返回true

-n 检测两个字符串长度是否为0,不为0就返回true

str 检测字符串是否为空,不为空返回true

#!/bin/bash

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a == b"
else
   echo "$a = $b: a != b"
fi
if [ -n $a ]
then
   echo "-n $a : The string length is not 0"
else
   echo "-n $a : The string length is  0"
fi
if [ $a ]
then
   echo "$a : The string is not empty"
else
   echo "$a : The string is empty"
fi

结果:

abc = efg: a != b
-n abc : The string length is not 0
abc : The string is not empty

五.文件测试运算符

#!/bin/bash

file="/home/shiyanlou/test.sh"
if [ -r $file ]
then
   echo "The file is readable"
else
   echo "The file is not readable"
fi
if [ -e $file ]
then
   echo "File exists"
else
   echo "File not exists"
fi

结果:

The file is readable
File exists

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++STL——map与set的使用及介绍

目录 前言: 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器 4. set的容量 5. set修改操作 6. set的使用举例 3.2 map 3.2.1 map的介绍 3.2.2 map的…

Vue3浮动按钮(FloatButton)

效果如下图:在线预览 APIs FloatButton 参数说明类型默认值left按钮定位的左边距,单位 pxnumber | stringundefinedright按钮定位的右边距,单位 pxnumber | string24top按钮定位的上边距,单位 pxnumber | stringundefinedbottom…

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系 MutipartFile是spring的一部分,File则是java的标准类MutipartFile用于接收web传递的文件,File操作本地系统的文件 MutipartFile 转换File的三种方式 使用MutipartFile 自带的transferTo方法使用java自带的FileOutPutStream流使用java自…

使用Langchain-chatchat搭建RAG应用,并使用postman进行测试验证

Github地址:https://github.com/chatchat-space/Langchain-Chatchat 一、概述 LangChain-Chatchat (原 Langchain-ChatGLM),一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运…

React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性

文章目录 一、初始React1. React的基本认识2. Hello案例2.1 三个依赖2.2 渲染页面2.3 hello案例完整代码 二、类组件1. 封装类组件2. 组件里的数据3. 组件里的函数 (重点)4. 案例练习(1) 展示电影列表 三、JSX语法1. 认识JSX2. JSX书写规范及注释3. JSX嵌入变量作为子元素4. JS…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android …

推荐算法的学习

文章目录 前言1、模型1.1 从本领域模型的发展历史中学习1.1.1 在历史中总结发展规律和趋势1.1.2 发现模型之间的共性,方便记忆 1.2 从其他领域的发展中学习1.2.1 注意力机制1.2.2 残差网络 1.3 实践该怎么办? 2、 特征2.1 数据源的选择与建立2.2 特征构造…

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况,没理过,因为不影响啥除了不美观...但今天看着实在是难受,怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法,都不得行,后面发现了这篇文章,解决了! 感谢! Element中t…

PageHelper循环依赖问题

1. 问题 2. 原因 项目中SpringBoot的版本为2.7.18。 SpringBoot2.6.x后不推荐使用循环依赖,也就是说从2.6.x版本开始,如果项目里还存在循环依赖,SpringBoot将拒绝启动! 3. 解决 去pageHelper github看,才看到新版本…

Pandas缺失值处理

目录 NaN 加载包含缺失的数据 查看缺失值 通过info函数查看缺失值 通过isnull函数查看缺失值 通过notnull函数查看缺失值 通过isnull().sum()统计空值 缺失值处理 准备数据 dropna删除缺失值 fillna平均值填充缺失值 fillna前后值填充缺失值 interpolate线性插值 …

C++中的vector二维数组(全面详解)

目录 二维数组概念: 二维数组格式: 二维数组的初始化: 在创建的时候就进行初始化: resize初始化: 构造v的时候只给行数,列数用resize开辟 构造v的时候不给行数不给列数,都用resize来开辟…

Java中使用protobuf

一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol B…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念,用函数表达式来描述是这样的:f(x) f(f(x)) 。在程序开发中,则是指同一个业务,执行一次或多次对业务状态的影响是一致的。有些业务…

【C语言】循环中断break

在循环使用过程中,可能遇到某些情况需要终止循环。比如按座位查找一位学生,循环查找,找到时可以直接停止。后续的循环将不再执行。 break;只跳出一层循环 例子中的素数判断,查找到根号n停止:一个合数等于两个数的乘积…

Windows 下 cocos2d-x-3.17.2 VS2017开发环境搭建

1.下载cocos2d-x-3.17.2 源码: Cocos2d-x - 成熟、轻量、开放的跨平台解决方案 2.下载Python2 Python 2.7.0 Release | Python.org 加入环境变量: 测试版本

机器学习—特性缩放

特性缩放的技术能使梯度下降运行得更快,让我们先来看看功能大小之间的关系,这就是该特性的数字和相关参数的大小,作为一个具体的例子,让我们用两个特征来预测房子的价格,X1代表一个房子的大小,X2代表两个卧…

做安全后,再也不想打麻将了...

有时候,打麻将不是消遣,而是工作日常 摸起的每一张牌,可能都透露着安全从业者背后的“心酸”...... 看看下面经历,是否似曾相识!

2010年国赛高教杯数学建模A题储油罐的变位识别与罐容表标定解题全过程文档及程序

2010年国赛高教杯数学建模 A题 储油罐的变位识别与罐容表标定 通常加油站都有若干个储存燃油的地下储油罐,并且一般都有与之配套的“油位计量管理系统”,采用流量计和油位计来测量进/出油量与罐内油位高度等数据,通过预先标定的罐容表&#…

计算机网络基础(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 计算机网…

解锁中东北非市场:Flat Ads通过效果营销赋能企业高效增长

10 月 15 日至 16 日,Flat Ads 参加了在土耳其伊斯坦布尔举行的 Mobidictum Conference 2024,这场土耳其乃至中东与北非地区规模最大的游戏产业盛会,吸引了来自全球的顶尖游戏企业、开发者和营销服务商。作为全球领先的营销平台,Flat Ads 在此次大会上重点展示了基于效果营销的…