1、Shell常用运算符

Shell中常用运算符如下表:

优先级数值越大优先级越高,具有较高优先级级别的运算符先于较低级别的运算符进行求值运算。

优先级 运算符 说明
13 -,+ 单目负、单目正
12 !,~ 逻辑非、按位取反或补码
11 *,/,% 乘、除、取模
10 +,- 加、减
9 <<,>> 按位左移、按位右移
8 <=,>=,<,> 小于或等于、大于或等于、小于、大于
7 ==,!= 等于、不等于
6 & 按位与
5 ^ 按位异或
4 ` `
3 && 逻辑与
2 `
1 =,+=,-=,/=
`%=,&=,^=,
=<br /><<=,>>=`

简单示例:

# 例1:加减乘除
# 虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级。
[root@Lyl ~]# num=$(( (10+8)*6/2 ))
[root@Lyl ~]# echo $num
54 # 例2:取模运算
[root@Lyl ~]# num=$(( 19%5 ))
[root@Lyl ~]# echo $num
4 # 例3:逻辑与
# 逻辑与运算只有相与的两边都是1,与的结果才是1,否则与的结果是0
[root@Lyl ~]# value=$(( 1&&0 ))
[root@Lyl ~]# echo $value
0

2、Shell中数值运算的方法

在Shell中所有变量的默认类型是字符串型,那如果我需要进行数值运算,可以采用以下三种方法中的任意一种:

(1)方式一

就是使用declare命令,把一个变量声明成数值类型。

# 给变量aa和bb赋值
[root@Lyl tmp]# aa=11
[root@Lyl tmp]# bb=22 # 声明变量cc的类型是整数型,它的值是aa和bb的和。
# 这里注意一下,其实应该把变量aa和bb也通过declare命令声明成数值型,
# 但是Shell这点还好,只把最后的和cc声明成数值型,也是能进行计算的。
[root@Lyl tmp]# declare -i cc=$aa+$bb # 输出变量cc
[root@Lyl tmp]# echo $cc
33

该种方式并不太建议使用,编写有些麻烦。虽然系统最终换算的方式还是用declare命令,但还是不推荐。

(2)方式二

使用exprlet数值运算工具,不推荐。

要想进行数值运算的第二种方法是使用expr命令,这种命令就没有declare命令复杂了。

expr运算工具示例如下:

# 给变量aa和bb赋值
[root@Lyl ~]# aa=11
[root@Lyl ~]# bb=22 # aa和bb的求和。
# 注意“+”号左右两侧必须有空格。
[root@Lyl ~]# cc=$(expr $aa + $bb) # 说明一下
# 我们之前说过$( )中调用的是系统命令,
# 换句话说$( )中`expr $aa + $bb `是一条运算命令。 # 输出cc变量的值
[root@Lyl ~]# echo $cc
33 # 使用expr命令进行运算时,要注意元算符号左右两侧必须有空格,
# 否则会报错,元算不能被执行。
[root@Lyl ~]# cc=$(expr $aa +$bb)
expr: 语法错误

let命令和expr命令基本类似,都是Linux中的运算命令。

let元算工具示例如下:

# 示例1
# 给变量aa和bb赋值
[root@Lyl ~]# aa=11
[root@Lyl ~]# bb=22 # aa和bb的求和。
[root@Lyl ~]# let cc=$aa+$bb
[root@Lyl ~]# echo $cc
33 # 示例2
# 定义变量n
[root@Lyl ~]# n=10 # 变量n的值等于变量本身再加1
[root@Lyl ~]# let n+=1
[root@Lyl ~]# echo $n
11

总结:

expr命令和let命令大家可以按照习惯使用,不过let命令对格式要求要比expr命令宽松,所以推荐使用let命令进行数值运算。

(3)方式三(推荐)

使用$((运算符))或者$[运算符]的方式进行运算。(两种都可以)

# 给变量aa和bb赋值
[root@Lyl tmp]# aa=11
[root@Lyl tmp]# bb=22 # 求和
[root@Lyl ~]# cc=$(( $aa+$bb))
[root@Lyl ~]# echo $cc
33

总结:

$( )中存放的是系统命令,$(( ))中是进行数学运算的。

$[ ]不推荐使用,因为[ ]在Shell中有极其特殊且重要的作用,就是测试。(之后Shell编程的部分说明)

这三种数值运算方式,大家可以按照自己的习惯来进行使用,推荐使用方式三。

『忘了再学』Shell基础 — 20、Shell中的运算符的更多相关文章

  1. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  2. 『忘了再学』Shell基础 — 2、Shell的作用与分类

    目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...

  3. 『忘了再学』Shell基础 — 12、用户自定义变量

    目录 1.变量定义 2.变量调用 3.变量的修改 4.查看变量 (1)-u选项说明: (2)-x选项说明: (3)set命令说明: 5.变量删除 1.变量定义 变量正确定义. 格式:变量名=" ...

  4. 『忘了再学』Shell基础 — 3、echo命令的介绍与使用

    目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...

  5. 『忘了再学』Shell基础 — 24、Shell正则表达式的使用

    目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...

  6. 『忘了再学』Shell基础 — 25、扩展正则表达式

    目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...

  7. 『忘了再学』Shell基础 — 30、sed命令的使用

    目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...

  8. 『忘了再学』Shell基础 — 1、Shell的介绍

    目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...

  9. 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)

    目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...

随机推荐

  1. 前端调试利器 - Charles

    Docs 开发之 Charles 配置指南 1.下载与安装 charles-proxy-4.1.4 .dmg56.12 MB已存到云盘下载 2.激活 使用公司正版license 激活 安装证书 点击证 ...

  2. HTML5存储方式

    由于之前在参加面试或者笔试的过程中经常会被问到HTML5存储的内容,包括它们之间的区别.特征和应用范围,所以看到一篇介绍不错的文章,把里面的个人觉得适合我的内容按照自己的理解总结如下.方便以后忘记了进 ...

  3. 软件构造实验-Guns

    根据guns开发示例,搭建汽车信息管理系统

  4. vConsole移动端调试利器

    图示: ,  简单的几步操作: 1. 引入cdn     可以从https://www.bootcdn.cn/vConsole/下载,也可以下载保存在本地,直接引用 <!DOCTYPE html ...

  5. vue上拉加载下拉加载

    npm i vue-scroller <scroller :on-refresh="refresh" :on-infinite="infinite" :n ...

  6. 查看k8s的yaml里面反馈的错误,不仅仅是通过日志来查看错误

    使用:kubectl describe pod......例如: kubectl describe pod api-55f5d8d49d-kzmcj ///////////////////////// ...

  7. linux权限与系统信息

    权限 1.权限分为3个部分 可读(r) 可写(w) 可执行(x) 没有对应权限(-) 2.权限位 权限位主要分为三个部分,分别是属主.属组以及其他人 rwx : 属主 r-x : 属组 r-x : 其 ...

  8. Ubu18.0-NVIDIA显卡驱动重装

    //图片仅供参考,请勿代入 问题情况:电脑装了双系统,WIN10+Ubu,Ubu分辨率不稳定,经常发生变化 显卡型号:打开设备管理器进行查看 解决方法:重装NVIDIA显卡驱动 1.去英伟达官网下载自 ...

  9. 如何使用 python 爬取酷我在线音乐

    前言 写这篇博客的初衷是加深自己对网络请求发送和响应的理解,仅供学习使用,请勿用于非法用途!文明爬虫,从我做起.下面进入正题. 获取歌曲信息列表 在酷我的搜索框中输入关键词 aiko,回车之后可以看到 ...

  10. flex布局 一行4个元素 后面不够4个元素对齐

    html 父元素 .container { display: flex; flex-wrap: wrap;} 子元素.list { width: 24%; height: 100px; backgro ...