【学习分享】shell基础-运算符
1.4 运算符
1.4.1 算数运算符
和大多数编程语言一样,包含+ 、-、*、/、%、=、==、!= ,具体的可以自己了解。
#原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
#!/bin/bash
val=`expr 1 + 1`
echo "和为:${val}" #输出2
val=`expr 1 \* 1`
echo "积为:${val}" #输出1
val=`expr 1 - 1`
echo "差为:${val}"
val=`expr 8 / 2`
echo "商为:${val}"
val=`expr 8 % 3`
echo "余数为:${val}"
1.4.2 关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-
-eq:判断两个数是否相等,相等返回true
-
-ne:判断两个数是否不相等,不相等返回true
-
-gt:左边数字是否大于右边,若是,返回true
-
-lt:左边的数字是否小于右边,若是,返回true
-
-ge:左边的数字是否大于等于右边的,若是,返回true
-
-le:左边的数字是否小于等于右边的,若是,返回true
#!/bin/bash
#代码片来自菜鸟编程
a=10
b=20
if [ $a -eq $b ]
thenecho "$a -eq $b : a 等于 b"
elseecho "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
thenecho "$a -ne $b: a 不等于 b"
elseecho "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
thenecho "$a -gt $b: a 大于 b"
elseecho "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
thenecho "$a -lt $b: a 小于 b"
elseecho "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
thenecho "$a -ge $b: a 大于或等于 b"
elseecho "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
thenecho "$a -le $b: a 小于或等于 b"
elseecho "$a -le $b: a 大于 b"
fi
1.4.3 布尔运算符
与或非的运算逻辑与其他的编程语言一致
-
!:非运算
-
-o:或运算
-
-a:与运算
#!/bin/bash
#代码片来自菜鸟编程
a=10
b=20
if [ $a != $b ]
thenecho "$a != $b : a 不等于 b"
elseecho "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
thenecho "$a 小于 100 且 $b 大于 15 : 返回 true"
elseecho "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
thenecho "$a 小于 100 或 $b 大于 100 : 返回 true"
elseecho "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
thenecho "$a 小于 5 或 $b 大于 100 : 返回 true"
elseecho "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
1.4.4 逻辑运算符
和布尔有点像,只不过这个是数学中的逻辑符号
-
&&:逻辑的and,全真才为真,一假则假
-
||:逻辑或,一真则真,全假才为假
#!/bin/bash
#代码片来自菜鸟编程
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 false"
fi
1.4.5 字符串运算符
这些运算符多用于字符串的操作
-
=:两个字符串如果相等,返回真
-
!=:两个字符串如果不相等,返回假
-
-z:字符串长度为0,则返回真
-
-n:字符串长度不为0,返回真
-
$:字符串内容不为空,返回真
#!/bin/bash
# 代码片来自菜鸟教程
a="abc"
b="efg"
if [ $a = $b ]
thenecho "$a = $b : a 等于 b"
elseecho "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
thenecho "$a != $b : a 不等于 b"
elseecho "$a != $b: a 等于 b"
fi
if [ -z $a ]
thenecho "-z $a : 字符串长度为 0"
elseecho "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
thenecho "-n $a : 字符串长度不为 0"
elseecho "-n $a : 字符串长度为 0"
fi
if [ $a ]
thenecho "$a : 字符串不为空"
elseecho "$a : 字符串为空"
fi
1.4.6 文件测试运算符
文件测试运算符用于检测Unix文件的各种属性
-
-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:若文件设置了SUDI位,返回true
-
-f file:若文件可读,返回true
-
-w file:若文件可写,返回true
-
-x file:若文件可执行,返回true
-
-s file:若文件部不为空,返回true
-
-e file:若文件存在,返回true
1.4.7 自增/自减
和java等一些主流语言的自增和自减的逻辑是一样的,但是shell使用的是let命令
#!/bin/bash
num=1
let num++
let num++
let num--
echo ${num} # 输出1