文章目录
算术运算
首先这里所说的算术运算是指加法(+), 减法(-),乘法(*),整除(/), 求余(%)四种运算,可以通过添加括号改变优先级,并且只能对整数进行运算(Linux Bash Shell默认不支持浮点数运算)
#!/bin/bash val=`expr 2 + 2` <strong>#expr 参数要为整数</strong> echo "Total value : $val" a=10 b=-5 c=`expr $a + $b` <strong>#+前后空一格,否则输a+b=10+20</strong> echo "a+b=$c" c=`expr $a - $b` echo "a-b=$c" c=`expr $a \* $b` #<strong>必须在*前加\才能实现乘法,因为 * 有其它意义</strong> echo "a*b=$c" c=`expr $a / $b` echo "a/b=$c" if [ $a == $b ] #<strong>在[]和==前后要有一空格,且必须有[]</strong> then echo "a = b" fi if [ $a != $b ] then <strong>#then需要另启一行,不能与if在同一行;[加;就不行要换行了]</strong> echo "a!=b" fi let "sum=3+6" echo $sum sum=$(( 7 * 8 )) echo $sum
要在Linux Bash Shell中进行算术运算,有三种写法
一、使用let命令
let "sum=3+5" # sum <- 8 let "sum=3*5" # sum <- 15 let "sum=2/5" # sum <- 0 let "sum=11/5" # sum <- 2 let "sum=11%5" # sum <- 1 let "sum=-6-9" # sum <- -15 let "sum=(-6-9)*5" # sum <- -75
注意, 等号右边以及运算符和括号的两边都不能有空格
二、使用expr命令
sum=`expr 2 - 5` # sum <- -3 sum=`expr 2 + 5` # sum <- 7 sum=`expr 3 \* 5` # sum <- 15 sum=`expr 3 / 5` # sum <- 0 sum=`expr 7 / 5` # sum <- 1 sum=`expr \( 2 - 3 \) \* 6` # sum <- -6 sum=`expr 2+4` # sum <- 2+4 sum=`expr 2-4*6· # sum <- 2-4*6 sum=`expr 1-(5-8)` # sum <- 1-(5-8)
注意: 乘号(*), 左括号( , 右括号)必须使用反斜杠(\)转义。expr右边以及运算符和括号的两边必须有空格; 如果采用紧凑的写法(紧凑格式可以不对*, (, )进行转义), 则返回算术表达式.
三、使用(( ... )) 的形式
<strong>sum=$((3+5)) # sum <- 8 sum=$(( 3 - 5 )) # sum <- -2 sum=$(( 3 * 5 )) # sum <- 15 sum=$(( 7 / 5 )) # sum <- 1 sum=$(( 7 % 5 )) # sum <- 2 sum=$(( (1 - 2 ) * 4 )) # sum <- -4</strong>
这种写法比较自由,无需对运算符和括号做转义处理,也可以采用松散或紧凑的格式.
布尔运算
#!/bin/sh a=10 b=200 #-o 或运算 or #-a 与运算 and if [ $a != $b ] then echo "$a != $b : a is not equal to b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a -lt 100 -a $b -gt 15 : returns true" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a -lt 100 -o $b -gt 100 : returns true" fi
关系运算
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
#!/bin/bash #关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 a=10 b=20 #若写 a="a";b="b"; 下面的比较会出现报错 if [ $a -eq $b ] #-eq:equal then echo "$a -eq $b : a is equal to b" else echo "$a -eq $b: a is not equal to b" fi if [ $a -ne $b ] #-ne:not equal then echo "$a -ne $b: a is not equal to b" fi if [ $a -gt $b ] #-gt:greater than then echo "$a -gt $b: a is greater than b" else echo "$a -gt $b: a is not greater than b" fi if [ $a -lt $b ] #-lt:less than then echo "$a -lt $b: a is less than b" fi if [ $a -ge $b ] #-ge:greater or equal then echo "$a -ge $b: a is greater or equal to b" else echo "$a -ge $b: a is not greater or equal to b" fi if [ $a -le $b ] #-le:less or equal then echo "$a -le $b: a is less or equal to b" fi #另一种比较方法:用(()) a=20 b=20 echo "-----------------------------------" if ((a >= b));then echo 1 ;fi if ((a <= b));then echo 2;fi if ((a == b));then echo 3;fi; if !((a != b));then echo 4;fi; if !((a > b));then echo 5;fi if !((a < b));then echo 6;fi #输出 1 2 3 4 5 6
字符串运算
#!/bin/bash a="abc" b="abcd" if [ $a = $b ] #<==>if [ $a == $b ] then echo "$a = $b : a is equal to b" else echo "$a = $b : a is not equal to b" fi if [ $a != $b ] then echo "$a = $b : a is not equal to b" fi if [ -z $a ] #-z:zero then echo "-z $a : string length is zero" else echo "-z $a : string length is not zero" fi if [ -n $a ] #-n:not then echo "-n $a : string length is not zero" fi if [ $a ] then echo "$a : string is not empty" else echo "$a : string is empty" fi
- =检测两个字符串是否相等,相等返回 true。
- !=检测两个字符串是否相等,不相等返回 true。
- -z检测字符串长度是否为0,为0返回 true。
- -n检测字符串长度是否为0,不为0返回 true。
- str检测字符串是否为空,不为空返回 true。
文件测试运算
#!/bin/bash #文件测试运算符用于检测 Unix 文件的各种属性。 #例如,变量 file 表示文件“/home/CentOS/script/var.sh”,它的大小为253字节,具有 rwx 权限。 file="/home/CentOS/script/var.sh" if [ -r $file ] #-r:read then echo "File has read access" fi if [ -w $file ] #-w:write then echo "File has write permission" fi if [ -x $file ] #-x:execute then echo "File has execute permission" fi if [ -f $file ] #-f:file then echo "File is an ordinary file" fi if [ ! -d $file ] #-d:directory then echo "File is not a directory" fi if [ -s $file ] #-s:size then echo "File size is not zero" fi if [ -e $file ] #-e:exists then echo "File exists" fi
- -b file检测文件是否是块设备文件,如果是,则返回 true。
- -c file检测文件是否是字符设备文件,如果是,则返回 true。
- -d file检测文件是否是目录,如果是,则返回 true。
- -f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
- -g file检测文件是否设置了 SGID 位,如果是,则返回 true。
- -k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
- -p file检测文件是否是具名管道,如果是,则返回 true。
- -u file检测文件是否设置了 SUID 位,如果是,则返回 true。
- -r file检测文件是否可读,如果是,则返回 true。
- -w file检测文件是否可写,如果是,则返回 true。
- -x file检测文件是否可执行,如果是,则返回 true。
- -s file检测文件是否为空(文件大小是否大于0),不为空返回 true。
- -e file检测文件(包括目录)是否存在,如果是,则返回 true。