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,一经查实,立即删除!

相关文章

周末总结(2024/07/13)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内 工作上的要点 现状&#xff08;接受破烂现状&#xff0c;改变…

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

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

Linux重要知识点

1. 命令行操作 Linux大多数操作都是通过命令行进行的。熟悉常用命令和脚本是使用Linux的基础。 基本命令&#xff1a;如 ls, cd, cp, mv, rm&#xff0c;这些命令用于文件和目录的管理。文件权限和管理&#xff1a;了解如何使用 chmod, chown, chgrp 等命令来管理文件权限和所…

MySQL数据库相关知识

1、常用知识点 binlog日志&#xff1f; 在MySQL中&#xff0c;术语“schema”和“database”通常是同义词&#xff0c;它们指的是存储数据表、视图、存储过程等数据库对象的逻辑容器。? 2、优化 3、原理

C++:右值引用

右值与左值 在讲解右值引用之前&#xff0c;我们就需要先辨析一下左值与右值的区别。 左值 左值是一个表示数据的表达式&#xff0c;我们可以获取它的地址并且对其赋值&#xff0c;左值可以出现在赋值操作符的左边&#xff0c;但是右值不能。 int i 0; int* p &i; do…

编程题-栈,链栈

概念 栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 栈顶&#xff08;Top&#xff09;&#xff1a;线性表允许进行插入删除的那一端。 栈底&#xff0…

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 内容。 此…

reverse函数讲解

reverse&#xff1a; 在C中&#xff0c;reverse 是一个标准库函数&#xff0c;用于反转指定范围内的元素顺序。该函数定义在头文件 <algorithm> 中。它的基本用法如下&#xff1a; #include <algorithm> // 包含reverse函数 #include <vector> // 使用v…

如何在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;搭建以下测试网络&…

UDP怎么实现可靠传输

UDP它不属于连接型协议&#xff0c;因而具有资源消耗小&#xff0c;处理速度快的优点&#xff0c;所以通常音频、视频和普通数据在传送时使用UDP较多&#xff0c;因为它们即使偶尔丢失一两个数据包&#xff0c;也不会对接收结果产生太大影响。传输层无法保证数据的可靠传输&…

简谈设计模式之工厂模式

工厂模式是一种创建型设计模式, 旨在将对象的创建过程和使用过程分离. 这样可以在不改变客户端代码的前提下, 灵活创建不同类型的对象 工厂模式实现 简单工厂模式 简单工厂模式使用一个工厂类根据传入的参数决定创建哪种具体产品类的实例. 它不属于设计模式的23种, 但它为理…

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

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

云端典藏:iCloud中个人收藏品目录的智能存储方案

云端典藏&#xff1a;iCloud中个人收藏品目录的智能存储方案 在数字化生活不断推进的今天&#xff0c;个人收藏品的管理也趋向于电子化和云端化。iCloud作为苹果公司提供的云服务&#xff0c;为个人收藏品目录的存储和管理提供了一个安全、便捷、跨设备的解决方案。本文将详细…

0145__Linux的capability

https://zhuanlan.zhihu.com/p/693896673 Linux的capability深入分析&#xff08;1&#xff09;_linux 设置进程capprm-CSDN博客 cap_init(3) - Linux manual page

【异常错误】Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

在运行项目的时候&#xff0c;出现了错误&#xff0c;但是却不知道为什么错误&#xff0c;因为GPU报的错误太抽象 ../aten/src/ATen/native/cuda/Indexing.cu:1239: indexSelectSmallIndex: block: [5,0,0], thread: [82,0,0] Assertion srcIndex < srcSelectDimSize failed…