shell脚本-第二集

控制语句-test 、IF、CASE

一、条件测试操作——test

Shell环境根据命令执行后的返回状态值,    $?来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。

test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为 0 表示条件成立)。

- 格式一:test <条件表达式>

- 格式二:[ <条件表达式> ]    ##中括号内在条件表达式左右必须至少有一个空格

1.1、文件测试

  • 格式:[ 操作符 文件或目录 ]

常用的操作符:

操作符含义
-e测试目录或文件是否存在(Exist)。
-d测试是否为目录(Directory)。
-f测试是否为文件(File)。
-r测试当前用户是否有权限读取(Read)。
-w测试当前用户是否有权限写入(Write)。
-x测试是否设置有可执行(Excute)权限。
-L测试是否为符号链接

1.2、整数值比较

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

常用的操作符:

操作符含义
-eq 、 (==)等于
-ne 、 (!=)不等于
-gt 、 (>)大于
-lt 、 (<)小于
-le 、 (<=)小于等于
-ge 、 (>=)大于等于

1.3、字符串比较

  • 格式1:
    [ 字符串1 = 字符串2 ] 或 [[ 字符串1 == 字符串2 ]] #相同
    [ 字符串1 != 字符串2 ] 或 [[ 字符串1 != 字符串2 ]] #不相同
    [[ 字符串1 =~ 字符串2 ]] #包含

  • 格式2:
    [ -z “字符串” ] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
    [ -n “字符串” ] #检查是否有字符串存在

1.4、逻辑测试

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

  • 格式2:命令1 操作符 命令2

1.5、常用的操作符:

  • -a或&& :逻辑与,“而且”的意思,前后条件需都成立

  • -o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立

  • ! :逻辑否

二、控制语句——”if“

2.1、单分支

通过此结构,如果满足给定条件,将采取一个或多个操作。如果不满足给定条件,则不采取任何操作。前面演示的数字、字符串和文件测试经常用于在 if/then 语句中测试条件。末尾的fi语句用于结束if/then 结构。

if <条件测试操作>
  then
    <命令序列>
fi

在这里插入图片描述

以下代码段演示了使用 if/then结构来启动sshd服务。

示例:

#使用if单分支判断sshd服务是否开启,若正常开启屏幕提示”sshd服务已经开启“

vim 1.sh
      #!/bin/bash
      systemctl is-active sshd &>/dev/null
      if [ $? -eq 0 ]
        then
          echo "sshd服务已经开启"
      fi

chmod +x 1.sh

./1.sh

在这里插入图片描述

在这里插入图片描述

2.2、双分支

if/then 结构可以进一步扩展,以便能够根据是否满足条件来采取不同的操作集合。

以下示例中显示了其结构:

if <条件测试操作>
  then
    <命令序列>
  else
    <命令序列>
fi

在这里插入图片描述

以下代码段演示了使用 if/then/else 语句来启动 sshd 服务(如果其未处于活动状态)和提示该服务已启动(如果其处于活动状态)。
示例:

#使用if双分支判断sshd服务是否开启,若正常开启屏幕提示”sshd服务已经开启“,如果没有开启,启动sshd服务并提示”sshd服务已经开启“
vim 2.sh
      #!/bin/bash
      systemctl is-active sshd &>/dev/null
      if [ $? -ne 0 ]
        then
          systemctl start sshd
            echo "sshd服务已经开启"
        else
            echo "sshd服务已经开启"
      fi

chmod +x 2.sh

./2.sh

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

2.3、多分支

if/then/else结构可以进一步扩展以测试多个条件:在满足某个条件时执行不同的操作集合。
以下示例中显示了其结构:

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

在这里插入图片描述

在此条件结构中,Bash将按照显示的顺序测试条件。在发现某个条件成立后,Bash将执行与该条件相关联的操作,然后跳过条件结构的其余部分。如果所有条件均不成立,Bash将执行else子句中枚举的操作。

示例:

  vim 3.sh

      #!/bin/bash
        if [ "$1" == "start" ]
          then        
            systemctl start sshd
            echo "sshd服务已开启"
          elif [ $1 == "stop" ]
            then        
              systemctl stop sshd
              echo "正在关闭sshd服务"
          elif [ $1 == "status" ]
            then          
              systemctl status sshd
          elif [ $1 == "restart" ]
            then          
              systemctl restart sshd
              echo "正在重启sshd服务"
          else
            echo "请使用:start|stop|status|restart 字符"
        fi 


chmod +x 3.sh

./3.sh start



.3.sh status

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

三、控制语句——”case“

case 变量值 in
  表达式1)
  命令序列 1
  ;;
  表达式2)
  命令序列 2
  ;;
  ……
  * )
  命令序列
esac

在这里插入图片描述

示例:

##用case语句写一个sshd脚本,并加入到系统服务管理中,使能够使用 service sshd start|stop|restart|status 来管理sshd服务,
##要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
vim 4.sh
case $1 in
start)
    systemctl start sshd
;;
stop)
    systemctl stop sshd
;;
restart)
    $0 stop
    $0 start
;;
status)
    systemctl status sshd
;;
* )
    echo "用法: $0 {start|stop|status|restart}"
esac

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值