当前位置:网站首页>shell 运算符
shell 运算符
2022-06-25 13:32:00 【响彻天堂丶】
1 expr
1.1 介绍
expr 是 evaluate expressions 的缩写,译为“求值表达式”。Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等, 后续讲解。
1.2 expr语法
计算语法
expr 算术运算符表达式
注意: 运算表达式
获取计算结果赋值给新变量语法
result=`expr 算术运算符表达式`
1.3 demo
#!/bin/bash
result=`expr 2 + 2`
echo "result :${result}"
算术运算符介绍
下表列出了常用的算术运算符,假定变量 a 为 1,变量 b 为 2:
| 运算符 | 说明 | 举例 |
|---|---|---|
| + | 加法 | expr $a + $b 结果为 3 |
| - | 减法 | expr $a - $b 结果为 -1 |
| * | 乘法 | expr $a \* $b 结果为 2 |
| / | 除法 | expr $b / $a 结果为 2 |
| % | 取余 | expr $b % $a 结果为 0 |
| = | 赋值 | a=$b 将把变量 b 的值赋给 a |
四则运算中如果使用了(), 也需要转义
\( 1 + 1 \)
#!/bin/bash
read -p "输入两个整数:" a b
echo "a=${a} b=${b}"
rs1=`expr ${
a} + ${
b}`
echo "a + b = ${rs1}"
rs2=`expr ${
a} - ${
b}`
echo "a - b = ${rs2}"
rs3=`expr ${
a} \* ${
b}`
echo "a * b = ${rs3}"
rs4=`expr ${
a} / ${
b}`
echo "a / b = ${rs4}"
rs5=`expr ${
a} % ${
b}`
echo "a % b = ${rs5}"

2 整数比较运算符
2.1 语法
下表列出了常用的比较运算符,假定变量 a 为 1,变量 b 为 2:
| 运算符 | 说明 | 举例 |
|---|---|---|
-eq | equals 检测两个数是否相等,相等返回 0, 否则返回1。 | [ $a -eq $b ] 返回 1。 |
-ne | not equals检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 0。 |
-gt | greater than检测左边的数是否大于右边的, 是返回0, 否则1 | [ $a -gt $b ] 返回 1。 |
-lt | lower than检测左边的数是否小于右边的, 是返回0, 否则1 | [ $a -lt $b ] 返回 0。 |
-ge | greater equals检测左边的数是否大于等于右边的, 是返回0, 否则1 | [ $a -ge $b ] 返回 1。 |
-le | lower equals检测左边的数是否小于等于右边的, 是返回0, 否则1 | [ $a -le $b ] 返回 0。 |
< | 检测左边的数是否小于右边的, 是返回0, 否则1 | (($a<$b)) 返回0 |
<= | 检测左边的数是否小于等于右边的, 是返回0, 否则1 | (($a<=$b)) 返回0 |
> | 检测左边的数是否大于右边的, 是返回0, 否则1 | (($a>$b)) 返回1 |
>= | 检测左边的数是否大于等于右边的, 是返回0, 否则1 | (($a>=$b)) 返回1 |
== | 检测左边的数是否等于右边的, 是返回0, 否则1 | (($a==$b)) 返回1 |
!= | 检测左边的数是否不等于右边的, 是返回0, 否则1 | (($a!=$b)) 返回0 |
注意:
整数比较运算符只支持整数,不支持小数与字符串(字符串比较后续讲解),除非字符串的值是整数数字。
每个命令都有返回值, 这个后面我们会讲解退出状态再具体说明, 返回0代表成功, 返回1代表失败
2.2 demo
#!/bin/bash
read -p "输入两个整数:" a b
echo "a: ${a}"
echo "b: ${b}"
if (($a > $b));
then
echo "a 大于 b"
elif (($a == $b)); then
echo "a 等于 b"
else
echo "a 小于 b"
fi

3 字符串比较运算符
可以比较2个变量, 变量的类型可以为数字(整数,小数)与字符串
3.1 语法
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
字符串比较可以使用 [[]] 和 [] 2种方式
| 运算符 | 说明 | 举例 |
|---|---|---|
| == 或 = | 相等。用于比较两个字符串或数字,相同则返回 0。可以使用= | [ $a == $b ] 返回1 [ $a = $b ] 返回 1[[ $a == $b ]] 返回1[[ $a = $b ]] 返回1 |
| != | 不相等。用于比较两个字符串或数字,不相同则返回 0。 | [ $a != $b ] 返回 0[[ $a != $b ]] 返回 0 |
| < | 小于, 用于比较两个字符串或数字, 小于返回0, 否则返回1 | [ $a \< $b ] 返回 0[[ $a < $b ]] 返回 0 |
| > | 大于, 用于比较两个字符串或数字, 大于返回0, 否则返回1 | [ $a \> $b ] 返回 1[[ $a > $b ]] 返回 1 |
| -z | 检测字符串长度是否为0,如果长度为0返回则返回0, 否则返回1。 | [ -z $a ] 返回 false。 |
| -n | 检测字符串长度是否不为 0,如果长度不为 0 则返回0, 否则返回1。 | [ -n “$a” ] 返回 true。 |
| $ | 检测字符串是否不为空,不为空返回0, 为空返回1。 | [ $a ] 返回 true。 |
字符串比较没有
<=可以通过[[ "a" < "b" && "a" == "b" ]]>
3.2 demo
#!/bin/bash
read -p "输入两个字符串:" a b
echo "a: ${a}"
echo "b: ${b}"
if [ $a == $b ]
then
echo "a等于b"
else
echo "a不等于b"
fi

