shell脚本之条件语句 与 if 语句

Posted 段小宝 

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本之条件语句 与 if 语句相关的知识,希望对你有一定的参考价值。

一、条件测试

1.1 test 命令

  test 命令用来 测试表达式是否成立(条件成立返回 0 ,不成立返回其他数值)。

test 命令 有两种形式:

  • 格式:test 条件表达式

  • 格式二:[ 条件表达式 ]方括号两边与条件表达式之间一定要用空格分隔,否则会执行失败。

  • 检查最后所执行命令的状态的最简便方法是使用 $? 查看

在这里插入图片描述

1.2 文件测试

 使用 test 命令进行 文件测试,可以用来判断 对应的是文件还是目录,或者判断是否有相应的权限等。

格式:[ 操作符 文件或目录 ]  # 注意[ ]要有空格
常用的操作符功能
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(Excute)
-L测试是否是软链接(符号链接)文件

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

1.3 整数值比较

用于比较两个整数值的大小。

$() 和 反撇号 是用来提取里面命令的执行结果。

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

比较符功能符号
-eq等于==
-ne不等于!=
-gt大于/>
-lt小于/<
-ge大于等于
-le小于等于

实例:
1 . 如果当前登录系统的用户数量少于5人,进行输出提示。
在这里插入图片描述
2 . 判断主内存空闲是否小于1024M

free 命令显示系统使用和空闲的内存情况,-m 选项显示内存的单位为 M。Mem是存,swap 是交换分区内存。

先获取当前内存的值(主内存空闲是指:Mem 内存行的 free 列的值),交给一个变量,再用这个变量来比较。
在这里插入图片描述
在这里插入图片描述
表达式 && 语句1 || 语句2 相当于java中的三目运算符 ?:
在这里插入图片描述

1.4 字符串比较

  • 字符串比较可用来测试 用户输入、系统环境等是否满足条件;

常用测试操作符:

  • = :两个字符串内容相同
  • != :内容不相同,!表示取反
  • -z :字符串内容为空

格式:

[  字符串1  = / ==  字符串2 ]
[  字符串1  !=  字符串2 ]
[  -z  字符串 ]	#检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
-n 非空串

在这里插入图片描述

1.5 逻辑测试

用于判断两个或多个条件之间的依赖关系

常用的操作符:
-a或&& :逻辑与,“而且”的意思,为真时,左右表达式需都成立
-o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立
! :逻辑否

注:-a  -o 需要在 [] 括号中执行。

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

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

示例:
[ 3 -ne 1 ] && [ 3 != 2 ] 
等同于
[ 3 -ne 1 -a 3 != 2 ]
等同于
[[ 3 -ne 1 && 3 != 2 ]]

在这里插入图片描述
例:通过 输入IP地址,判断能否访问该主机。

linux 中的 ping 命令:

  • -c 表示发送包的个数
  • -i 表示发送包的间隔时间
  • -w 表示多少秒后停止ping操作
    在这里插入图片描述
    在这里插入图片描述

二、if 语句

if-fi 语句是编程语言中用的最多的语句。可以直接一行写在终端框中,也可以写在shell文件中。

注意点:

  • fi 表示结束判断,别忘了加上。
  • if 不能直接跟符号,需要加空格,如 if [ ],if[]是错的。

2.1 单分支结构

在这里插入图片描述
例子:
当磁盘空间使用达到 5% 时,提示报警信息。

难点:如何获取磁盘使用空间?如何与 5 进行对比?

思路:使用 df -h 查看磁盘空间使用信息,
在这里插入图片描述
-h 会自动转换单位,不好截取G这个字符,这里不带参数。
在这里插入图片描述
在这里插入图片描述
例2:
在这里插入图片描述
写在一行时,每行都要加分号。

在这里插入图片描述

2.2 双分支结构

在这里插入图片描述
实验:启动http服务。
在这里插入图片描述
方便实验,我先 yum remove httpd 卸载httpd服务。
在这里插入图片描述
在这里插入图片描述

2.3 多分支结构

在这里插入图片描述
实例:
在这里插入图片描述

read -p "请输入你的分数:" score

if [ ${score} -eq 100 ]
 then
   echo "结果:满分"
elif [ ${score} -lt 100 ] && [ ${score} -ge 90 ]
 then
   echo "结果:优秀"
elif [ ${score} -lt 90 ] && [ ${score} -ge 70 ]
 then
   echo "结果:良好"
elif [ ${score} -lt 70 ] && [ ${score} -ge 60 ]
 then
   echo "结果:及格"
else
   echo "你玩完了"
fi

三、case 条件选择语句

在这里插入图片描述
匹配模式支持通配符。

以实验 2.3 为例:
在这里插入图片描述

#!/bin/bash

read -p "请输入成绩:" score

#先根据输入的分数给变量赋予不同的值
[ $score -eq 100 ] && a=10
[ $score -lt 100 ] && [ $score -ge 90 ] && a=9
[ $score -ge 60 -a $score -le 89 ] && a=6
[ $score -ge 0 -a $score -le 59 ] && a=1

case $a in
10)
        echo "满分"
        ;;
9)
        echo "优秀"
        ;;
6)
        echo "及格"
        ;;
1)
        echo "完蛋"
        ;;
*)
        echo "输入有误"
esac

直接使用通配符也可以:
在这里插入图片描述

以上是关于shell脚本之条件语句 与 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本之条件语句

Shell脚本之if条件语句

shell脚本之if条件测试语句

Shell脚本之进阶

shell脚本之 if,case,for的用法

shell脚本之 if,case,for的用法