Shell脚本(二)_条件分支

13 篇文章 0 订阅

AUTHOR:闫小雨
TIME:2024-05-09


目录

一、条件测试操作

1、文件测试

2、整数值比较

3、字符串比较

4、逻辑测试

二、if条件语句

1、单分支if语句

2、双分支if语句

3、多分支if语句


一、条件测试操作

$?(预定义变量)

  • Shell环境可以根基条件执行后的返回状态值$?来判断是否执行成功,当返回0时表示执行成功,否则(非0值)时表示执行失败或异常。

test 条件表达式[ 条件表达式 ]

比较常用的条件操作包括文件测试、整数值比较、字符串比较,以及针对多个条件的逻辑测试。

  1. 使用专门的测试工具test命令,可以对特定条件进行测试,并且根据返回状态值来进行判断条件是否成立,返回值为0时表示条件成立,否则(非0值)时表示条件不成立。
  2. 使用[ ]方式与作用和使用test命令一样,但是使用[ ]需要注意方括号[]与条件表达式之间需要至少一个空格进行分隔。

1、文件测试

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行。

使用方法:将测试对象放在操作选项之后即可。

  • -e即Exist,测试目录或文件是否存在。例如:-e /需要查询的目录或文件地址

  • -d即Directory,测试目标是否为目录。例如:-d /需要查询的目录地址

  • -f即File,测试目标是否为文件。例如:-f /需要查询的文件地址

  • -r即Read,测试当前用户是否有权限读取。
  • -w即Write,测试当前用户是否有权限写入。
  • -x即Excute,测试是否设置有可执行权限。

为了更直观地查看测试结果,可以结合命令分隔符&&echo命令一起使用,当条件成立时直接输出“YES"。其中,"&&”符号表示“而且”的关系,只有当前面的命令执行成功后才会执行后面的命令,否则后面的命令将会被忽略不被执行。

2、整数值比较

整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。

使用方法:使用时将操作选项放在要比较的两个整数之间。

  • -eq即(Equal)等于,第一个数等于(=)第二个数。
  • -ne即(Not Equal)不等于,第一个数不等于(!=)第二个数。
  • -gt即(Greater Than)大于,第一个数大于(>)第二个数。
  • -ge即(Greater or Equal)大于等于,第一个数大于等于(>=)第二个数。
  • -lt即(Lesser Than)小于,第一个数小于(<)第二个数。
  • -le即(Lesser or Equal)小于等于,第一个数小于等于(<=)第二个数。

例如:

[root@yanxy502 ~] Unum=`who | wc -l`													#查看当前用户数量,并赋值Unum
[root@yanxy502 ~] [ $Unum -gt 1 ] && echo "有$Unum个人登录着"	#比较Unum大于1,就输出有Unum个人登录着

3、字符串比较

字符串比较通常用来检查用户输入、系统环境等是否满足条件,也可用来判断用户输入的位置参数是否符合要求。

  • =:第一个字符串与第二个字符串是否相同。
  • !=:第一个字符串与第二个字符串是否不相同,其中“!”符号表示取反。
  • -z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串。

例如:

[root@yanxy502 ~] [ 'nihao' = 'hello' ]			#比较第一个nihao与hello相同
[root@yanxy502 ~] echo $?
1																						#返回为 1 ,表示不相同
[root@yanxy502 ~] [ 'nihao' != 'hello' ]		#比较第一个nihao与hello不相同
[root@yanxy502 ~] echo $?
0																						#返回为 0 ,表示不相同

例如2:

[root@yanxy502 ~] read -p "是否删除当前文件(yes/no)?" delete
是否删除当前文件(yes/no)? yes
[root@yanxy502 ~] [ $delete = "yes" ] && echo "已删除"
已删除
[root@yanxy502 ~] read -p "是否更改当前文件(yes/no)?" change
是否更改当前文件(yes/no)? no   
[root@yanxy502 ~] [ $change = "no" ] && echo "不覆盖"
不覆盖

4、逻辑测试

逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况。

使用方法:使用时放在不同的测试语句或命令之间。

  • &&:逻辑与,表示"而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0(结果成立)。
    • 使用test命令测试时,"&&"可改为"-a"
  • ||:逻辑或,表示"或者",只要前后两个条件中有一个成立,整个测试命令的返回值即为0(结果成立)。
    • 使用test命令测试时,"||"可改为“-o"。
  • !:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为 0(结果成立)。

二、if条件语句

if语句是一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作(如果…那么……)。

1、单分支if语句

单if分支:只有一个if条件判断,满足条件则执行相应的代码块,不满足则不执行。

if [ 条件判断式 ]; then
    程序
fi

或者

if [ 条件判断式 ]
    then
    程序
fi

#!/bin/bash
#时间:2024-5-9
#作者:闫小雨
#描述:if单分支语句示例,判断目录是否存在
read -p "请输入需要判断的目录:" name
if [ ! -d $name ]
then
	echo "$name目录不存在,正在创建..."
	mkdir -p $name
	echo "$name目录创建完成."
fi
	echo "$name目录已存在,正在退出..."

2、双分支if语句

双if分支:包含一个if条件判断和一个else条件判断,满足if条件执行一个代码块,不满足则执行else后的代码块。

if [ 条件判断式 ]; then
    条件成立时,执行的程序
    else
    条件不成立时,执行的程序
fi

或者

if [ 条件判断式 ]
    then
    条件成立时,执行的程序
    else
    条件不成立时,执行的程序
fi

举例:

#!/bin/bash
#时间:2024-5-9
#作者:闫小雨
read -p '请输入文件名,例如 /root/test.txt:' filename
if [ -f $filename ];
then echo '这是一个普通文件'
else echo '你输入的文件名称有问题,重启程序后请重新输入一个文件'
fi

3、多分支if语句

多if分支:(也称为if-elif-else分支):包含多个ifelif条件判断,以及一个可选的else条件判断。根据条件的不同,会执行与第一个为真的条件相对应的代码块,如果没有条件为真,则执行else后的代码块(如果存在的话)。

if [ 条件判断式1 ]; then
    当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]; then
    当条件判断式2成立时,执行程序2
.....省略更多条件.....
else
    当所有条件都不成立时,最后执行此程序
fi

举例1:

#!/bin/bash
#时间:2024-5-9
#作者:闫小雨
#描述:Dome娶老婆条件
read -p "请输入你有多少钱: " money
read -p "请输入你有几套房子: " houses

if [ $money -ge 1000000 ]       #-ge 表示大于
  then echo "我就嫁给你"        
elif [ $houses -ge 3 ]
  then echo "我也嫁给你"
else echo "我考虑下"
fi

举例2:

#!/bin/bash 
#时间:2024-5-9
#作者:闫小雨
NO=20  
echo '猜数字游戏'
while true  
do  
    read -p "请输入一个正整数来开始游戏: " num  
    if ! [[ "$num" =~ ^[0-9]+$ ]]; then       # 添加输入验证,确保输入的是正整数  
        echo "请输入一个正整数!"  
        continue                              # 如果输入不是正整数,则继续循环  
    fi  
    if [ $NO -gt $num ]; then                 # 判断输入的数字和原始数字的大小,gt表示大于  
        echo "你猜测的太小了"  
    elif [ $NO -lt $num ]; then               # 判断输入的数字和原始数字的大小,lt表示小于  
        echo "你猜测的太大了"  
    else   
        echo "恭喜你猜对了"  
        break                                 # 如果猜对了,则退出循环   
    fi
done

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫叫闫小雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值