4 布尔运算符
4.1 语法
| 运算符 | 说明 | 举例 |
|---|---|---|
| ! | 非运算,取反, 表达式为 true 则返回 false, 否则返回 true。 | [ ! 表达式 ] 取反。 |
| -o | or 或运算,有一个表达式为 true 则返回 true。 | [ 表达式1 -o 表达式2 ] |
| -a | and 与运算,两个表达式都为 true 才返回 true。 | [ 表达式1 -a 表达式2 ] |
4.2 demo
#!/bin/bash
a=1 b=2
if [ $a -lt 2 -a $b -gt 10 ]
then
echo "$a 小于 2 且 $b 大于 10 : 返回 true"
else
echo "$a 小于 2 且 $b 大于 10 : 返回 false"
fi
if [ $a -lt 10 -o $b -gt 10 ]
then
echo "$a 小于 10 或 $b 大于 10 : 返回 true"
else
echo "$a 小于 10 或 $b 大于 10 : 返回 false"
fi
if [ ! $a -gt $b ]
then
echo "$a 大于 $b 取反 : 返回 true"
else
echo "$a 大于 $b 取反 : 返回 false"
fi

5 逻辑运算符
5.1 命令
| 运算符 | 说明 | 举例 |
|---|---|---|
| && | 逻辑的 AND | [[ 表达式1 && 表达式2 ]] |
| || | 逻辑的 OR | [[ 表达式1 || 表达式2 ]] |
| ! | 逻辑非 | [[ ! 表达式 ]] |
注意
使用
&&和||的运算符必须放在[[]]或(())中才有效, 否则报错
!可以用在[],[[]]中, 不可以在(())
5.2 demo
#!/bin/bash
a=1 b=2
if [[ $a -lt 10 && $b -gt 10 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $a -lt 10 || $b -gt 10 ]]
then
echo "返回 true"
else
echo "返回 false"
fi

边栏推荐
- BACnet gateway bl103 for building automation
- Nova组件源码分析之冷迁移与Resize
- OpenStack学习笔记之-Nova组件深入了解
- 请问通达信股票开户是安全的吗?
- 英语中的九大词性与九大时态
- 一次性讲清楚 Handler 可能导致的内存泄漏和解决办法 | 开发者说·DTalk
- How does hash eagle, the founder of equity NFT, redefine NFT and use equity to enable long-term value?
- Use of bind() in JS and handwritten bind()
- Rust,程序員創業的最佳選擇?
- Syntax 'trap'
猜你喜欢
![[open source Hongmeng system display] the rk3568 development board is equipped with openharmony 3.1 release](/img/c4/0bfb380d38b5205a02a10175ee6888.png)
[open source Hongmeng system display] the rk3568 development board is equipped with openharmony 3.1 release

There is a problem with the date when MySQL imports and exports data to excel

Rust,程序员创业的最佳选择?

關於一道教材題的講解

触觉智能分享-RK3568在金融自助终端的应用

Solve the problem that yarn cannot load files in vs Code

用NumPy实现神经网络(Mysteries of Neural Networks Part III)

1251- client does not support authentication protocol MySQL error resolution

Mise en place d'un Cluster kubernets avec plusieurs serveurs Cloud

Explanation of a textbook question
随机推荐
Explication d'un problème de manuel
哈希錶、哈希沖突
关于一个图书小系统的实现
测一测你的挣钱能力有多强?未来的你将从事什么职业?
There is a problem with the date when MySQL imports and exports data to excel
Download File blob transcoding
The priority of catch() and then (..., ERR) of promise
Drago Education - typescript learning
Deeply understand the mathematics behind deep neural networks (mysteries of neural networks Part I)
通达信股票账户开户安全吗
请问通达信股票开户是安全的吗?
多臺雲服務器的 Kubernetes 集群搭建
解决报错:Creating window glfw ERROR: GLEW initalization error: Missing GL version
国信证券股票账户开户安全吗?请问。
【开源鸿蒙系统展示】RK3568开发板搭载OpenHarmony 3.1 Release
On the simple realization of Sanzi chess game and the method of judging the victory of n-zi chess
历史上的今天:网易成立;首届消费电子展召开;世界上第一次网络直播
Insight into heap and stack stored in new string() /string() in JS
数据采集系统网关采集工厂效率
关于猜数字游戏的实现