shell脚本的条件语句(测试、if语句、case语句)

本文详细介绍了Linux中的条件测试,包括test命令的使用、文件测试操作符、整数和字符串比较,以及逻辑测试。接着,讲解了if语句的四种形式:单分支、双分支、多分支和嵌套使用。最后,提到了case语句的结构和应用场景,特别是用于服务管理的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.条件测试

1.1 test命令

1.2 文件测试 

1.3 整数数值比较

1.4 字符串比较

1.5 逻辑测试

2.if语句

      2.1 单分支

2.2 双分支

2.3 多分支

2.4 if嵌套语句

3.case语句

   3.1.case的概述

   3.2 case实验


1.条件测试

1.1 test命令

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

格式1:test 条件表达式

格式2:[ 条件表达式 ]

1.2 文件测试 

  1.格式

操作符     文件名或者目录名

  2.常用的测试操作符

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


 

1.3 整数数值比较

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

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

1.4 字符串比较

1.格式:

     [ 字符串1 = 字符串2 ] #判断是否相等

     [ 字符串1 != 字符串2 ] #判断是否不等

     [ -z 字符串 ] #判断字符串cha

2.常用的测试操作符

       (1)=:字符串内容相同

       (2)!=:字符串内容不同,!号表示相反的意思

       (3)-z:字符串内容为空

       (4)-n:字符是否存在

1.5 逻辑测试

  1. 格式

(1)[ 表达式1 ] 操作符 [ 表达式2 ] 

(2)命令1 操作符 命令2

  2.常见条件

(1)-a或&&:逻辑与,“而且”的意思全真才为真;

(2)-o或||:逻辑或,“或者” 的意思一真即为真。

1.[ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]] 
 
2.[ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]] 

3.三元运算符

[  表达式  ] && a || b

当条件表达式为真时,取a值;当条件表达式为假时,取b值

 

2.if语句

 2.1 单分支

与[ 表达式 ] && 效果相同

格式:

  if [ 条件测试操作 ];

  then 命令序列

  fi   #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误   

 

2.2 双分支

格式:

  if 条件
    then 命令1
    else 命令2
  fi 

 

 

 

 

2.3 多分支

格式:

  if 条件1
    then 命令1
  elif 条件2
    then 命令2
   else 命令3
  fi   

 

 

 

2.4 if嵌套语句

例 1.判断httpd服务有没有启动
 
判断是否启动
如果启动------输出已启动
如果没启动----判断是否安装---如果安装---启动
                           如果没安装----安装---如果安装成功---启动
                                                                 如果安装不成功-----报错

ps aux | grep httpd | grep -v grep
 
if [ $? -ne 0 ];then
        if [ "$(rpm -q httpd)" == "未安装软件包 httpd " ];then
        yum -y install httpd
        systemctl start httpd
        else
        systemctl start httpd
        fi
else
        echo "httpd is running"
fi

 

 移除httpd软件包后再执行脚本

 

 

3.case语句

   3.1.case的概述


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

 

格式:

case 变量值 in

模式 1)

        命令序列 1

;;

模式 2)

        命令序列 1

;;

* )

        默认命令序列

esac

ase 行尾必须为单词“in”,每一模式必须以右括号“)”结束。
  1.双分号“;;”表示命令序列的结束。
  2.模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号 “|”表示或,如“A|B”。 
  3.最后的“*)”表示默认模式,其中的*相当于通配符。

3.2 case实验

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

 

 

2. 编写 apache 启动服务脚本

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值