Linux shell编程与实践(二)之shell程序中的运算和比较操作
1、shell运算操作
(1)let整数运算
(a)let命令介绍
let命令让BASH shell执行算数值操作,使用let,可以比较两个值或执行加减乘除等这样的算数操作,这样的操作经常用于shell程序中的控制流程结构或执行需要的运算,注意let命令只能执行整数的相关运算,运算结果也只能保存整数。
使用方法:
let 变量名 = 变量1 运算符 变量2 (写惯了java C这些有空格好看一点的有点不能习惯不能加空格)
(b)常见的算数操作
加法:+
减法:-
乘法:*
除法:/
取余数:%
注意:和c语言类似,let=$i+1也可以写成let i++ 从而简化书写
(c)let方法来控制流程结构
注意while 和 if 那里有空格
(2)expr整数运算
(a)expr在linux中是一个功能非常强大的命令,和let功能类似,它做算数运算时,只能进行整数类型的运算,不能保存小数结果,除了进行算数运算,expr还可以进行字符串的操作,因此,expr功能非常强大。
(b)expr使用方法:
expr expression1 操作符 expression2
乘法操作符前必须加‘\’用于转义,并且操作两个expression之间必须要有空格(这一点和let不同)。并且expr不能用于小数运算
(c)常见的算数操作分类:
加法:+
减法:-
乘法:* (要加\避免和字符串操作的*冲突)
除法:/
取余数:%
(d)expr方法来控制流程结构
(3)bc浮点运算
let和expr不能处理浮点运算,并且缺乏特定的一些重要的精确操作,但是bc可以进行浮点运算,是一个多功能的灵活的工具,提供精度的复杂计算功能,经常运用在管道里。
bc的使用方法
variable= `echo “OPTIONS; OPERATIONS” | bc` ,scale作为bc一个最重要的option,用来输出小数的位数。
(4)字符串运算
shell中字符串操作也是常见的运算之一,expr除了进行算数运算之外,还可以进行字符串相关的运算。
(1)输出字符串长度
(2)取子串操作(和matlab一样,expr也是从1开始计数,但是用echo取字符串就是从0开始计数)
expr substr $string position length
echo ${string:position:length}
(3)字符串的连接操作
(4)字符串的替换操作
用正的斜划线替换:(两条斜划线表示全部替换,一条就只替换一次)
2、test比较操作
测试比较两个值是linux中常用的比较运算,test命令可以进行对两个值的比较,如果比较成功则返回值为0,否则为非0
test的命令语法
test value1 -option value2
如果成功则$?为0,否则返回非0
(1)整数比较
(a)test整数比较方法:
大于 | -gt |
小于 | -lt |
大于等于 | -ge |
小于等于 | -le |
等于 | -eq |
不等于 | -ne |
(2)字符串比较
(b)字符串比较的方法
测试空字符串(字符串为空,返回值为0) | -z |
测试字符串的长度为非零(长度不为零,返回值为0) | -n |
等于某一个字符串 (字符串相等,返回值为0) | = |
不等于某个字符串 (字符串不相等,返回值为0) | != |
(3)逻辑操作
(a)test逻辑操作的比较方法:
逻辑或 | -o |
逻辑与 | -a |
逻辑非 | ! |
(4)文件测试
(a)文件比较的方法:
文件存在并且是一个常规文件 | -f |
文件不为空 | -s |
文件可读 | -r |
文件可写(修改) | -w |
文件可运行 | -x |
文件是一个目录名 | -d |
文件是一个符号链接 | -h |
文件名引用一个字符设备 | -c |
文件名引用一个块文件 | -b |
(b)文件类型:常规文件(-)、目录文件(d)、字符设备或块文件(c),块文件(b)、套接口文件(s)符号链接文件(l)