这篇文章上次修改于 415 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

双小括号 (())

  • 整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。
[root@master236 ~]# i=0
[root@master236 ~]# ((i=i+i))
[root@master236 ~]# $?
bash: 1: 未找到命令...
[root@master236 ~]# ((i=i+1))
[root@master236 ~]# $?
bash: 0: 未找到命令...
[root@master236 ~]# echo $i
1
[root@master236 ~]# i=$((i+4))
[root@master236 ~]# echo $i
5
[root@master236 ~]# 
[root@master236 ~]# echo $((7>6 && 5>3))
1
[root@master236 ~]# echo $((7>6 && 5>8))
0
[root@master236 ~]# 

let 命令

  • let命令功能等同于(()) 的语法糖

[root@master236 ~]# num=10 [root@master236 ~]# let total=num+5 [root@master236 ~]# echo $total 15 [root@master236 ~]#

$[] 命令

  • $[ ]只能进行整数运算。但是只能对单个表达式的计算求值与输出,不能多个同属进行
  • $[ ]会对表达式进行计算,并取得计算结果
  • 表达式内部不可以赋值给变量没有(())功能强大
[root@master236 ~]# a=1
[root@master236 ~]# b=2
[root@master236 ~]# echo $[a+b]
3
[root@master236 ~]# echo $[a]
1
[root@master236 ~]# echo $[a++]
1
[root@master236 ~]# echo $[a]
2
[root@master236 ~]# echo $[$a+3]
5
[root@master236 ~]# c=$[a**3]
[root@master236 ~]# echo $c
8

expr 命令

  • expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具有几个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等

# 数值运算 [root@AY140330180959236303Z ~]# expr 1 + 3 4 [root@AY140330180959236303Z ~]# expr 2 \* 3 6 # 获取字符串长度 [root@AY140330180959236303Z ~]# expr length "123qac" 6 # 获取子串命令 # 命令格式: substr STRING POSITION LENGTH # 返回STRING字符串中从POSITION开始,长度最大为LENGTH的子串。如果POSITION或LENGTH为负数,0或非数值,则返回空字符串。POSITION 从1开始 [root@AY140330180959236303Z ~]# expr substr "123qaz" 2 3 23q # 匹配模式 # "string : REGEX"字符串匹配示例。要输出匹配到的字符串结果,需要使用"\("和"\)",否则返回的将是匹配到的字符串数量。 # 等同于命令 "match STRING REGEX" # 注意,由于REGEX中隐含了"^",所以使得匹配时都是从string首字符开始的 [root@AY140330180959236303Z ~]# expr 123456tg : '[0-9]\+' 6 [root@AY140330180959236303Z ~]# expr 123456tg : '\([0-9]\+\)' 123456 # 查找 # "index string chars" # 该表达式是从string中搜索chars中某个字符的位置,返回在string中最靠前的字符的位置 [root@AY140330180959236303Z ~]# expr index "123qaz" "aq" 4 # 该命令将对字符串"aq"逐字符分解,首先分解得到第一个字符a,从123qaz中搜索到a的位置为5,再分解得到第二个字符q,该字符在123qaz中的位置为4,其中q是最靠前的字符,所以命令返回的结果为4 [root@AY140330180959236303Z ~]# expr index "123qaz" "87" 0 # 字符串123qaz中没有8和7, 所以返回0 # "+ token" 用法 # expr中有些符号和关键字有特殊意义,如"match"、"index"、"length",如果要让其成为字符,使用该表达式将任意token强制解析为普通字符串 [root@AY140330180959236303Z ~]# expr length "index" expr: syntax error [root@AY140330180959236303Z ~]# expr length + "index" 5

bc 命令

  • bc可用于浮点数的计算,是linux中的计算器。该命令功能丰富,支持自定义变量、自定义函数表达式逻辑、支持科学计算等等
# 使用管道符进行bc运算
[root@AY140330180959236303Z ~]# echo 1+1 | bc
2
[root@AY140330180959236303Z ~]# echo 2*3.3 | bc
6.6
# 计算1=2+3+4+5
[root@AY140330180959236303Z ~]# seq -s "+" 5 | bc
15
[root@AY140330180959236303Z ~]# expr `seq -s " + " 5`
15
# 进入bc进行运算
# bc运算器有一个内建的变量scale,用于表示计算的精度(其实是刻度),即小数位保留几位。默认刻度为0,所以除法运算的默认结果是整数
[root@AY140330180959236303Z ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
a=2
a++
2
a
3
++a
4
a
4
++a
5
b=2
c=a/b
c
2
# bc运算器有一个内建的变量scale,用于表示计算的精度(其实是刻度),即小数位保留几位。默认刻度为0,所以除法运算的默认结果是整数
scale=2
c=a/b
c
2.50