『忘了再学』Shell基础 — 20、Shell中的运算符
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)方式二
使用expr或let数值运算工具,不推荐。
要想进行数值运算的第二种方法是使用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中的运算符的更多相关文章
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- 『忘了再学』Shell基础 — 2、Shell的作用与分类
目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...
- 『忘了再学』Shell基础 — 12、用户自定义变量
目录 1.变量定义 2.变量调用 3.变量的修改 4.查看变量 (1)-u选项说明: (2)-x选项说明: (3)set命令说明: 5.变量删除 1.变量定义 变量正确定义. 格式:变量名=" ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...
- 『忘了再学』Shell基础 — 24、Shell正则表达式的使用
目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...
- 『忘了再学』Shell基础 — 25、扩展正则表达式
目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...
- 『忘了再学』Shell基础 — 30、sed命令的使用
目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...
- 『忘了再学』Shell基础 — 1、Shell的介绍
目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...
- 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)
目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...
随机推荐
- safari浏览器fixed后,被软键盘遮盖的问题—【未解决】
safari浏览器fixed后,被软键盘遮盖的问题,已经有好多人问相关的问题,应该是问的角度不一样,还的再次提出咯. 问题描述 测试环境:ios 10.2/10.3 简单来说就是在html5页面中底部 ...
- js压缩图片到2m以下
用的canvas.这个问题测试妹子反馈了好几次bug,解决了好多次,虽然用了比较僵硬的办法,但总算最终解决了. 因为php的同事说,页面上的图片要直接调用七牛的接口上传到七牛,所以后端那边不能处理,必 ...
- 【Android开发】用WebView访问证书有问题的SSL网页
Android系统的碎片化很严重,并且手机日期不正确.手机根证书异常.com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点. ...
- java中设置准确的时间日期类的用法
5.日期Date相关类: 题目1: 设置准确的时间(jdk1.1以后Date的setHours不被推荐了,所以要用Calendar设置时间) import java.util.*;public cla ...
- ThinkCMF[仿骑呗共享单车官网]
学习Thinkcmf内容管理系统(Thinkphp3.2.3框架)时候,用来练手的,简单的模仿骑呗官网首页,并对后台管理做了点小修改. 安装: 下载地址:https://pan.baidu.com/s ...
- Python入门-安装Python开发环境
1.安装开发环境 #方法一:直接安装anaconda,解释器和环境,一个软件就可以包括,简单方便 参考地址:https://www.cnblogs.com/sui776265233/p/1145300 ...
- C++---使用类
运算符重载 概念 运算符重载就是想法转换, 目的是简化函数调用的方式 重载就是赋予新的含义, 运算符重载也是, 即同一个运算符可以有不同的功能 C++本身已经对一些运算符进行了重载, 同时C++允许程 ...
- Spring5-IOC底层原理
1.什么是IOC (1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 (2)使用IOC目的:为了降低耦合度 2.IOC底层原理 (1)xml解析.工厂模式.反射
- 不用关闭重启cad及不用更改快捷方式或者版本号c#调试cad插件
c#开发的cad插件需要重启cad才能进行调试,然而高版本的cad启动比较慢特别是一些古董电脑,而且cad有重启次数限制.针对不用重启cad调试已经有成熟的方案了,但是需要调试一次修改一次快捷方式或者 ...
- 检查是否安装ASM
ASM和管理 ASM是一个有效的抽象层,使Oracle数据库可以与叫做DiskGroups的抽象空间一起使用,而不是直接使用DataFiles. Oracle ASM脱离操作系统的文件系统约束,使得对 ...