Shell脚本——条件语句

一、条件测试

1.1 Test命令

测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值 。

格式1:test 条件表达式
格式2:[ 条件表达式 ]

1.2 文件测试

[ 操作符 文件或目录 ]
常用操作符说明
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(Excute)
-L测试是否为软连接文件
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一文件

案例一:-d(是否为目录)
在这里插入图片描述
在这里插入图片描述

案例二:-e(目录或文件是否存在)
在这里插入图片描述
在这里插入图片描述

案例三:-f ; -r; -w; -x
在这里插入图片描述
案例四:&& echo
在这里插入图片描述
案例五:|| echo
在这里插入图片描述
案例六:比较两个文件
在这里插入图片描述

1.3整数值比较

[ 整数1 操作数 整数2 ]    
常用操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-lt小于(Leser Than)
-gt大于(Greater Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

案例一:查询当前目录下的文件数是否大于5,如果大于,则进行提示。
在这里插入图片描述

案例二:查询当前目录下的文件数是否小5,如果小于,则进行提示。
在这里插入图片描述
案例三:查看系统内存是否高于1024M,如果高于则提示。

[root@Kiro ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           4061         397        3233          14         430        3368
Swap:          3999           0        3999
[root@Kiro ~]# free -m|grep "Mem"
Mem:           4061         397        3233          14         430        3368
[root@Kiro ~]# free -m|grep "Mem"|awk '{print $4}'
3233
[root@Kiro ~]# free=`free -m|grep "Mem"|awk '{print $4}'`
[root@Kiro ~]# echo $free
3232
[root@Kiro ~]# test `echo $free` -gt 1024 && echo 系统内存超过1024
系统内存超过1024

在这里插入图片描述
另一种形式:
在这里插入图片描述

案例四:查询当前已登录用户数
在这里插入图片描述
在这里插入图片描述

1.4字符串比较

格式:
[ 字符串1 = 字符串2 ] 			#判断是否相等
[ 字符串1 != 字符串2 ] 			#判断是否不等
[ -z 字符串 ]                     #判断字符串内容是否为空
常用操作符说明
=字符串内容相同
!=字符串内容不同,!号表示相反的意思
-z字符串内容为空
-n检查是否有字符串存在

方法一:[ ]
在这里插入图片描述
方法二:test
在这里插入图片描述
-z :是否为空字符串

在这里插入图片描述

1.5逻辑测试

格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
常用操作符说明
-a或&&逻辑与,而且的意思
-o或▕▕逻辑或,或者的意思
逻辑否

在这里插入图片描述

在这里插入图片描述

二、if语句

2.1 单分支结构

格式:
if [ 条件判断式 ]; than
	当条件判断成立时,执行一条或多条命令
fi 			

在这里插入图片描述
案例:使用单分支if语句判断test文件是否存在
在这里插入图片描述
案例二:
在这里插入图片描述
在这里插入图片描述
案例三:辨别shell脚本

在这里插入图片描述

在这里插入图片描述

2.2双分支结构

if [ 条件判断式 ]; then
	当条件判断成立时,可以执行一条或多条命令
else	
	当条件判断不成立时,可以执行一条或多条命令
fi 	

在这里插入图片描述

[root@Kiro shell]# vim test.sh

#!/bin/bash
read -p  "你今天开心吗?" ans
if [ $ans =  "yes" ]
   then
      echo have a good time
else
    echo 我的好心情分你一半
fi

在这里插入图片描述

案例:监测对方是否开机状态
在这里插入图片描述
测试结果:
在这里插入图片描述

案例:开启Apache 服务

[root@Kiro shell]# vim Apache.sh

#!/bin/bash
netstat -antup|grep ":80" &>/dev/null
if [ $? -eq 0 ];then
        echo "Apache服务已运行!"
else
echo "Apache服务正在启动中..........."
yum install -y httpd &>/dev/null
systemctl start httpd
echo "启动完成,欢迎使用Apache服务"
fi

在这里插入图片描述

2.3多分支结构


if [ 条件判断式 ]; then
	当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
	当条件判断成立时,可以执行一条或多条命令
else	
	当上面的条件判断都不成立时,可以执行一条或多条命令
fi

在这里插入图片描述

[root@Kiro shell]# vim test.sh

#!/bin/bash
read -p  "你今天开心吗?" ans
if [ $ans =  "yes" ]
   then
      echo have a good time
   elif [ $ans = "no" ]
        then
            echo 我的快乐分你一半!
else
      echo 你输入的$ans有误
fi

在这里插入图片描述
案例:判断文件类别

#脚本:判断文件类别
#!/bin/bash
read -p "输入:" name
if [ -d $name ] ; then
        echo "$name 是一个目录"
elif [ -f $name ] ;then
        echo "$name 是一个文件"
elif [ -b $name ];then
        echo "$name 是一个设备文件 "
else
echo "无法判别文件类型"
fi

在这里插入图片描述
案例:根据分数判断

#!/bin/bash

read -p "请输入分数:" score
if [ $score -eq 100 ];then
        echo "nice!"
elif [ $score -ge 90 ] && [ $score -lt 100 ];then
        echo "$score 分,优秀!"
elif [ $score -ge 60 ] && [ $score -lt 90 ];then
        echo "$score 分,继续加油!"
elif [ $score -le 60 ] ;then
        echo "$score 分,有待努力!"
else
        echo "你输入有误!"
fi

在这里插入图片描述

2.4 if 嵌套语句

检测是否有httpd服务,没有的话下载并启动

#!/bin/bash
ps -aux | grep httpd |grep -v grep &>/dev/null

if [ $? -ne 0 ];then
        if [[ "$(rpm -q httpd )"=="未安装软件包 httpd" ]];then
        echo "正在启动Apache服务..."  &>/dev/null
        yum install -y httpd  &>/dev/null
        systemctl restart httpd
        echo "Apache服务已经启动"
        else
        systemctl restart httpd
        fi
else
        echo "httpd is running"
fi

在这里插入图片描述

三、case语句

3.1 case多分枝结构


格式:
case 变量值 in 
模式一)
   命令序列
;;
模式二)
   命令序列 
;;
*)
   默认命令序列
esac

3.2 case语句注意事项

  • case行首必须以单词“in”,每一模式必须以单个右括号")"结束
  • 双分号";;"表示命令序列的结束
  • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b最后的)表示默认模式,其中的相当于通配符

案例一:局限于ok 回答

#!/bin/bash
read -p "请输入ok!" ans
case "$ans" in
[Oo][Kk])
echo 您输入的是$ans
esac
~     

在这里插入图片描述
案例二:不局限回答

#!/bin/bash
read -p "请输入一个字符:" key
case $key in
 [a-z][A-Z])
        echo "你输入的字母是:$key"
;;
 [0-9])
        echo "你输入的数字是:$key"
;;
 *)
        echo "你输入的是其他:$key"
;;
esac

在这里插入图片描述

案例三:改变apache状态脚本

#!/bin/bash
case $1 in
start)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux |grep httpd
echo "httpd start"
;;

stop)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux |grep httpd
echo "httpd stop"
;;

restart)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux |grep httpd
echo "httpd stop"
;;

status)
/usr/bin/systemctl $1 httpd
;;

*)
echo "please input start|stop|restart|status"
esac

测试结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值