Shell条件语句和if语句

前言

之前我们学习了一些shell脚本的基础知识,那么现在我们会学习如何去更好的使用他们,让这些shell脚本更加的智能化。

一、条件测试

1.test命令

测试表达式是否成立的方法。通过使用“$?”命令后的返回值来判断是否成立。当返回值为0时,表示成功。返回值为非0值时,表示失败或异常。

格式

格式1:test 条件表达式  
格式2:[ 条件表达式 ]   #至少有一个空格

在这里插入图片描述
注:返回0表示成立,非0值表示条件不成立

2.文件测试

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

常用测试操作符说明
-f测试是否为文件(File)
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(Excute)
-b测试是否为块设备
-c测试是否为字符设备文件
-s测试存在且文件大小为空
-L测试是否为软连接文件

在这里插入图片描述

3.整数值比较

是根据给与的2个整数值,判断第一个数与第二个数的关系,比如:大于,小于,等于。

基本格式:
[ 整数1 操作符 整数2 ]  #根据给定的两个整数值,判断前后关系,比如大、小,或等于
常用的操作符说明
-eq第一个数等于第二个数(Equal)
-ne第一个数不等于第二个数(Not Equal)
-gt第一个数大于(Greater Than)第二个数
-lt第一个数小于(Lesser Than)第二个数
-ge第一个数大于或等于(Greater or Equal)第二个数
-le第一个数小于或等于(Lesser or Equal)第二个数

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

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

4.字符串比较

通常是用来检测用户输入、系统环境是否满足条件。

格式1
[ 字符串1 = 字符串2 ] #第一个字符串与第二个字符串相同
[ 字符串1 != 字符串2 ] #“!”表示取反,即第一个和第二个字符串不相同
格式2
[ -z 字符串 ] #检查字符串是否空值
[ -n 字符串 ] # 检查字符集是否存在
常用的测试操作符解释
=第一个字符串与第二个字符串内容相同
!=第一个字符串与第二个字符串内容不同,!号表示相反的意思
-z检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串

在这里插入图片描述

5.逻辑测试

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

常用测试操作符:
-a或&&:逻辑与,“而且”的意思,得前后条件都符合
-o或||:逻辑或,“或者” 的意思,二者其中符合一即可
!:逻辑否,只有当指定的条件不成立的时候,结果才成立

“&&”、“||”操作符能够正常存在于“[[ ]]”条件判断结构中,但是如果出现在“[ ]”结构中会报错,
|| 操作符 如果前面的表达式条件成立,不会去管,不成立就会输出

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

二、if语句

1.单分支结构

基本格式

if 条件测试操作
    then  命令序列
fi

在这里插入图片描述

在这里插入图片描述

2.双分支结构

格式

if 条件测试操作
	then  命令序列1
	else  命令序列2
fi

若条件成立,则执行then后面的命令,忽略else,直到fi结束
若条件不成立,则忽略then,跳至else后面的命令序列执行,直到fi结束

若条件成立,则执行then后面的命令,忽略else,直到fi结束
在这里插入图片描述

3.多分支结构

格式

if 条件测试操作1
	then  命令序列1
elif  条件测试操作2
	then  命令序列2
else
	命令序列3
fi

例:
使用多分支编写需求
每章学完会默写本章学习的知识点,每个阶段学习结束后会有阶段测试,默写和测试不合格者会有相应惩罚
惩罚规则如下:
90-100 错题 抄 10
80-89 错题 抄 20
60-79 错题 抄 30
60以下 全抄 30

在这里插入图片描述

在这里插入图片描述

例2:
输入一个月份,判断是一年中的第几季度
在这里插入图片描述

在这里插入图片描述

fi嵌套循环
在这里插入图片描述

三、case语句结构

格式

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

case行尾必须为单词 in ,每一行必须以括号“)”结束
双分号“;;”表示命令序列结束
可以用方括号“[]”表示一个连续的范围;还可以用“|”表示,比如“A|B”
最后的“)*”表示默认模式,如果以上取值都不相同,则执行此行

例子:每章学完会默写本章学习的知识点,每个阶段学习结束后会有阶段测试,默写和测试不合格者会有相应惩罚
惩罚规则如下:
90-100 错题 抄 10
80-89 错题 抄 20
60-79 错题 抄 30
60以下 全抄 30

#!/bin/bash

read -p "请输入你的分数:" gy
case $gy in
  
9[0-9]|100)
        echo "错题抄10遍" 
        ;;
8[0-9])
        echo "错题抄20遍" 
        ;;      
6[0-9]|7[0-9]) 
        echo "错题抄30遍" 
        ;;      
*)        
        echo "全部抄30遍"
esac

总结

  • 条件测试的语法
    文件测试、整数值比较、字符串比较、逻辑测试
  • if条件语句的语法
    单分支、双分支、多分支
  • case多分支语句的语法

shell脚本的使用方法多种多样,我们要学会灵活去使用它,不能死记硬背,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值