shell的条件语句

一、条件测试操作

1、test命令

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。
test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为 0 表示条件成立)。
格式一:test 条件表达式
格式二:[ 条件表达式 ]			#方括号“[”或“]”与条件表达式之间需要至少一个空格进行分隔

2、文件测试

格式:[ 操作符 文件或目录 ]

常用的操作符:
-d:测试是否为目录(Directory)。
在这里插入图片描述
-e:测试目录或文件是否存在(Exist)。
在这里插入图片描述
-f:测试是否为文件(File)。
在这里插入图片描述
-r:测试当前用户是否有权限读取(Read)。
-w:测试当前用户是否有权限写入(Write)。
-x:测试是否设置有可执行(Excute)权限。

在这里插入图片描述
在这里插入图片描述

3、整数值比较

格式:[ 整数变量1 操作符 整数变量2 ]

常用的操作符:
-eq:等于					==
-ne:不等于					!=
-gt:大于					>
-lt:小于					<
-le:小于等于                <=
-ge:大于等于                >=

在这里插入图片描述

[root@localhost ~]#free   #显示当前的内存的容量,Men表示物理内存,Swap表示虚拟内存
              total        used        free      shared  buff/cache   available
Mem:        1867024      314892     1091840        9256      460292     1334460
Swap:       4194300           0     4194300
[root@localhost ~]#free -m    #使用-m表示以M(兆)为单位显示
              total        used        free      shared  buff/cache   available
Mem:           1823         307        1066           9         449        1303
Swap:          4095           0        4095
[root@localhost ~]#free -h     #-h 表示以更人性化的方式显示,该选项只有在centos7以上的版本才有用
              total        used        free      shared  buff/cache   available
Mem:           1.8G        307M        1.0G        9.0M        449M        1.3G
Swap:          4.0G          0B        4.0G

在这里插入图片描述
如果需要算出空闲比,就需要浮点运算符,bash不支持浮点运算,需要借助bc、awk

Awk

Awk是一个功能强大的编辑工具,用于在Linux/UNIK下对文本和数据进行处理。数据可以来自一个或多个文件,也可以为其他命令的输出,常作为脚本来使用。在执行操作时,Awk逐行读取文本,默认以空格为分割符进行分隔,将分隔所得的各个字段保存在内建变量中,对比改行是否与给定的模式相匹配,并按模式或者条件执行编辑命令,也可以从脚本中调用编辑指令过滤输出相应内容。

awk 例:         加:echo $(awk 'BEGIN{print 4.5+3.4}')

​                减:echo $(awk 'BEGIN{print 4.5-3.4}')

​                乘:echo $(awk 'BEGIN{print 4.5*3.4}')

​                除:echo $(awk 'BEGIN{print 4.5/3.4}')

bc

浮点运算,即小数点运算,使用 bc 命令

bc  例  加:echo "1.1+2.2" | bc

​        减:echo "5.3-4.6" | bc

​        乘:echo "2.3*1.4"| bc

​        除:echo "scale=2; 4.3/2.5"|bc

   混合运算:echo "scale=2; 2.2/(1.2+2.3)*1.5+2.1" | bc

4、字符串比较

格式1:
[ 字符串1 = 字符串2 ] 或 [ 字符串1 == 字符串2 ]
[ 字符串1 != 字符串2 ]

格式2:
[ -z 字符串 ] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[ -n 字符串 ] #检查是否有字符串存在

5. 逻辑测试

格式1
[ 表达式1 ] 操作符 [ 表达式2 ]
格式2
[ 命令1 操作符 命令2 ]

-a或&&        #逻辑与(而且的意思)
-o或||        #逻辑或(或者的意思)#逻辑否

二、if语句

1、if单分支语句

单分支结构(基本格式):
if 条件测试操作
	then  命令序列
fi

在这里插入图片描述

2、if双分支语句

双分支结构(基本格式):
if 条件测试操作
	then  命令序列1
	else  命令序列2
fi

在这里插入图片描述

3、if多分支语句

多分支结构(基本格式):
if 条件测试操作1
	then  命令序列1
elif  条件测试操作2
	then  命令序列2
else
	命令序列3
fi

在这里插入图片描述

三、case语句

格式:
case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
	....
*)
	默认命令序列
esac

在这里插入图片描述

四、示例

if

vim score.sh
#!/bin/bash
read -p "请输入您的分数(0-100): " score
if [ $score -ge 85 ] && [ $score -le 100 ]
then
	echo "$score 分,优秀!"
elif [ $score -ge 70 ] && [ $score -le 84 ]
then
	echo "$score 分,合格!"
else
	echo "$score 分,不合格!"
fi

在这里插入图片描述
case

vim score1.sh
#!/bin/bash
read -p "请输入您的分数(0-100): " score
[[ $score -ge 85 && $score -le 100 ]] && a="great"
[[ $score -ge 70 && $score -lt 85 ]] && a="standard"
[[ $score -ge 0 && $score -lt 70 ]] && a="false"
case $a in
great)
	echo "$score 分,优秀!"
;;
standard)
	echo "$score 分,合格!"
;;
false)
	echo "$score 分,不合格!"
;;
*)
	echo "输入有误!"
esac

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51616026/article/details/111316322