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

一. 条件判断的语法格式

  • 格式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单分支的流程图

在这里插入图片描述

3.2 if双分支语句

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

  

if双分支流程图
在这里插入图片描述

3.3 if多分支语句

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

if多分支流程图

在这里插入图片描述

四. 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,请立刻处理"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值