【Linux】shell脚本实战-if多分支条件语句详解

2023-11-03

前言

前面我们已经学习过单分支语句和双分支语句的使用。 双分支语句就是在单分支语句的基础上又加了一层结果项。
今天我们来探讨下多分支语句,顾名思义,多分支语句就是在双分支语句基础上又加了一个可能性的结果
如果你还没有学习单双分支条件语句,建议参考下方链接学习:

【Linux】shell脚本实战-if单双分支条件语句详解

多分支语句的语法

语法结构:

if条件测试操作1 ; then
		commands
elif  条件测试操作2  ; then
		commands
elif 条件测试操作3 ; then
		commands
.......
else
		commands
fi

举例:

if [ 你有钱 ]
  then
     我就嫁给你
elif [ 家庭有背景 ]
  then
     也嫁给你
elif [ 有权 ]
  then
     也嫁给你
else
     我考虑下
fi

多分支语句的图示:
在这里插入图片描述

多分支语句举例:
1. 出嫁的条件
[root@ecs-c13b ~]# cat ifdtest1 
#!/bin/bash
read -p "请输入你有多少钱: " money
read -p "请输入你有几套房子: " houses

if [ $money -ge 1000000 ]   ### ge 表示大于
  then
     echo "我就嫁给你"
elif [ $houses -ge 3 ]
  then
     echo "我也嫁给你"
else
     echo "我考虑下"
fi

返回结果:

[root@ecs-c13b ~]# bash ifdtest1 
请输入你有多少钱: 100000
请输入你有几套房子: 5
我也嫁给你
2. 管理http服务实战脚本
[root@ecs-c13b html]# cat httpdcheck.sh 
#!/bin/bash
ss -lntp |grep httpd &> /dev/null
if [ $? -eq 0 ];then
	echo "httpd is running"
elif [ -f /usr/local/apache/bin/apachectl -a -x /usr/local/apache/bin/apachectl ]
### 查看文件是否存在且是否有可执行权限
  then
    /usr/local/apache/bin/apachectl start
    #### 如果有可执行权限,且存在,就执行脚本启动
else
  echo "没有httpd的启动脚本"
fi

返回结果:

[root@ecs-c13b html]# bash httpdcheck.sh 
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, usingrName' directive globally to suppress this message
[root@ecs-c13b html]# lsof -i:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   31393   root    4u  IPv6 363012      0t0  TCP *:http (LISTEN)
httpd   31394 daemon    4u  IPv6 363012      0t0  TCP *:http (LISTEN)
httpd   31395 daemon    4u  IPv6 363012      0t0  TCP *:http (LISTEN)
httpd   31399 daemon    4u  IPv6 363012      0t0  TCP *:http (LISTEN)
[root@ecs-c13b html]# bash httpdcheck.sh 
httpd is running
3. 猜数字游戏v1版本-if版本
#!/bin/bash
NO=20

read -p "input your num: " num
if [ $NO -gt $num ]; then   ### 判断输入的数字和原始数字的大小,gt表示大于
	echo "你猜测的太小了"
elif [ $NO -lt $num ]; then  ####判断输入的数字和原始数字的大小,lt表示小于
	echo "你猜测的太大了"
else 
	echo "恭喜你猜对了"

fi

返回结果:

[root@ecs-c13b html]# vim guess.sh
\[root@ecs-c13b html]# bash guess.sh 
input your num: 33
你猜测的太大了
[root@ecs-c13b html]# bash guess.sh 
input your num: 1
你猜测的太小了
[root@ecs-c13b html]# bash guess.sh 
input your num: 20
恭喜你猜对了
总结

