Shell编程之运算符

目录

算数运算符

关系运算符

文件运算符

逻辑运算符


算数运算符

注意:

  • 原生bash不支持简单的数学运算,但是可以通过其他命令来实现, 例如 expr

常用算数运算符
+
-
*
/
%取余

示例如下:

A=2
B=3
expr $[$A+$B]
expr $[$A-$B]
expr $[$A*$B]
expr $[$A/$B]
expr $[$A%$B]

 复合算数运算:

expr $[($A+$B)*$B]

注意:

  • 表达式和运算符之间要有空格。
  • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
  • 乘号(*)前边必须加反斜杠(\)进行转义才能实现乘法运算。

 关系运算符

常用关系运算符
在[]中使用的比较符在(()和[[]]}中使用的比较符说明
eq==equal 的缩写,表相等
-ne!=not equal 的缩写,表不相等
-gt>greater thanl 的缩写,表大于
-ge>=greater equal 的缩写,表大于等于
-lt<greater equal 的缩写,表小于
-le<=greater equal 的缩写,表小于等于

示例如下:

[ $A -eq $B ]
echo $?[ $A == $B ]
echo $?[ $A -gt $B ]
echo $?[ $A > $B ]
echo $?

文件运算符
文件权限运算符
-r读权限(read
-w写权限(write
-x执行的权限(execute

示例如下:

[ -w test.sh ]
echo $?[ -r test.sh ]
echo $?[ -x test.sh ]
echo $?

文件测试运算符
-b检测文件是否是块设备文件,如果是,则返回 true
-c检测文件是否是字符设备文件,如果是,则返回 true
-d检测文件是否是目录文件,如果是,则返回 true
-f检测文件是否是普通文件(既不是目录也不是设备文件),如果是,则返回 true
-g检测文件是否设置了SGID位,如果是,则返回 true
-k检测文件是否设置了粘着位(stucky Bit),如果是,则返回 true
-p检测文件是否具名管道,如果是,则返回 true
-u检测文件是否设置了SUID位,如果是,则返回 true
-r检测文件是否可读,如果是,则返回 true
-w检测文件是否可写,如果是,则返回 true
-x检测文件是否可执行,如果是,则返回 true
-s检测文件是否为不为空(文件大小是否不为0),如果不为0,则返回 true
-e检测文件(包括目录)是否存在,如果存在,则返回 true
-a检测文件(包括目录)是否存在,如果存在,则返回 true
逻辑运算符
常用逻辑运算符
赋值A=10赋值运算,返回 true
-a&&与运算,两个表达式都为 true,才返回 true
-o||或运算,有一个表达式都为 true,则返回 true
!!非运算,表达式为 true,则返回 false

示例如下:

A=2
B=3
echo $?
[ $A > $B ] || [ $A < $B]
echo $?
[ $A > $B ] && [ $A < $B ]
echo $?
! [ $A > $B ]
echo $?

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | 技术支持工程师,最高40k,CCNP、CISP认证优先

01 卓望公司 招聘岗位&#xff1a;高级技术支持工程师 职责描述&#xff1a; 1、负责网络安全防护类产品技术支持工作&#xff0c;包括但不限于&#xff1a;抗DDoS&#xff0c;云WAF&#xff0c;漏洞扫描等。 2、负责网络安全防护类产品安装、配置、升级和系统加固等维护支撑工…

暴力递归转动态规划(二)

上一篇已经简单的介绍了暴力递归如何转动态规划&#xff0c;如果在暴力递归的过程中发现子过程中有重复解的情况&#xff0c;则证明这个暴力递归可以转化成动态规划。 这篇帖子会继续暴力递归转化动态规划的练习&#xff0c;这道题有点难度。 题目 给定一个整型数组arr[]&…

Git仓库简介

1、工作区、暂存区、仓库 工作区&#xff1a;电脑里能看到的目录。 暂存区&#xff1a;工作区有一个隐藏目录.git&#xff0c;是Git的版本库&#xff0c;Git的版本库里存了很多东西&#xff0c;其中最重要的就是称为stage&#xff08;或者叫index&#xff09;的暂存区&#xf…

leetcode 42. 接雨水

2023.8.29 本题可以用双指针做&#xff0c;求出每一列能盛的雨水&#xff0c;再相加即可。不过暴力法会超时&#xff0c;需要优化。 双指针&#xff08;暴力&#xff09;&#xff1a; class Solution { public:int trap(vector<int>& height) {int ans 0;for(int …

C++自创题目——第一期

一、题目描述&#xff1a; 在一段时间内&#xff0c;到达港口的船有n艘&#xff0c;其中每艘船的信息包括:到达时间t(表示第t秒)&#xff0c;船上乘客数k&#xff0c;以及k名乘客的国籍。输出前3600s内每艘船上国籍种数&#xff0c;并输出国籍种数最少的船只的到达时间。 二、…

ELK日志收集系统

一&#xff0c;概述 ELK由三个组件构成 作用&#xff1a;日志收集 日志分析 日志可视化 二&#xff0c;组件 1&#xff0c;elasticsearch 日志分析 开源的日志收集、分析、存储程序 特点 分布式 零配置 自动发现 索引自动分片 …

QML Book 学习基础3(动画)

目录 主要动画元素 例子&#xff1a; 非线性动画 分组动画 Qt 动画是一种在 Qt 框架下创建交互式和引人入胜的图形用户界面的方法&#xff0c;我们可以认为是对某个基础元素的多个设置 主要动画元素 PropertyAnimation-属性值变化时的动画 NumberA…

JavaSE 集合框架及背后的数据结构

目录 1 介绍2 学习的意义2.1 Java 集合框架的优点及作用2.2 笔试及面试题 3 接口 interfaces3.1 基本关系说明3.2 Collection 常用方法说明3.3 Collection 示例3.4 Map 常用方法说明3.5 Map 示例 4 实现 classes5 Java数据结构知识体系5.1 目标5.2 知识点 1 介绍 集合&#xf…

4.9 已建立连接的TCP,收到SYN会发生什么?

1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立&#xff0c;于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢&#xff1f; 服务端给客户端发消息了&#xff1a;客户端连接已被关闭&#xff…

Kubernetes入门 十二、网络之Ingress

目录 概述安装 Ingress使用 Ingress准备工作部署Ingress设置默认后端Ingress 中的 nginx 的全局配置限流路径重写基于 Cookie 的会话保持技术配置 SSL 概述 通常情况下&#xff0c;service 和 pod 的 IP 仅可在集群内部访问。 Service 可以也使用 NodePort 暴露集群外访问端口…

LeetCode-160. 相交链表

这是一道真的非常巧妙的题&#xff0c;题解思路如下&#xff1a; 如果让他们尾端队齐&#xff0c;那么从后面遍历就会很快找到第一个相交的点。但是逆序很麻烦。 于是有一个巧妙的思路诞生了&#xff0c;如果让短的先走完自己的再走长的&#xff0c;长的走完走短的&#xff0c;…

java八股文面试[多线程]——有几种创建线程的方式

this逃逸问题&#xff1a;构造器中启动线程。 面试题&#xff1a; 用Thread和Runable创建线程的差别 一、Runnable和Thread的区别 继承性&#xff1a;Thread是一个类&#xff0c;因此如果继承Thread类&#xff0c;子类就不能再继承其他的类了&#xff0c;而实现Runnable接口…