shell条件判断:if语句结构及其应用案列详解

目录

  • 一. 条件判断的语法格式
  • 二. 条件判断的相关参数
    • 2.1 判断文件类型
    • 2.2 判断文件权限
    • 2.3 判断文件新旧
    • 2.4 判断整数
    • 2.5 判断字符串
    • 2.6 多种条件判断
  • 三. 流程控制语句
    • 3.1 if单分支语句
    • 3.2 if双分支语句
    • 3.3 if多分支语句
  • 四. if判断语句应用案例
    • 4.1 判断两台主机是否和远程主机是否ping通
    • 4.2 判断一个服务是否正常

一. 条件判断的语法格式

  • 格式1:test 条件表达式
  • 格式2:[ 条件表达式 ]
  • 格式3:[[ 条件表达式 ]] 支持正则 =~

特别说明:
1)[ 我两边都有空格,不空打死你喔 ]
2)[[ 我两边都有空格,不空打死你喔 ]]
3)更多判断,man test 去查看,很多的参数都用来进行条件判断

二. 条件判断的相关参数

2.1 判断文件类型

判断参数 含义
-e 判断文件是否存在(任何类型文件)
-f 判断文件是否存在并且是一个普通文件
-d 判断文件是否存在并且是一个目录
-L 判断文件是否存在并且是一个软连接文件
-b 判断文件是否存在并且是一个块设备文件
-S 判断文件是否存在并且是一个套接字文件
-c 判断文件是否存在并且是一个字符设备文件
-p 判断文件是否存在并且是一个命名管道文件
-s 判断文件是否存在并且是一个非空文件(有内容)

举例说明:
test -e file #只要文件存在条件为真
[ -d /opt/peihua ] #判断目录是否存在,存在条件为真
[ ! -d /opt/peihua ] #判断目录是否存在,不存在条件为真
[[ -f /opt/1.txt ]] #判断文件是否存在,并且是一个普通文件

2.2 判断文件权限

判断参数 含义
-r 当前用户对其是否可读
-w 当前用户对其是否可写
-x 当前用户对其是否可执行

2.3 判断文件新旧

说明:这里的新旧指的是文件修改时间。

判断参数 含义
file1 -nt file 2 比较file1是否比file2 新
file1 -ot file2 比较file1 是否比file2 旧
file1 -ef file2 比较是否为同一文件,或者用于判断硬链接,是否指向同一个inode

2.4 判断整数

判断参数 含义
-eq 相等
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

2.5 判断字符串

判断参数 含义
-z 判断是否为空字符串,字符串长度为0则成立
-n 判断是否为非空字符串,字符串长度不为0则成立
string1 = string2 判断字符串是否相等
string1 != string2 判断字符串是否不相等

注意:字符串的比较是需要在符号的两边空格的,否则会不会起到比较的作用

[root@localhost ppeihua]# a=hello;b=word;[ $a=$b ];echo $?
0
[root@localhost ppeihua]# a=hello;b=word;[ $a = $b ];echo $?
1

2.6 多种条件判断

判断符号 含义 举例
-a 和 && 逻辑与 [ 1 -eq 1 -a 1 -ne 0] [1 -eq 1] && [ 1 -ne 0 ]
-o 和 || 逻辑或 [ 1 -eq 1 -o 1 -ne 1 ] [ 1-eq 1 ] || [1 -ne 1 ]

特别说明:
1)&& 前面表达式为真,才会执行后面的代码
2)|| 前面的表达式为假,才会执行后面的代码
3); 只用于分隔命令或表达式。完全不用考虑;号前面的语句是否正确执行,都会执行;号后面的内容
4)如果&&和||一起出现,从左往右依次看,按照以上原则

三. 流程控制语句

3.1 if单分支语句

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


if单分支的流程图

shell条件判断:if语句结构及其应用案列详解_第1张图片

3.2 if双分支语句

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

  

if双分支流程图
shell条件判断:if语句结构及其应用案列详解_第2张图片

3.3 if多分支语句

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

if多分支流程图

shell条件判断:if语句结构及其应用案列详解_第3张图片

四. if判断语句应用案例

4.1 判断两台主机是否和远程主机是否ping通

需求:判断当前主机是否和远程主机是否ping通
1.思路
1)使用哪个命令实现 (ping;-t;-w;)
2)根据命令的执行结果来判断是否通
3)根据逻辑和语法结构来编写脚本(条件判断或者流程控制)

2.落地实现

#!/bin/bash
#该脚本用于判断当前主机是否和远程指定主机互通
#交互式定义变量,让用户自己决定ping哪个主机
read -p "请输入你要ping的主机的IP:" IP
#使用Ping程序判断主机是否互通
ping -c 1 $IP &> /dev/null
if [ $? -eq 0 ];then
  echo "当前主机与远程主机$IP是互通的"
else
  echo "当前主机与远程主机$IP是不互通的"
fi
~

4.2 判断一个服务是否正常

需求:判断门户网站是否能够正常访问
1.思路
1)可以判断进程是否存在,用/etc/init.d/http status判断状态等方法
2)最好的方法是直接去访问一下,通过访问是否成功和失败的返回值来判断 (wget)

2.落地实现

#!/bin/bash
#判断门户网站是否正常提供服务
#定义变量
web_server=www.baidu.com
wget -P /opt/zhenguo  $web_server &> /dev/null
[ $? -eq 0 ] && echo "当前网站服务是ok的" && rm -f /opt/zhenguo/index.* || echo "当前网站服务不ok,请立刻处理"

你可能感兴趣的:(shell条件判断:if语句结构及其应用案列详解)