算术运算符
算术运算符 | 意义(*表示常用) |
---|---|
+、- | 加法(或正号)、减法(或负号)* |
*、/、% | 乘法、除法、取余(取模)* |
** | 幂运算* |
++、– | 增加及减少,可前置也可放在变量结尾* |
!、&&、|| | 逻辑非(取反)、逻辑与(and)、逻辑或(or)* |
<,<=、>、>= | 比较符号(小于、小于等于、大于、大于等于) |
==、!=、= | 比较符号(相等、不相等,对于字符串“=”也可以表示相当于)* |
<<、>> | 向左位移,向右位移 |
~、|、&、^ | 按位取反、按位异或、按位与、按位或 |
=、+=、-=、*=、/=、%= | 赋值运算符,例如a+=1相当于a=a+1,a-=1相当于a=a-1 * |
运算操作符与运算命令 | 意义 |
---|---|
(()) | 用于整数运算的常用运算符,效率很高 |
let | 用于整数运算,类似于“(())” |
expr | 可用于整数运算,但还有很多其他的额外功能 |
bc | Linux下的一个计算器程序(适合整数及小数运算) |
$[] | 用于整数运算 |
awk | awk即可以用于整数运算,也可以用于小数运算 |
declare | 定义变量值和属性,-i参数可以用于定义整形变量,做运算 |
双小括号“(())”数值运算命令
双小括号“(())”数值运算的基础语法
双小括号“(())”的作用是进行数值运算与比较,它的效率很高,用法灵活,是企业场景运维人员经常采用的运算操作符。
运算操作符与运算命令 | 意义 |
---|---|
((i=i+1)) | 此种书写方法为运算后赋值法,即将i+1的运算结果赋值给变量i。 注意,不能用“echo ((i=i+1))”的形式输出表达式的值, 但可以用echo $((i=i+1))输出其值 |
i=$((i+1)) | 可以在“(())”前加$符,表示将表达式运算后赋值给i |
((8>7&&5==5)) | 可以进行比较操作,还可以加入逻辑与和逻辑或,用于条件判断 |
echo $((2+1)) | 需要直接输出运算表达式的运算结果时,可以在“(())”前加$符 |
“(())”表达式在命令执行时不需要加$符号,直接使用((6%2))形式即可,但是如果需要输出,就要加$符号,例如:echo $((6%2))。
“(())”里的所有字符之间没有空格、有一个或多个空格都不会影响结果。
let运算命令的用法
[sy@sy-pc ~]$ i=2
[sy@sy-pc ~]$ i=i+8 #<==假如开头不用let进行赋值
[sy@sy-pc ~]$ echo $i #<==输出结果为i+8,也就是没有计算i+8
[sy@sy-pc ~]$ unset i
[sy@sy-pc ~]$ i=2
[sy@sy-pc ~]$ let i=i+8 #<==采用let赋值后再输出
[sy@sy-pc ~]$ echo $i
[sy@sy-pc ~]$ 10
提示:let i=i+8等同于((i=i+8)),但后者效率更高。
expr命令的基本用法
expr (evaluate(求值) expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度、匹配等得运算处理。
1.expr用于计算
语法:expr Expression
[sy@sy-pc ~]$ expr 2 + 2
[sy@sy-pc ~]$ expr 2 - 2
[sy@sy-pc ~]$ expr 2 \* 2 #<==*号用\来转义。
[sy@sy-pc ~]$ expr 2 / 2
要注意,在使用expr时:
- 运算符及用于计算的数字左右都至少有一个空格,否则会报错。
- 使用乘号时,必须用反斜线屏蔽其特定含义,因为shell可能会误解星号的含义。
2.expr配合变量计算
expr在shell中可配合变量进行计算,但需要用反引号将计算表达式括起来。
[sy@sy-pc ~]$ i=5
[sy@sy-pc ~]$ i=`expr $i + 6`
#<==注意用反引号将表达式引起来,变量和数字符号两边要有空格
[sy@sy-pc ~]$ echo $i
[sy@sy-pc ~]$ 11
3.判断一个变量值或字符串是否为整数
在shell编程里,由于函数库很少,所以判断字符串是否为整数就不是一件很容易的事情。
利用以expr做计算时变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回的值是否为0,如果是0,就认为做加法的变量或字符串为整数,否则就不是整数。
[sy@sy-pc ~]$ i=5 #<==赋值一个数5给i
[sy@sy-pc ~]$ expr $i + 6 #<==把i和整数相加
11
[sy@sy-pc ~]$ expr $i + 6 &>/dev/null #<==表示不保留任何输出
[sy@sy-pc ~]$ echo $? #<==输出返回值
0 #<==返回0,则证明i的值为整数
[sy@sy-pc ~]$ i=hello
[sy@sy-pc ~]$ expr $i + 6 &>/dev/null
[sy@sy-pc ~]$ echo $?
2 #<==返回为非0,则证明i的值不是整数
通过传参判断输出内容是否为整数。
#! /bin/bash
[ $# -ne 1 ] && { echo '请在文件名后面输入一个正整数';exit 1; } || { }
expr $1 + 1 >/dev/null 2>&1
[ $? -eq 0 ] && echo int || echo chars