shell编程之条件语句

本文详细介绍了Shell脚本中的条件测试,包括test命令的使用、文件测试操作符、整数和字符串比较以及逻辑测试。同时,讲解了if语句的单分支、双分支和多分支结构,以及case语句的使用方法,提供了多个实际例子来帮助理解如何在Shell脚本中实现条件判断和流程控制。
摘要由CSDN通过智能技术生成

目录

一、条件测试

1.test命令

概述

格式

2.文件测试

格式

常用的测试操作符

3.条件测试操作 

整数值比较

 常用的测试操作符

字符串比较

逻辑测试

二、if语句的结构 

1.单分支结构

 举例说明

2.双分支结构

 举例说明

 3.多分支结构

 举例说明

判断文件类型

 判断学习情况(通过分数判断)

三、case语句结构

1.case多分支结构

 2.作用

3.举例说明

随机抽奖


一、条件测试

1.test命令

概述

测试表达式是否成立,若成立返回0,否则返回其他数值。

格式

格式1:test 条件表达式
格式2:[ 条件表达式 ] 注:中括号前后都要留有一个空格

2.文件测试

要使shell脚本程序具备一定的智能,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如:当磁盘使用率超过95%时,发送警告信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等。

shell环境根据命令执行后的返回状态($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具---test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成功(返回值为0表示条件成立)。

格式

[ 操作符 文件或目录 ]

常用的测试操作符

操作符功能
-d测试是否为目录
-e测试目录或文件是否存在
-f测试是否为文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行

拓展 

操作符功能
-b测试是否为设备文件
-c测试是否为字符设备文件
-s测试存在且文件大小为空
-L测试是否为链接文件

 注:执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。例如:执行以下操作可测试目录/media/是否存在,如果返回值$#为0,表示存在此目录,否则表示不存在或者虽然存在但不是目录。

3.条件测试操作 

整数值比较

[ 整数1  操作符 整数2 ]  注意:括号前后要留一个空格

 常用的测试操作符

操作符作用
-eq等于
-ne不等于
-gt大于
-ge大于或等于
-lt小于
-le小于或等于

 

 查看正在使用当前系统的用户数量为2,少于4,满足条件,输出结果用户太少了。

字符串比较

格式

[ 字符串1 = 字符串2 ]

[ 字符串1 != 字符串2]

[ -z 字符串 ]

 常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,!表示相反的意思
  • -z:字符串内容为空

逻辑测试

格式

[ 表达式1 ] 操作符 [ 表达式2 ] ...

命令1 操作符 命令2 ...

 常用的测试操作符 

  • -a或&&:逻辑与,“而且”的意思。
  • -o或||:逻辑或,“或者”的意思。
  • !:逻辑否,表示取反的意思。

二、if语句的结构 

1.单分支结构

if  条件测试操作                    if  已用磁盘空间>90%  

    then  命令序列      ===          then  报警

fi                                           fi

 举例说明

 

2.双分支结构

if 条件测试操作                        if  80端口是否在监听

   then  命令序列1        ===          then  网站服务已在运行

   else  命令序列2                         else  启动httpd服务

fi                                              fi

 举例说明

查看能否ping通IP,可以输出up,否则输出down

创建用户,如果已存在输出已存在,否则创建一个新用户并赋予密码123456 

 

查看80端口是否开启,开启输出已运行,否则输出正在启动,安装httpd,并开启apache服务。

 

 3.多分支结构

if 条件测试操作1                           if 分数在85~100之间

   then  命令序列1                            then  判断为优秀

elif 条件测试操作2         ===        elif 分数为70~84之间

   then  命令序列2                            then  判为合格

elif                                                elif

   命令序列3                                     判为不合格

fi                                                   fi

 举例说明

判断文件类型

 判断学习情况(通过分数判断)

  

三、case语句结构

1.case多分支结构

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

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

 2.作用

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

3.举例说明

随机抽奖

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值