表达式与运算符

1.1 基本算术运算

图片描述

#!/bin/bash

a=10
b=20

# 加法
ret=`expr $a + $b`
echo "a + b : $ret"

# 减法
ret=`expr $a - $b`
echo "a - b : $ret"

# 乘法
ret=`expr $a \* $b`
echo "a * b : $ret"

# 除法
ret=`expr $b / $a`
echo "b / a : $ret"

# 取余除
ret=`expr $b % $a`
echo "b % a : $ret"

1.2 逻辑运算

#!/bin/bash

a=10
b=20

ret=`expr $a < $b`
echo "a < b : $ret"

ret=`expr $a = $b`
echo "a = b : $ret"

ret=`expr $a != $b`
echo "a != b : $ret"

ret=`expr $b >= $a`
echo "b >= a : $ret"

图片描述

更改后的代码如下:

#!/bin/bash

a=10
b=20

ret=`expr $a \< $b`
echo "a < b : $ret"

ret=`expr $a = $b`
echo "a = b : $ret"

ret=`expr $a != $b`
echo "a != b : $ret"

ret=`expr $b \>= $a`
echo "b >= a : $ret"

图片描述

1.3 字符串运算

expr命令除了进行算术和逻辑运算之外,还可以进行字符串的操作,如下图所示。

expr2.png

【试一试】请查阅资料,给出三个不同示例完成两个字符串的运算,写入实验报告,注意截图。

image-20240622221844931

2.1 求值

a=1
b=01
c=2

2.1.1

test $a = $b
echo $?
结果为1
因为比较的是字符串,1和01字符串不一致

2.1.2

test $a -eq $b
echo $?
结果是0
因为-eq比较的是数值,因此,1和01相同

2.1.3

test $a -lt $c
echo $?
结果是0
因为-lt比较的是数值,a是1,c是2,1<2。

2.1.4

test -n $a
echo $?
结果为0
因为-n检测变量是否为非空,这里a有值,因此结果为0。

2.1.5

test -z $a
echo $?
结果为1
因为-z检测变量是否为空,这里a有值,因此结果为1。

2.1.6

test -n $f
echo $?
结果为1
因为-n检测变量是否为非空,这里f未定义,因此结果为1。

2.1.7

test -z $f
echo $?
结果为0
因为-n检测变量是否为空,这里f未定义,因此结果为0。

图片描述

2.2.2 判断 /dev/sda 磁盘是否是块设备,是块设备则为真。

if [ -b /dev/sda ]; then
echo 1
else
echo 0
fi
结果为0,即/dev/sda 磁不是块设备。

image-20240622222054851

2.2.3 判断变量 a 的值是否在 18 到 28 之间(含18和28)。

a=20
if [ $a -ge 18 ] && [ $a -le 28 ]; then
echo 1
else
echo 0
fi

图片描述

2.2.4 判断文件是否是空文件,是空文件则为真。

if [ ! -s wenjianming ]; then
echo 1
else
echo 0
fi