SHell编程之条件语句

SHell编程之条件语句

本章结构

1、条件测试

(1)文件测试与整数测试

(2)字符串测试与逻辑测试

2、if语句

(1)if单分支语句

(2)if双分支语句

(3)if多分支语句

3、case分支语句

一、条件测试操作

1、test命令

测试表达式是否成立,若成立返回0,否则返回其他数值。

格式1: test 条件表达式

格式2:[ 条件表达式 ]

2、文件测试

[操作符 文件或目录]

常用的测试操作符

-d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)

-r:测试当前用户是否有权限读取(Read)

-w:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有权限执行(eXcute)
在这里插入图片描述

3、整数值测试操作

(1)整数值比较

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

(2)常用的测试操作符

-eq:等于(Equal)

-ne:不等于(not equal)

-gt:大于(greater than)

-lt:小于(lesser than)

-le:小于或等于(lesser or equal)

-ge:大于或等于(greater or equal)

在这里插入图片描述

注:bash不支持浮点运算,如果需要进行浮点运算,需要借助bc、awk处理。
bc

#!/bin/bash

#加

f=$ (echo “4.3+2.5” | bc)

echo “4.3+2.5=$f”

#减

f=$ (echo “4.3-2.5” | bc)

echo “4.3-2.5=$f”

#乘

f=$ (echo “4.30*2.50” | bc)

echo “4.3*2.5=$f”

#除

f=$ (echo “4.3/2.5” | bc)

echo “4.3/2.5=$f”

#混合运算

f=$ (echo “2.2/(2.2-1.1)*2+1.1” | bc)

echo “2.2/ (2.2-1.1)*2+1.1=$f”

在这里插入图片描述

awk

#加

f=$ (awk 'BEFIN{print 4.5+3.4 } ’ )

echo “4.5+3.4=$f”

#减

f=$ (awk 'BEFIN{print 4.5-3.4 } ’ )

echo “4.5-3.4=$f”

#乘

f=$ (awk 'BEGIN{print 4.5*3.4 } ’ )

echo “4.5-3.4=$f”

#除

f=$ (awk ’ BEGIN{print 4.5/3.4 }’)

echo “4.5/3.4=$f”

#混合运算

f=$ (awk ‘BEGIN{print (4.5-3.4) *2+3 }’)

echo " (4.5-3.4) *2+3=$f"

在这里插入图片描述

浮点运算:浮点运算就是实数运算,因为计算机只能储存整数,所以是说都是约数,这样浮点运算很慢的而且会有误差。
4、字符串

(1)字符串比较

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

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

​ [ -n 字符串] #检查是否有字符串存在

(2)常用的测试操作符

=:字符串内容相同

!:字符串内容不同,!号宝石相反的意思

-z:字符串内容为空

-n:检测字符串是否存在

在这里插入图片描述

-a或&&:逻辑与,“而且”的意思

-o或||:逻辑或,“或者”的意思

!:逻辑否

注:&&、||操作符能够正常存在于[ [ ] ]条件判断结构中,但是如果出现[ ]结构中的话,会报错

(3)逻辑测试

格式1:[ 表达式1 ] 操作符 [ 表达式2 ]

格式2:命令1 操作符 命令2

在这里插入图片描述

二、if语句的结构

1、if单分支结构

基本格式:if 条件测试操作

​ then 命令序列

​ fi

举例:
if 磁盘已用空间>80%
then 报警
fi

在这里插入图片描述

2、if双分支结构

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

双分支结构(举例):
if 80端口是否在监听
then 网站服务已在运行
else 启动httpd服务
fi

在这里插入图片描述

3、if多分支结构

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

多分支结构(举例):
if 分数为85~100之间
then 判为优秀
elif 分数为70~84之间
then 判为合格
else
判为不合格
fi

在这里插入图片描述

4、if结构实例

(1)单分支if结构

在这里插入图片描述

(2)多分支if结构

在这里插入图片描述

在这里插入图片描述

三、case语句结构

1、case多分支语句

(1)case语句的结构

针对变量额不同取值,分别执行不同的命令序列。

这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同条件,而case语句指示判断一个变量的不同取值。

case行尾必须为单词”in“,每一模式必须以右括号”)“结束。

双分号”;;“表示命令序列的结束。

模式字符串中,可以用方括号表示一个连续范围,如”[0-9]“;还可以用竖杠符号”|“表示”或“,若”A|B“。

最后的”)“表示默认模式,其中的*相当于通配符。

格式:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;

*)
默认命令序列
esac

举例:
case 分数 in
85~100)
评为优秀
;;
70~84)
评为合格
;;

*)
判为不合格
esac

在这里插入图片描述

2、case语句实操

在这里插入图片描述

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值