shell编程之条件语句

引言

今天我们来讲讲shell脚本的语句 如if语句和case语句的应用

一、条件测试操作

1.test命令

  • 测试表达式是否成立,若成立返回0,否则返回其他数值
    两种格式:
格式1:test 条件表达式
格式2[ 条件表达式 ]  ###最少要有一个空格

2.文件测试

[ 操作符 文件或目录 ]

常用的文件测试操作符

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

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

第二种格式:
在这里插入图片描述
在这里插入图片描述

3.整数值比较

[ 整数1 操作符 整数2 ]

常用的测试操作符

操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

[root@chen home]#: [ $(who | wc -l) -le 4 ] && echo “用户少” ##用户数是否小于等于4
用户少
[root@chen home]#: who | wc -l 2

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

4.字符串比较

格式1 [ 字符串1 = 字符串2 ][ 字符串1= 字符串2 ]
格式2 [-z 字符串]
常用的测试操作符含义
=字符串内容相同
!=字符串内容不同,!号表示相反的意思
-z字符串内容为空
-n检测是否有字符串存在

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

5.逻辑测试

格式1[ 表达式1 ] 操作符 [ 表达式2 ]...
格式2:命令1 操作符 命令2
常用的测试操作符含义
-a或&&逻辑与,”而且“的意思
-o或ll逻辑或,”或者“的意思
逻辑否

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

在这里插入图片描述

二、if语句的结构

1.单分支结构

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

在这里插入图片描述
(1)列:
在这里插入图片描述
在这里插入图片描述
(2)列:
在这里插入图片描述
在这里插入图片描述
(3)列:
在这里插入图片描述

单个括号(【】):必须要有空格  两个字符或数字之间的比较左右必须有空格

条件判断: 
test一种形式,【】中间只能使用=!=比较字符串,如果使用<>需要进行转义\.
然后中间如果比较数字要用-lt 等符号,不能使用 \< 比较数字,他会当成字符串处理

两个括号【【 】】 :可用于处理逻辑命令,也可以处理字符串是否相等,且使用<>不用转义符

2.双分支结构

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

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

-c ping的次数
-i 每次多久ping一次,单位是秒
-W 反馈结果的时间,如果不通时可加快反馈时间,单位是秒
  • 判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码**
read -p "请输入你要创建的用户名:" name
id $name &>/dev/null
if [ $? -eq 0 ];then
        echo "该用户已存在!"
else
        useradd $name
        echo "123" | passwd --stdin $name &> /dev/null
        echo "已创建用户$name,并设置密码"
fi

在这里插入图片描述

  • 开启查询apache服务
#!/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    

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

3.多分支结构

if 条件测试操作1            if 分数为85~100之间
  then 命令序列1              then 判为优秀
elif 条件测试操作2          elif 分数为70~84之间
  then命令序列2               then 判为合格
else                      else
  命令序列3                   判为不合格
fi                        fi

在这里插入图片描述
(1)需求:判断文件的类别

#!/bin/bash
name=/home
if [ -d $name ];then
        echo "$name 是一个目录"
elif [ -f $name ];then
        echo "$name 是一个文件"
elif [ -b $name ];then
        echo "$name 是一个设备文件"
else
echo " 无法判断文件类别 "
fi    

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

在这里插入图片描述

(2)罚抄案例

#!/bin/bash

read -p "请输入你的分数:" score
if [ $score -eq 100 ];then
        echo "满分哦,真腻害,mua"
elif [ $score -ge 90 ] && [ $score -lt 100 ];then
        echo " $score 分,请抄错题10遍"
elif [ $score -ge 70 ] && [ $score -le 89 ];then
        echo " $score 分,请抄错题20遍"
elif [ $score -ge 60 -a $score -le 69 ];then
        echo " $score 分,请抄错题30遍"
elif [ $score -ge 0 -a $score -lt 60 ];then
        echo "$score 分,全抄 小垃圾"
else
        echo "输出有误"
fi

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

4.if嵌套语句

判断httpd服务有没有启动

ps aux | grep httpd | grep -v grep   //查询过滤httpd服务

if [  $? -ne 0  ];then    //有等于0,没有不等于0
      if [ "$(rpm -q httpd)"=="未安装软件包 httpd " ];then  //如果未非0,表示没有该服务 ,则表示未安装
注意:这里等号两边不能加空格
      echo “正在Apache服务请稍等..........”
        yum -y install httpd   //则下载httpd服务
        systemctl start httpd  //开启服务
        Else            //否则就是已存在安装包,只需要直接开启httpd服务
        systemctl start httpd
        fi
else
        echo "httpd is running"  //如果为0,表示该服务正在运行
Fi

在这里插入图片描述
等号两边不能有空格 也可以用-a来代替
在这里插入图片描述

三、case语句结构

case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case 语句主要适用于以下情况: 某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值。

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

在这里插入图片描述

1.case语句的执行流程

首先使用“变量值”与模式 1 进行比较,若取值相同则执行模式 1 后的命令序列,直到遇见双分号“;;”后跳转至 esac,表示结束分支;若与模式 1 不相匹配, 则继续与模式 2 进行比较,若取值相同则执行模式 2 后的命令序列,直到遇见双分号“;;”后 跳转至 esac,表示结束分支……依此类推,若找不到任何匹配的值,则执行默认模式“*)” 后的命令序列,直到遇见 esac 后结束分支。

案例

(1)检查用户输入的字符类型

#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z] | [A-Z])
echo "你输入的是字母"
;;
[0-9])
echo "你输入的是数字"
;;
*)
echo "您输入的是空格 *等特殊字符"
esac

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

(2)编写 apache 启动服务脚本

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

四、总结

  • 条件测试的语法

      文件测试、整数值比较、字符串比较、逻辑测试
    
  • if条件语句的语法

      单分支、双分支、多分支、嵌套
    
  • case多分支语句的语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值