shell脚本之if/case语句

一、条件测试

1、1 返回码 $?

$? :返回码,用来判断命令或者脚本是否执行成功。

0 :表示true ,成功;非0 则表示flase ,失败。

1、2 test命令

可以进行条件测试,然后根据返回值来判断条件是否成立

-e :exist,测试目录或者目录是否存在

-d :directory,测试目录是否存在

-f :file,测试普通文件是否存在

-r :read,测试当前用户是否对文件/目录有读权限

-w :write,测试写权限

-x :execution,测试执行权限

1、3 比较符

1.3.1 整数比较

-eq:等于,equal

-ne:不等于,not equal

-gt:大于,greater than

-lt:小于,less than

-ge:大于等于,gteq

-le:小于等于,lteq

1.3.2 类C语言的整数比较

==:等于,既可以比较数字,也可以比较字符串

!=:不等于

>:大于

<:小于

>=:大于等于

<=:小于等于

这种比较符一般用于比较变量或者字符串。

1.3.3 比较符格式

[ ] :注意格式,所有参数和符号都要以空格隔开

[[ ]] :可以使用更高级的模式,可以使用正则表达式。而且,在双中括号中使用字符串的时候可以不加引号,而不用担心引起歧义。

(( )) :只能使用算数比较符

1.3.4 逻辑与和逻辑或

与:&&,或者-a,条件都满足才成立

或:||,或者-o,满足一个条件即成立

注意:-a 和 -o 只能在 [ ]中使用,[[ ]]中或者两个[ ]之间只能用&& ||

二、if 语句

2.1 if语句的基本组成
  • if :后面是条件测试语句
  • then :后面跟命令序列,只有条件测试语句成立,才会执行then的命令模块
  • elif:后面也是条件测试语句,用于多分支结构
  • else:后面跟命令序列,所有的条件测试语句均不满足时,执行else的命令模块
  • fi :结束语句

2.2 单分支结构

在 /opt 目录下创建test1.sh

2.2 双分支结构

在 /opt 目录下创建test2.sh

2.3 多分支结构

在 /opt 目录下创建test3

2.4 嵌套 if 结构

需求:检查用户家目录中的test.sh 文件是否存在,并且检查是否有执行权限

在 /opt 目录下创建test4.sh

三、case语句

case相当于 if 多分支结构,格式如下:

:要求:用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录,分别使用tar -zxvftar -jxvf

用 case语句实现2.3 的列子,如下所示:

四、shell练习

需求1
通过位置变量传参的方式,给脚本内部传一个ip地址

用if判断主机是否存活,若存活提示用户ip is online,而且要保存到/opt/hosts.txt文件,若主机无连接,提示用户 ip is offline

使用ping -c 5 检测连通性,但不显示ping的过程
 

需求2

提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。然后再判断输入的内容是奇数还是偶数。

提示:判断输入的内容是否为整数,可以用 if [ $num -eq $num ] &> /dev/null ,-eq是整数比较符,如果变量不是整数,比如小数或者字符串会报错,并跳转到else执行,把报错信息重定向到/dev/null就不会在终端显示多余的信息。

对检验奇数偶数的解释: $(($num%2)),对变量除以2取余数,余数为0则为偶数,余数为1则为奇数。

需求3
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,
大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误(整数判断,小数判断。)

test3.sh:只允许输入整数
 

如果要实现小数判断,可以用bc实现,比如:result=$(echo "$num1 > $num2" | bc) 。把两个小数变量比较的结果保存到result中,再用if语句对result进行判断

需求4

用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示输入不正确:{start|stop|status|restart}
test4.sh:用传参的方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…

4、linux相关基础知识

1、gcc编译过程 .c通过编译生成.o文件&#xff0c;.out目标文件进过链接生成.so库文件。 2、在C中可以使用system(("mkdir -p "path).c_str())创建目录。c_str()把string转化为c字符串&#xff0c;便于system命令识别&#xff0c;system命令会新启动一个进程来创建文…

移动硬盘有盘符打不开:深度解析与高效恢复指南

在数字化信息爆炸的今天&#xff0c;移动硬盘作为便捷的数据存储与传输工具&#xff0c;其重要性不言而喻。然而&#xff0c;当您遇到移动硬盘有盘符却无法正常打开的情况时&#xff0c;无疑会给您的工作和生活带来不小的困扰。本文将深入探讨移动硬盘有盘符打不开的原因&#…

东软“引战”国家队 通用技术“补链”大国重器

向来低调温和的东软创始人刘积仁&#xff0c;这一次抛出了“王炸”级的资产交易。 7月3日&#xff0c;《多肽链》获得一则足以引爆国内医疗设备行业的投资信息&#xff1a;被东软集团视为核心资产、掌上明珠的东软医疗&#xff0c;成功引入通用技术集团资本有限公司与中国国有…

BI佐罗,居然抄袭洗稿我的文章

必须曝光此博主不当行径。 4月2日这天发表的原创文章&#xff1a;BI报表系统建设10大坑&#xff0c;因为都是切身的实际项目经验总结&#xff0c;获得了很多人的关注。 我觉得写文章要写的是亲身、真的做过的专业的项目经验&#xff0c;而不是信口开河随口忽悠。 如果有些博…

