Linux ---------------------Shell 基本运算符

news2025/7/22 10:43:55

(一)摘要

Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

       原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。具体情况请看:

Linux———— 运算命令-CSDN博客

(二)算数运算符

算术运算符

下表列出了常用的算术运算符,假定变量 a 为 60,变量 b 为 20:

运算符说明举例
+加法`expr $a + $b` 结果为 70。
-减法`expr $a - $b` 结果为 40。
*乘法`expr $a \* $b` 结果为  1200。
/除法`expr $b / $a` 结果为 3。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

注意:

注意:

  • 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
  • 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 

效果展示:

代码:

#!/bin/bash

a=60
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

(三)关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
-eq(equal的缩写检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne(not equal)检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt(greater than or be equal 检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt(less than  or be equal 检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge(greater 检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le(less 检测左边的数是否小于等于右边的,如果是,则返回 true。

[ $a -le $b ] 返回 true。

文本:

#!/bin/bash

a=10
b=

if [ "$a" -eq "$b" ]; then
    echo "$a -eq $b : a 等于 b"
else
    echo "$a -eq $b : a 不等于 b"
fi

if [ "$a" -ne "$b" ]; then
    echo "$a -ne $b : a 不等于 b"
else
    echo "$a -ne $b : a 等于 b"
fi

if [ "$a" -gt "$b" ]; then
    echo "$a -gt $b : a 大于 b"
else
    echo "$a -gt $b : a 不大于 b"
fi

if [ "$a" -lt "$b" ]; then
    echo "$a -lt $b : a 小于 b"
else
    echo "$a -lt $b : a 不小于 b"
fi

if [ "$a" -ge "$b" ]; then
    echo "$a -ge $b : a 大于或等于 b"
else
    echo "$a -ge $b : a 小于 b"
fi

if [ "$a" -le "$b" ]; then
    echo "$a -le $b : a 小于或等于 b"
else
    echo "$a -le $b : a 大于 b"
fi
 

 

(四)布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。

注意:布尔运算符必须放在[]或与test命令配合使用才有效果。

(五)字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "abg":

运算符说明举例
=(或者==检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否不相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否不为 0,不为 0 返回 true。[ -n "$a" ] 返回 true。
$检测字符串是否不为空,不为空返回 true。[ $a ] 返回 true。

(六)文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

属性检测描述如下:

操作符说明举例
-b file检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
-c file检测文件是否是字符设备文件,如果是,则返回 true。[ -c $file ] 返回 false。
-d file检测文件是否是目录,如果是,则返回 true。[ -d $file ] 返回 false。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ] 返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ] 返回 false。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。[ -k $file ] 返回 false。
-p file检测文件是否是有名管道,如果是,则返回 true。[ -p $file ] 返回 false。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。[ -u $file ] 返回 false。
-r file检测文件是否可读,如果是,则返回 true。[ -r $file ] 返回 true。
-w file检测文件是否可写,如果是,则返回 true。[ -w $file ] 返回 true。
-x file检测文件是否可执行,如果是,则返回 true。[ -x $file ] 返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ] 返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true。

其他检查符:

  • -S: 判断某文件是否 socket。
  • -L: 检测文件是否存在并且是一个符号链接

#!/bin/bash

file="/var/www/runoob/test.sh"

if [ -r "$file" ]; then
    echo "文件可读"
else
    echo "文件不可读"
fi

if [ -w "$file" ]; then
    echo "文件可写"
else
    echo "文件不可写"
fi

if [ -x "$file" ]; then
    echo "文件可执行"
else
    echo "文件不可执行"
fi

if [ -f "$file" ]; then
    echo "文件为普通文件"
else
    echo "文件为特殊文件"
fi

if [ -d "$file" ]; then
    echo "文件是个目录"
else
    echo "文件不是个目录"
fi

if [ -s "$file" ]; then
    echo "文件不为空"
else
    echo "文件为空"
fi

if [ -e "$file" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi
 

(七)逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

 

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

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

相关文章

界面控件DevExpress WinForms Gauge组件 - 实现更高级别数据可视化

DevExpress WinForms控件包含了超过150个随时可用的仪表盘预设,包括圆形,数字,线性和状态指示器等,来帮助用户实现更高级的数据可视化。 DevExpress WinForms有180组件和UI库,能为Windows Forms平台创建具有影响力的业…

解决ubunut20.04系统麦克风异常问题

背景 在部分ubunut环境中,我们指定了麦克风的下标,使用指定的麦克风有问题,只能录音一次,第二次就失效了,不过只是部分ubunut系统会遇到这个情况 # 找到以usb_mic_prefix为前缀的麦克风下标 import speech_recognitio…

(五)上市企业实施IPD成功案例分享之——迈瑞医疗

医疗器械企业是被严格监管的行业,同时也是市场充分竞争的行业。医疗器械细分市场众多,需求强劲,存在着巨大的商机,被称为永远的朝阳行业。但是,存在商机并不等于能够抓住商机。不同的医疗器械企业在同样的宏观环境、细…

Matplotlib教程(非常详细)(第一部分)

Matplotlib是一款免费开源的Python数据可视化工具。 Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用&…

序列图(顺序图)

1.序列图(顺序图)概念 序列图(顺序图)是用来显示参与者如何以一系列顺序的步骤与系统的对象交互的模型。 顺序图可以用来展示对象之间是如何进行交互的。 顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的,其中循环、选择…

2021年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 关于open()函数的参数,下列描述正确的是? A: “w” 以十六进制格式打开一个文件只用于写入 B:…

录屏工具大揭秘!让你轻松成为录像达人

在日常生活中,我们经常需要使用录屏工具来记录电脑屏幕上的操作过程,比如制作教程视频、分享游戏经验、展示软件功能等,一个优秀的录屏工具能帮上大忙。现在市面上有许多录屏工具可供选择,本文将详细介绍三种工具的使用方法和优势…

C语言--输出格式控制(printf函数)--宽度精度控制

格式输出函数printf printf(格式控制,输出表列) 基本用法 格式字符功能例子d输出一个有符号的十进制整数printf("%d %d",12,-56);c输出一个字符 char ch a; printf("%c",ch); s输出一个字符串printf("%s","oh my god&…

成为MySQL大师的第一步:轻松学习MySQL数据库的终极指南!

数据库开发-MySQL 1. MySQL概述1.1 安装1.1.1 版本1.1.2 安装1.1.3 连接1.1.4 企业使用方式 1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 2. 数据库设计-DDL2.2 数据库操作2.2.1 查询数据库2.2.2 创建数据库2.2.3 使用数据库2.2.4 删除数据库 2.3 图形化工具2.3.1 介绍…

vue2 运行报错Parsing error: The keyword ‘import‘ is reserved

在配置文件.eslintrc.js中配置parserOptions来指定语言版本和模块类型 {"parserOptions": {"ecmaVersion": 7,"sourceType": "module"} }

物联网AI MicroPython传感器学习 之 SHT3X温湿度传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 Sensirion SHT3x-DIS湿度和温度传感器基于CMOSens传感器芯片,更加智能、可靠,精度更高。SHT3x-DIS具有增强的信号处理能力、两个独特的用户可选I2C地址,通信…

Vectrosity 插件使用

1 下载 2 使用,目前在2020.3.3上测试可以 导入时选5.6 再导入demo

centos7 配置搭建 wordpress 博客

环境配置 系统:centos7 CPU:2核 内存:4G 硬盘:40G 一、登录云服务器器 1.单击实例--实例名称 2. 选择安全组页签,单击安全组操作列的管理规则, 3.在入方向添加需要放行的端口。本教程中,在安全组入方向…

STM32智能小车—蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车

目录 1. 蓝牙控制小车 2. 蓝牙控制并测速小车 3. wifi控制测速小车 4. 4g控制小车 5.语音控制小车 5.1语音模块配置: 5.2 语音控制小车开发和调试代码 1. 蓝牙控制小车 使用蓝牙模块,串口透传蓝牙模块,又叫做蓝牙串口模块 串口透传技…

ts 简易封装 axios,统一 API

文章目录 为什么要封装目标文件结构封装通用请求方法获得类型提示http 方法文件上传使用示例实例化post 请求类型提示文件上传 总结完整代码: 为什么要封装 axios 本身已经很好用了,看似多次一举的封装则是为了让 axios 与项目解耦。比如想要将网络请求…

Apache Doris (五十): Doris表结构变更-动态分区(2)

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

4.数据库的基本操作

1.创建数据库 系统安装完成后会有部分默认数据库存在: 注意:mysql的语句每一个输入完后要有分号才能写下一个 这初始的四个库不要删除 其中:mysql数据库中存储用户访问权限。 创建自己的数据库命令如下: create database database_name(数据库名字&am…

【教3妹学编辑-算法题】参加会议的最多员工数

2哥 :“我要飞的更高, 飞的更高哦……” 3妹:2哥唱的啥呀, 都跑调啦 2哥 :3妹,昨天神州十六返回舱成功着陆,载人飞行任务取得圆满成功。中国真是太厉害了。 3妹:是啊, 此生无悔入华夏~不跟你多说…

案例分析真题-软件架构风格

案例分析真题-软件架构风格 2009年真题 【问题1】 【问题2】 【问题3】 2010年真题 【问题1】 【问题2】 【问题3】 2010年真题 【问题1】 【问题2】 【问题3】 2010年真题 【问题1】 【问题2】 【问题3】 2012年真题 【问题1】 骚戴理解: 首先要知道过滤器-管道的…

阿里云服务器99元一年续费原价注意事项不能变配!

阿里云优惠活动上提供的99元服务器为云服务器ECS经济型e实例,2核2G配置、3M公网带宽和40G ESSD entry 系统盘,续费不涨价,但是一定要注意不能变更云服务器配置,否则续费就涨价!阿腾云atengyun.com来详细说下阿里云99元…