多条件语句相对单双条件语句来说,稍微困难一些,但只要稍加练习就可以熟练。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】shell脚本实战-if多分支条件语句详解 的相关文章

  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • 静默检查 bash 脚本中是否存在 rpm

    我正在尝试使用 if 语句快速检查 rpm 是否安装在 bash 脚本中 但我想默默地做 目前 当我运行脚本并且 rpm 确实存在时 它将 rpm 的输出输出到我不想要的屏幕 if rpm qa grep glib then do some
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • Bash while 循环等待任务完成

    我创建了一个 bash 脚本来处理文件夹及其子文件夹中的视频 find type f name mkv while read file do ffmpeg i file done 问题 它不是 while 循环等待 ffmpeg 完成 而是
  • 在 Bash 中替换垂直线

    我很难完成我的脚本 因为这一部分没有按照我想要的方式运行 我的脚本中有这一行 cat home tmp temp1 txt awk gsub RS gsub RS print gt home tmp temp txt 效果很好 是的 但是当
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • bash 脚本抱怨文件名太长

    所以我有一个脚本可以执行此操作 jq 是命令行 JSON 处理器 echo Getting LB Node IDs echo LB STATUS jq loadBalancer nodes id 最后一行的输出是 1 2 3 但是当我尝试将
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 在 bash 脚本中检测鼠标点击

    我想知道如何在后台运行 bash 脚本 每当用户单击鼠标时该脚本都会执行某些操作 即运行脚本或命令或其他任何内容 即使终端关闭 我也希望它继续运行 有任何想法吗 谢谢 如果您使用的是X11 您可以尝试xdotool捕获鼠标事件 它会是这样的
  • 终端关闭时 bash 收到的信号

    使用 trap 来捕获信号 如下所示 i 1 while i lt 33 do trap echo i gt gt log txt i done 并强行关闭终端 那么log txt中的内容就是 redhat linux下 1 18 1 17
  • Bash:单行命令以与 grep 命令相反的状态退出?

    如何减少以下 bash 脚本 grep P STATUS Perfect recess txt exit 1 exit 0 看起来我应该能够用一个命令来完成它 但我这里总共有 3 个命令 我的程序应该 阅读课间休息 txt 如果它包含 ST

