2022-06-25-Shell系列05丨 shell运算符

一.算术运算符

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.常用的算术运算符

20230202232133

演示

20230202233016

二.比较运算符

1.整数比较运算符

语法:

20230204114357

20230204122531

演示

[ 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种方式

20230204172517

[ 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.布尔运算符

20230205000253

注意布尔运算符放在 [] 或与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.介绍

20230205001448

注意

使用 &&|| 的运算符必须放在 [[]](())中才有效,否则报错

! 可以用在 [] [[]] 中,不可以在 (())

2.演示

[[ 1 > 2 || 1 == 1 ]]
echo $?    # 0

[[ 1 > 2 && 1 == 1 ]]
echo $?    # 1

[[ ! 1 > 2 ]]
echo $?    # 0

3.理解逻辑运算符与布尔运算符区别:

20230205002526

6.文件测试运算符

1.目标

能够使用常用文件测试运算符检查文件

例如:文件是否存在、是否可读、是否可执行、是否为空、是否可写、是否是目录、是否是普通文件

2.linux系统文件类型介绍

-: 普通文件

d: 目录文件

l: 链接文件

b: 块设备文件

c: 字符设备文件

p: 管道文件

20230205112928

3.文件测试运算符用于检测文件的各种属性

语法:

[ options 文件路径字符串]
或
[[ options 文件路径字符串]]

属性检测描述如下:

20230205114009

20230205151402

演示

file1="a.sh"

# 测试文件是否可写
if [[ -w $file1 ]]
then
    echo "file1文件可写"
else
    echo "file1文件不可写"
fi