汉中城乡建设网站微商怎么找客源人脉
文章目录
- 1. 整数
- 1.1、算数运算符
- 1.1.1 加减乘除运算
- 1.1.2 =号关系运算
- 1.1.2.1 =(赋值)、==(等于)、!=(不等于)的使用
- 1.1.2.2 >、>=、<、<=的使用
- 1.2 $((运算式)) 双括号形式 、 $[运算式] 语法 进行运算
- 1.3 -eq关系运算符
- 1.4 =、==、-eq的区别
- 2 字符串
- 2.1 字符串运算
- 3 逻辑运算符
- 参考
在shell中,和其他编程语言一样也有多种运算符,常用的运算符有:算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等。
但是由于存在整数和字符串,处理的语法稍有不同;因此我们划分整数和字符串类型
1. 整数
1.1、算数运算符
算数运算符就是我们最常见的,常用的主要有+(加)、-(减)、*(乘)、/(除)、%(取余)、=(赋值)、==(等于)、!=(不等于)。
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | `expr $a + $b` 结果为 30。 |
- | 减法 | `expr $a - $b` 结果为 -10。 |
* | 乘法 | `expr $a \* $b` 结果为 200。 |
/ | 除法 | `expr $b / $a` 结果为 2。 |
% | 取余 | `expr $b % $a` 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
1.1.1 加减乘除运算
shell是不支持简单的数学运算的,这时候我们就可以使用expr命令来实现shell中的简单运算,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。expr的命令使用方法是:比如1+2要写成expr 1 + 2
,expr和计算公式需要写在 ` ` 中(方括号,esc下面的那个按钮)并且数值和运算符之间要有空格
`expr 1+2`是不对的。
不带运算符,会当做普通字符串进行输出:
echo "1+2" #先试下正常的运算方式能否得到结果
#打印结果 1+2
带了运算符,如果没有空格,会当做普通字符串进行输出
:
echo `expr 1+2` #数值和运算符中间没有空格时
#打印结果 1+2
正例,注意乘法运算需要转义字符
:
echo `expr 1 + 2` #加法
#打印结果 3
echo `expr 2 - 1` #减法
#打印结果 1
echo `expr 2 \* 3` #乘法必须要使用反斜杠才能实现
#打印结果 6
echo `expr 2 * 3` #乘法没有反斜杠时
#打印结果 expr: 语法错误echo `expr 6 / 2` #除法
#打印结果 3
echo `expr 6 % 4` #取余
#打印结果 2
1.1.2 =号关系运算
什么是关系运算?就是比大小、判断是否相等,常用在 if
条件判断中
出去加减乘除,剩下的符号中,有的可以进行简单的关系运算, =(单等于)、==(等于)、!=(不等于) 、>、>=、<、<=
注意:if 条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
不建议使用 == 、> 、 >= 等符号进行数字比较,因为如果是字符串的话,也可以使用 ,并且表示不同的含义,这样如果数字类型变量误定义为字符串类型,不容易发现错误,建议使用 -eq 语法进行比较。
1.1.2.1 =(赋值)、==(等于)、!=(不等于)的使用
在 if 语法中,放在[]
中 ,示例:
#!/bin/bash
a=10
b=20if [ $a == $b ]
thenecho "a 等于 b" # 不打印
fi
if [ $a != $b ]
thenecho "a 不等于 b" #打印
fi
1.1.2.2 >、>=、<、<=的使用
< 小于(需要双括号),如: if (("$a" < "$b"))<= 小于等于(需要双括号),如: if (("$a" <= "$b"))> 大于(需要双括号),如: if (("$a" > "$b"))>= 大于等于(需要双括号),如: if (("$a" >= "$b"))
在 if 语法中,放在 (( ))
中 ,要和 中括号区分开来,示例:
a=10
b=20if(("$a" < "$b"))
thenecho "a 小于 b" # 不打印
fi
双括号结构中,变量名引用可以加 $,也可以不加;
运算符前后可以有空格,也可以没有
但是为了方便识别,建议加 $ 并且保留空格
1.2 $((运算式)) 双括号形式 、 $[运算式] 语法 进行运算
我们也可以直接使用 + - 进行简单的运算,但是需要借助 $((运算式)) 双括号形式 和“$[运算式] 语法 ,详情参见 【Linux】 shell 常用的数据类型(数字、字符串和数组)和运算中的 <1.1 计算>章节
1.3 -eq关系运算符
这里提到的关系运算符是特殊的,通过字母实现的,而不是前文的数学符号
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20,注意使用中括号或双中括号
语法:
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
示例:
#!/bin/basha=10
b=20if [ $a -eq $b ]
thenecho "$a -eq $b : a 等于 b"
elseecho "$a -eq $b: a 不等于 b" # 打印
fiif [ $a -ne $b ]
thenecho "$a -ne $b: a 不等于 b" # 打印
elseecho "$a -ne $b : a 等于 b"
fiif [ $a -gt $b ]
thenecho "$a -gt $b: a 大于 b"
elseecho "$a -gt $b: a 不大于 b" # 打印
fiif [ $a -lt $b ]
thenecho "$a -lt $b: a 小于 b" # 打印
elseecho "$a -lt $b: a 不小于 b"
fiif [ $a -ge $b ]
thenecho "$a -ge $b: a 大于或等于 b"
elseecho "$a -ge $b: a 小于 b" # 打印
fiif [ $a -le $b ]
thenecho "$a -le $b: a 小于或等于 b" # 打印
elseecho "$a -le $b: a 大于 b"
fi
关系运算符的应用范围只支持数字(确切的说是整数,小数暂不确定),不支持字符串,因此 建议数字 进行关系运算时采用这种方案,这样如果数字类型变量误定义为字符串类型,可以及时发现错误,例如:
#!/bin/bash
a=10
b=abcif [ $a -eq $b ]
thenecho "a 不等于 b"
fi
由于b变量是字符串,执行时报类型不是整型错误:
[ubuntu]$ ./a.sh
./a.sh: line 14: [: abc: integer expression expected
1.4 =、==、-eq的区别
(1)单等号和双等号能用于字符string类型和整型integer的相等判断。
(2)相等关系运算符“-eq”仅能用于整型integer的相等比较。
(3)相等关系运算符“-eq”不能在算数运算表达式“(( ))”中
(4)在 if 条件表达式
“[ ]”中,单等号和双等号等价,都是相等算数运算符。
(5)在算数运算表达式“(( ))”中,单等号是赋值算数运算符,双等号为相等算数运算符。
总结:在进行相等判断时,最通用的方法是使用双等号“==”相等判断符,避免使用单引号引起歧义。而且数字比较和字符串比较都可以用 == 号,并且建议数字类型时使用 -eq 语法,这样可以检测非数字异常。
2 字符串
2.1 字符串运算
参见
3 逻辑运算符
参见 【Linux】shell中的逻辑运算符
参考
Shell 基本运算符
linux shell中的比较符号与特殊符号介绍