Fancybox: 号称世界上最流行的灯箱脚本!这款“花盒“为什么与众不同?

今天要分享的是一个灯箱脚本库&#xff1a;Fancybox。最近了不起刚好用到它。这里就和大家分享下。 简介 Fancybox 是终极的 JavaScript 灯箱替代品&#xff0c;为多媒体显示中的优质用户体验设定了标准。支持图像、视频、地图、内联内容、iframe 和任何其他 HTML 内容。 此…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库&#xff0c;它可以用来处理流式数据&#xff0c;进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…

Pytorch中nn.Sequential()函数创建网络的几种方法

1. 创作灵感 在创建大型网络的时候&#xff0c;如果使用nn.Sequential&#xff08;&#xff09;将几个有紧密联系的运算组成一个序列&#xff0c;可以使网络的结构更加清晰。 2.应用举例 为了记录nn.Sequential&#xff08;&#xff09;的用法&#xff0c;搭建以下测试网络&…

数字电路-建立时间和保持时间详解

对于数字系统而言&#xff0c;建立时间&#xff08;setup time&#xff09;和保持时间&#xff08;hold time&#xff09;是数字电路时序的基础。数字电路系统的稳定性&#xff0c;基本取决于时序是否满足建立时间和保持时间。我自己在初学时一度很难理解清楚他们的概念&#x…

基于JAVA+SpringBoot+Vue+uniApp小程序的心理健康测试平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 该系统由三个核心角色…

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程 新增网卡 新增网卡的首先当然需要关闭PVE母机&#xff0c;把新网卡插上&#xff0c;我用淘宝遥现金搞了个红包&#xff0c;花了26元买了块SSU的2.5G网卡。说实话这个价位连散热片都没有&#xff0c;确实挺丐的。稍后测下速度看…

移动硬盘有盘符打不开的全方位解决方案

一、现象描述&#xff1a;移动硬盘有盘符却无法访问 在日常的数据存储与传输中&#xff0c;移动硬盘无疑扮演着举足轻重的角色。然而&#xff0c;不少用户可能会遇到这样一个令人头疼的问题&#xff1a;移动硬盘在连接电脑后&#xff0c;虽然能正常显示盘符&#xff0c;但双击…

【算法】单调队列

一、什么是单调队列 单调队列是一种数据结构&#xff0c;其特点是队列中的元素始终保持单调递增或递减&#xff0c;主要用于维护队列中的最小值或最大值。 不同于普通队列只能从队头出队、队尾入队&#xff0c;单调队列为了维护其特征&#xff0c;还允许从队尾出队 不管怎么…

深入Linux:权限管理与常用命令详解

文章目录 ❤️Linux常用指令&#x1fa77;zip/unzip指令&#x1fa77;tar指令&#x1fa77;bc指令&#x1fa77;uname指令&#x1fa77;shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理&#x1fa77;文件访问者的分类&#…

【微信小程序知识点】getApp()全局数据共享,页面间通信,组件间通信

getApp()-全局数据共享 在小程序中&#xff0c;可以通过getApp()方法获取到小程序全局唯一的App实例。因此在App()方法中添加全局共享的数据&#xff0c;方法&#xff0c;从而实现页面&#xff0c;组件的数据传值。 // app.js App({//全局共享的数据globalData: {token: &qu…

力扣每日一题:3011. 判断一个数组是否可以变为有序

力扣官网&#xff1a;前往作答&#xff01;&#xff01;&#xff01;&#xff01; 今日份每日一题&#xff1a; 题目要求&#xff1a; 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中&#xff0c;如果两个 相邻 元素在二进制下数位为 1 的数目 相同 &…

Cxx Primer-CP-2

开篇第一句话足见作者的高屋建瓴&#xff1a;类型决定程序中数据和操作的意义。随后列举了简单语句i i j;的意义取决于i和j的类型。若它们都是整形&#xff0c;则为通常的算术意义。若它们都为字符串型&#xff0c;则为进行拼接操作。若为用户自定义的class类型&#xff0c;则…

为Linux设置GRUB密码

正文共&#xff1a;999 字 11 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们前面介绍了如何恢复root密码&#xff08;CentOS 7.9遗忘了root密码怎么办&#xff1f;&#xff09;&#xff0c;虽然简单好用&#xff0c;但是可能会被不法分子利用&#xff0c;造成root密码以及…

快速读出linux 内核中全局变量

查问题时发现全局变量能读出来会提高效率&#xff0c;于是考虑从怎么读出内核态的全局变量&#xff0c;脚本如下 f open("/proc/kcore", rb) f.seek(4) # skip magic assert f.read(1) b\x02 # 64 位def read_number(bytes):return int.from_bytes(bytes, little,…

【FineReport的详细使用教程】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;今天主要和大家分享一下&#xff0c;BI报表中的FineRoport 的详细使用&#xff0c;以及它的优势&#xff01;&#xff01;&#xff01;希望对大家有所帮助。 &#x1f49e;&#x1f49e;代…