一.算术运算符
1.目标
- 掌握算术运算符的使用
- 掌握expr求值表达式命令
2.expr命令
介绍
expr是evaluate expressions
的缩写,译为“求值表达式”。shell expr是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度,字符串比较,字符串匹配,字符串提取等。
3.语法
计算语法
expr 算术运算符表达式
获取计算结果赋值给新变量语法
result=`expr 算术运算符表达式`
演示
expr 1 + 2 # 3
# 可以变量接收
result=`expr 1 + 2`
echo $result # 3
注意:运算符表达式中每个数字与符号之间要有空格
4.常用的算术运算符
演示
二.比较运算符
1.整数比较运算符
语法:
演示
[ 1 -eq 2 ]
echo $? # 打印上一个执行结果,结果为1
[ 1 -ne 2 ]
echo $? # 0
[ 1 -gt 2 ]
echo $? # 1
[ 1 -lt 2 ]
echo $? # 0
[ 1 -ge 2 ]
echo $? # 1
[ 1 -le 2 ]
echo $? # 0
a=1 b=2
[ $a -ne $b ]
echo $? # 0
((1<2))
echo $? # 0
2.字符串比较运算符
1.介绍
可以比较2个变量,变量类型可以为数字(整数、小数)与字符串
2.语法
字符串比较可以用 [[]]
和 []
2种方式
[ 1.1 == 1.1 ]
echo $? # 0
[ "a" == "a" ]
echo $? # 0
# 单括号需要转义
[ "a" \> "a" ]
echo $? # 1
# 双括号不需要转义
[[ "a" > "a" ]]
echo $? # 1
# 大于等于怎么写
[[ "a" > "a" && "a" == "a"]]
echo $? # 1
[ -z "" ]
echo $? # 0
[ -n "aaa" ]
echo $? # 0
a=""
[ $a ]
echo $? # 1
b=
[ $b ]
echo $? # 1
字符串比较没有
>=
,<=
,可以通过[[ “a” < “b” && “a” == “b”]] 实现
3.[[]]
和[]
的区别
区别1:word splitting的发生
区别说明
[[]]
不会有word splitting发生
[]
会有word splitting发生
word splitting介绍
会将含有空格字符串进行分拆分割后比较
a="a"
b="a b"
[ $a == $b ]
# 报错,参数太多
[[ $a == $b ]]
echo $?
区别2:转义字符
区别说明
[[]]
对 <
不需要转义,格式为 [[ 字符串1 < 字符串2 ]]
[]
需要对 <
>
转义,格式为 [ 字符串1 < 字符串2 ]
4.布尔运算符
注意布尔运算符放在
[]
或与test
命令配合使用才有效 布尔运算符参与test命令配合使用
[ 1 \> 2 ]
echo $? # 1
# 取反
[ ! 1 \> 2 ]
echo $? # 0
# 或运算
[ 1 \> 2 -o 1 == 1 ]
echo $? # 0
# 与运算
[ 1 \> 2 -a 1 == 1 ]
echo $? # 1
5.逻辑运算符
1.介绍
注意
使用
&&
和||
的运算符必须放在[[]]
或(())
中才有效,否则报错
!
可以用在[]
[[]]
中,不可以在(())
2.演示
[[ 1 > 2 || 1 == 1 ]]
echo $? # 0
[[ 1 > 2 && 1 == 1 ]]
echo $? # 1
[[ ! 1 > 2 ]]
echo $? # 0
3.理解逻辑运算符与布尔运算符区别:
6.文件测试运算符
1.目标
能够使用常用文件测试运算符检查文件
例如:文件是否存在、是否可读、是否可执行、是否为空、是否可写、是否是目录、是否是普通文件
2.linux系统文件类型介绍
-: 普通文件
d: 目录文件
l: 链接文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
3.文件测试运算符用于检测文件的各种属性
语法:
[ options 文件路径字符串]
或
[[ options 文件路径字符串]]
属性检测描述如下:
演示
file1="a.sh"
# 测试文件是否可写
if [[ -w $file1 ]]
then
echo "file1文件可写"
else
echo "file1文件不可写"
fi