此处只是做个简单的记录。
1、使用expr命令进行简单的数学表达式运算,expr可以识别少数的数学运算符,如下所示
操作符 描述 ARG1 | ARG2 如果ARG1既不是null也不是零值,返回ARG1;否则返回ARG2 ARG1 & ARG2 如果没有参数是null或零值,返回ARG1;否则返回0 ARG1 < ARG2 如果ARG1小于ARG2,返回1;否则返回0 ARG1 <= ARG2 如果ARG1小于或等于ARG2,返回1;否则返回0 ARG1 = ARG2 如果ARG1等于ARG2,返回1;否则返回0 ARG1 != ARG2 如果ARG1不等于ARG2,返回1;否则返回0 ARG1 >= ARG2 如果ARG1大于或等于ARG2,返回1;否则返回0 ARG1 > ARG2 如果ARG1大于ARG2,返回1;否则返回0 ARG1 + ARG2 返回ARG1和ARG2的算术运算和 ARG1 - ARG2 返回ARG1和ARG2的算术运算差 ARG1 * ARG2 返回ARG1和ARG2的算术乘积 ARG1 / ARG2 返回ARG1被ARG2除的算术商 ARG1 % ARG2 返回ARG1被ARG2除的算术余数 STRING : REGEXP 如果REGEXP匹配到了STRING中的某个模式,返回该模式匹配 match STRING REGEXP 如果REGEXP匹配到了STRING中的某个模式,返回该模式匹配 substr STRING POS LENGTH 返回起始位置为POS(从1开始计数)、长度为LENGTH个字符的子字符串 index STRING CHARS 返回在STRING中找到CHARS字符串的位置;否则,返回0 length STRING 返回字符串STRING的数值长度 + TOKEN 将TOKEN解释成字符串,即使是个关键字 (EXPRESSION) 返回EXPRESSION的值
bash shell中可以这样执行数学表达式,如:$(expr var1 + var2)
例如:
cat exprtest #!/bin/bash # An example of using the expr command var1=10 var2=20 var3=$(expr $var2 / $var1) echo The result is $var3
bash shell还可以用更简单的方式来执行数学表达式,方法是:$[ operation ],美元符号加方括号将数学表达式围起来
例如:
$ cat exprtest1 #!/bin/bash var1=100 var2=50 var3=45 var4=$[$var1 * ($var2 - $var3)] echo The final result is $var4
2、bash shell数学运算只支持整数运算,所以对需要进行浮点数运算的就有了限制。进行浮点数运算的,最常见的可用内建的bash计算器,叫做bc
在shell提示符下通过bc可以直接访问bash计算器:
# 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'. 1.11*2.84 3.15 6.38*0.29882 1.90647
运行浮点运算需要保留的小数位数是用scale控制的,例如:
# bc -q scale=4 2.45/2 1.2250 3.22/4 .8050
在shell脚本中使用bc计算器的方法如下:
variable=$(echo “options; expression” | bc)
第一个options允许你设置变量,如果需要设置不止一个,用分号将其分开。expression参数定义了通过bc执行的数学表达式。
例如:
$ cat bctest #!/bin/bash var1=$(echo "scale=4; 3.44 / 5" | bc) echo The answer is $var1
$ cat bctest1 #!/bin/bash var1=20 var2=3.14159 var3=$(echo "scale=4; $var1 * $var1" | bc) var4=$(echo "scale=4; $var3 * $var2" | bc) echo The final result is $var4
这种方法适合于较短的运算,如果需要大量运算,可以用下面的方法。bc命令可以识别输入重定向,所以可以使用内联输入重定向,允许你直接在命令行中重定向数据。在shell脚本中你可以将输出赋值给一个变量,如:
variable=$(bc << EOF
options
statements
expressions
EOF
)
例如:
$ cat bctest2 #!/bin/bash var1=10.46 var2=43.67 var3=33.2 var4=71 var5=$(bc << EOF scale = 4 a1 = ( $var1 * $var2) b1 = ($var3 * $var4) a1 + b1 EOF ) echo The final answer for this mess is $var5
3、查看退出状态码
Linux提供了一个专门的变量命令$?来保存上个已执行命令的退出状态码。必须在脚本运行完毕使用echo $?来查看。
如:
# date Thu Sep 21 11:29:52 CST 2017 # echo $? 0
常见的几种状态码如下:
状态码 描述 0 命令成功结束 1 一般性未知错误 2 不适合的shell命令 126 命令不可执行 127 没找到命令 128 无效的退出参数 128+x 与Linux信号x相关的严重错误 130 通过Ctrl+C终止的命令 255 正常范围之外的退出状态码
4、exit命令
默认情况下,shell脚本会以最后一行命令的退出状态码退出,你可以使用exit来指定一个退出状态码,运行结束后返回自己指定的状态码。
例如:
$ cat exittest #!/bin/bash # testing the exit status var1=10 var2=30 var3=$[$var1 + $var2] echo The answer is $var3 exit 5 $ echo $? 5
退出状态码最大只能到255,如果超出255会出现另一种情况,例如:
$ cat exittest2 #!/bin/bash # testing the exit status var1=10 var2=30 var3=$[$var1 * $var2] echo The value is $var3 exit $var3 $ ./exittest2 The value is 300 $ echo $? 44
此时返回44,因为退出状态码范围是0~255,这个是shell通过模运算得到的这个结果。最终的结果就是指定的数值除以256后得到的余数。