随机推荐

  • 【大前端】android怎么获取本地视频及封面的正确姿势

    话不多说 直接贴核心代码 获取手机中所有视频的信息 private void getAllVideoInfos List
  • 一个图形爱好者的书架.-也来介绍一下我的藏书.

    1 一个图形爱好者的书架 也来介绍一下我的藏书 http blog csdn net nhsoft article details 22992 2 关于计算机图形学的学习的书籍推荐 http www opengpu org forum ph
  • Android混合开发快速上手掌握

    目录 一 混合开发简介 二 Android Js互调 2 1 准备自己的html文件 2 2 WebView控件的准备设置 2 3 Android调用Js代码 2 4 Js调用Android方法和传参数 三 常用的几个方法和注意点 3 1
  • 计算机概论抱佛脚

    操作系统 1 提供了在用户和电脑硬件之间的接口 2 没有操作系统的时候是人工设置接线板 直接使用计算机硬件系统 后来是批处理系统 3 软件分类 软件应用软件 系统软件 系统软件工具软件 操作系统 操作系统 外壳 核心 4 Shell是用户和
  • KDB数据库的简单入门

    公司从sybase换到kdb 高度类似oracle 网上资料少找到一些命令 一 下面普及一下KDB产品基本操作 1 K DB启动 kdboot h kdboot 2 k db关闭 kddown kddown h 3 k DB登陆 kdsql
  • WPF编程学习——窗口

    本文目录 1 窗口的外观 2 窗口的位置 3 窗口的大小 4 窗口的可见性和状态 5 窗口的生命周期 1 窗口的外观 WPF中默认窗口框架的外观 主要取决于Icon Title WindowsStyle ResizeMode等属性 Icon
  • Python自然语言处理 NLTK 库用法入门教程【经典】

    本文来源于公众号 csdn2299 喜欢可以关注公众号 程序员学府 本文实例讲述了Python自然语言处理 NLTK 库用法 分享给大家供大家参考 具体如下 在这篇文章中 我们将基于 Python 讨论自然语言处理 NLP 本教程将会使用
  • 在开发过程中应该如何管理枚举类型数据[onJava8] [GPT-4]

    时间 2023 04 12 标签 Java 枚举类型 在开发过程中 为了保持代码的整洁和可维护性 我们可以采用以下几种方式来管理不同的枚举类型数据 单独创建枚举类文件 将每个枚举类型放在一个单独的 Java 文件中 这种方式可以让枚举类型更
  • 对于模板class里输入输出运算符的重载

    先看代码 pragma once include
  • 【C++】C++入门

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 命名空间 1 作用域限定符 二 命名空间namespa
  • [Data Structure]图的建立与遍历(c语言)

    图的建立 图的建立过程 初始化一个没有边的图 插入边构件图 一 邻接矩阵表示法 邻接矩阵表示法 通过一个矩阵来表示一张图 以下是结构体构建过程 typedef struct GNode PtrToGNode typedef PtrToGNo
  • 6 款 超好用的 Python 时间库

    六个Python的时间日期库 Dateutil Arrow Moment Maya Delorean Freezegun 内建的 datetime 模块 在介绍其他库之前 让我们回顾以下如何使用datetime模块将日期字符串转换为Pyth
  • java实现postman中form-data传参方式

    postman中几种传参方式区别 1 form data form data主要是以键值对的形式来上传参数 同时参数之间以 分隔符分开 同时也可以上传文件 文件上传要指定文件类型 具体可以看下面的图 2 x www form urlenco
  • 电脑低配,电脑配置低怎么办 如何让电脑运行速度加快

    电脑配置低怎么办 有一些电脑由于配置比较低 所以电脑的运行速度就会变的很慢 如果想要加快电脑在运行时候的速度 那么就需要在硬件或者软件上面进行优化或者提升 那么今天小编就从几个方面来解决配置低的电脑应该如何加快电脑的运行速度 电脑配置低怎么
  • xman 厦门邀请赛 pwn1 babystack writeup

    题目描述 这个题目针对现在的我还是有点难度的 花费了我三天的时间 最后发现原因竟是因为字符转化为整型的过程中多加了好多0 分析思路 1 首先查看文件的详细信息 tucker ubuntu xman pwn pwn1 file babysta
  • MySQL(五)——MySQL索引优化实战(多表联查优化)

    系列文章目录 MySQL 一 索引底层数据结构与算法 MySQL 二 Explain详情与索引最佳实践 MySQL 三 MySQL的内部组件结构及bin log归档 MySQL 四 MySQL索引优化实战 MySQL 五 MySQL索引优化
  • C++ static数据成员和函数

    static 在类的构造函数里初始化static变量显然是不合理的 其实我们可以在类中对static成员变量初始化的 就是使用关键字const进行修饰 只有静态整型常量才能在类中初始化 static const 与const static是
  • 【ArcPy视频教程】基于 ArcGIS Pro 的 ArcPy 教程(录制中)

    Arcpy视频教程 基于 ArcGIS Pro 的 ArcPy 教程 录制中 视频合集 基础01 环境搭建 基础02 几何和游标 上 基础02 几何和游标 下 实例01 网络图商API 上 实例01 网络图商API 下 实例01 网络图商A
  • 数据可视化笔记5 时间数据可视化

    文章目录 时间数据的趋势性 周期性 季节性 随机波动 时间序列数据特征 时间数据可视化设计的三个维度 时间数据可视化图形类型 离散时间数据可视化 连续时间数据可视化 概括 时间数据的趋势性 周期性 季节性 随机波动 时间序列差分 分解 相关
  • 【Linux】shell脚本实战-if多分支条件语句详解

    前言 前面我们已经学习过单分支语句和双分支语句的使用 双分支语句就是在单分支语句的基础上又加了一层结果项 今天我们来探讨下多分支语句 顾名思义 多分支语句就是在双分支语句基础上又加了一个可能性的结果 如果你还没有学习单双分支条件语句 建议参