【shell脚本速成】for 嵌套和和 if 高级用法

在这里插入图片描述

文章目录

    • 一、for嵌套
    • 二、for与数组
    • 三、if高级用法
      • 3.1、条件符号使用双圆括号,可以在条件中植入数学表达式 if (())
      • 3.2、使用双方括号,可以在条件中使用通配符
    • 四、简写if
    • 五、与文件存在与否的判断
    • 六、课后练习

🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨

一、for嵌套

1.1、for嵌套if

案例:
输出1-9,当输出5时停止输出

案例代码

#!/bin/bash
# 
#Author: www.zutuanxue.com
#Created Time: 
#Release: 
#Description:输出1-9,当输出5时停止输出for ((num=1;num<10;num++))doecho $num[ $num -eq 5 ]&& break
done

1.2、for嵌套for
案例:
打印99乘法表

案例代码

#!/bin/bash
# 
#Author: www.zutuanxue.com
#Created Time: 
#Release: 
#Description: 
#打印99乘法表,思考A*B的关系
for ((A=1;A<=9;A++))dofor ((B=1;B<=$A;B++))doecho -n -e "$B*$A=$((A*B)) \t"done#换行echo 
done

二、for与数组

for循环与数组

2.1、使用for循环遍历读出数组

name=('tom' 'jarry' 'harry' 'barry')
for i in 0 1 2 3doecho ${name[$i]}done

2.2、使用for循环进行数组存值

for i in `seq 0 9`doread -p "name: " name[$i]doneecho ${name[@]}

三、if高级用法

3.1、条件符号使用双圆括号,可以在条件中植入数学表达式 if (())

#!/bin/bash
#Author: www.zutuanxue.com
#Created Time:
#Script Description: if (( (5+5-5)*5/5 > 10 ))thenecho "yes"
elseecho "no"
fi

3.2、使用双方括号,可以在条件中使用通配符

通过代码看下 ,为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串

#!/bin/bash
#Author: www.zutuanxue.com
#Created Time: 
#Script Description: 
for var in  ab ac rx bx rvv vtdoif [[ "$var" == r* ]]thenecho "$var"fi
done

四、简写if

省去了关键字,条件为真采用&&符号链接命令块,条件为假采用||链接命令块

简写if一般用在简单的判断中

if [ ! -d /tmp/baism ]thenmkdir /tmp/baism
fi可以简写为[ ! -d /tmp/baism ] && mkdir /tmp/baismif [ $USER == 'root' ]thenecho "hello root"
elseecho "hello guest"
fi可以简写
[ $USER == 'root' ]&&echo "hello root" || echo "hello guest"

if是一个条件判断语句,判断的前提是得有个条件。
接下来我给大家演示一下如何在if条件中植入shell运算条件

五、与文件存在与否的判断

-e	是否存在   不管是文件还是目录,只要存在,条件就成立
-f	是否为普通文件
-d	是否为目录
-S	socket
-p	pipe
-c	character
-b	block
-L	软link
  • 文件权限相关的判断
-r	当前用户对其是否可读
-w	当前用户对其是否可写
-x	当前用户对其是否可执行
-u	是否有suid
-g	是否sgid
-k	是否有t位
  • 两个文件的比较判断
file1 -nt  file2	比较file1是否比file2新	
file1 -ot  file2 	比较file1是否比file2旧
file1 -ef  file2	比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode
  • 整数之间的判断
-eq	相等
-ne	不等
-gt	大于
-lt	小于
-ge   大于等于
-le	小于等于浮点比较运算
比较两个浮点数字的大小
给脚本两个浮点数字   返回他两的关系#思路
1、获得两个浮点数字
2、处理为整形
3、比较
4、输出
  • 字符串之间的判断
-z  是否为空字符串   		字符串长度为0,就成立
-n  是否为非空字符串    	只要字符串非空,就是成立
string1 == string2 		是否相等
string1 != string2 		不等#用户登录验证[root@zutuanxue ~]# cat if-6.sh 
#!/bin/bash
#1、交互式输入用户名 密码
read -p "user: " myuser
if [ -z "$myuser" ];thenecho "用户名为空"exit 1
fi#从外往里写
read -p "password: " mypw
if [ -n "$mypw" ];then#2、判断是否正确#2.1 判断用户名if [ $myuser == "root" ];then#2.2判断密码if [ $mypw == "abc-123" ];thenecho "welcome root"elseecho "密码错误"exit 1fielseecho "用户名错误"exit 1fi		elseecho "密码不能为空"exit 1
fi
  • 多重条件判断
逻辑判断符号:
&&  	(and 逻辑与) 		两个条件同时满足,整个大条件为真
||	(or 逻辑或)		两个条件满足任意一个,整个大条件为真
! 	非运算#用户登录验证
[root@zutuanxue ~]# cat if-6.sh 
#!/bin/bash
#1、交互式输入用户名 密码
read -p "user: " myuser
if [ -z "$myuser" ];thenecho "用户名为空"exit 1
fi#从外往里写
read -p "password: " mypw
if [ -n "$mypw" ];then#2、判断是否正确#2.1 判断用户名#if [ $myuser == "root" ];then#2.2判断密码# if [ $mypw == "abc-123" ];then#	   echo "welcome root"#else#	   echo "密码错误"#	   exit 1#   fi##else#	echo "用户名错误"#	exit 1#fi		if [ $myuser == 'root' ] && [ $mypw == 'abc-123' ];thenecho "welcome root"elseecho "用户名或密码错误"exit 1fielseecho "密码不能为空"exit 1
fi

六、课后练习

练习题1、判断/tmp/tyschool目录,如果没有则创建它
练习题2、判断是否有/usr/bin/wget命令,没有则安装他
练习题3、判断当前用户是否为管理员,UID为0或者为root都算管理员
练习题4、打印物理内存使用率

✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 我在CSDN等你哦!我的主页😍

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

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

相关文章

【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】

文章目录 SVE 汇编语法SVE 单通道谓词SVE 测试代码SVE 软件和库支持SVE 编译参数配置-march=armv8-a+lse+profile+memtag+sve2-aes+sve2-bitperm+crypto+sve2+sve2-sha3+sve2-sm4SVE 汇编语法 在介绍 SVE 汇编指令语法之前,先介绍下如何判断自己所使用的芯片是否实现了SVE功能…

web前端开发哪个城市:探索最佳发展地

web前端开发哪个城市&#xff1a;探索最佳发展地 在数字化浪潮席卷全球的今天&#xff0c;Web前端开发作为互联网行业的核心技能之一&#xff0c;其发展前景日益广阔。然而&#xff0c;对于许多有志于投身这一领域的年轻人来说&#xff0c;选择哪个城市作为起点&#xff0c;却…

记java生产项目中线程池使用的一点总结

背景 最近项目中有很多使用线程池进行处理的地方&#xff0c;同时也碰到了几个问题比如线程池的个数该怎么评估&#xff0c;线程程的该怎么具体去使用&#xff0c;结合项目和实际场景得到一些理解 使用多线程的三种方式 设定多线程数量 通过指定核心和最大线程数大于1的方式…

JY-156/1静态电压继电器 板前接线 约瑟JOSEF

JY-150系列电压继电器适用于继电保护线路中&#xff0c;作为过电压保护或低电压闭锁的动作元件。 该产品采用集成电路原理构成&#xff0c;它克服了原来电磁型电压继电器触点易抖动&#xff0c;工作时噪音大&#xff0c;动作值、返回值难调整及运输后动作值易变等缺点&#xff…

Dubbo 3.x源码(23)—Dubbo服务引用源码(6)MigrationRuleListener迁移规则监听器

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的服务引入的总体流程&#xff0c;以及Dubbo服务引用bean的获取以及懒加载原理。当然真正的服务远程引入、以及配置迁移啥的都还没讲&#xff0c;MigrationRuleListener#onRefer方…

什么洗地机好用又实惠?四大口碑优品推荐,超级火爆

作为一个家电工作者&#xff0c;近年来测评了不少洗地机&#xff0c;相对于传统的清洁习惯&#xff0c;即先扫地&#xff0c;再拖地&#xff0c;洗地机能够在一拖一拉之间&#xff0c;便完成地面上的清洁&#xff0c;而且人们也不用低头弯腰的去清洁&#xff0c;可谓是省时省力…

【单片机毕业设计选题24013】-基于STM32的城市垃圾分类引导系统

系统功能: 1、系统具有语音识别功能&#xff0c;可以对厨余垃圾、其他垃圾、有害垃圾、可回收垃圾进行语音识别&#xff1b; 2、系统可根据语音识别结果直接开启对应类别的垃圾桶&#xff0c;引导分类投放&#xff1b; 3、系统具有语音播报功能&#xff0c;可以语音播报出识…

使用 swiper 轮播 echarts 图表,地图点击失效

问题 使用 swiper 轮播 echarts 图表&#xff0c;地图点击失效&#xff0c;伪代码如下 <Swiper><SwiperSlide>...</SwiperSlide>// 轮播中有地图<SwiperSlide><EchartsMap/></SwiperSlide><SwiperSlide>...</SwiperSlide> &…

Java学习 - MySQL常用性能优化 + Explain查看执行计划

常用性能优化方式 服务器硬件优化&#xff1a;加机器&#xff0c;加内存MySQL服务器优化&#xff1a;更改参数&#xff0c;增加缓冲等等SQL本身优化&#xff1a;减少子查询&#xff0c;减少连接查询的使用反范式设计优化&#xff1a;为了减少连接查询使用&#xff0c;可以允许…

同三维TT806-1 USB单路网络视频流/U盘采集卡

同三维TT806-1 USB单路网络视频流/U盘采集卡 (1路网络音视频信号或U盘直播推流器) 支持采集1路网络视频流或U盘音视频信号&#xff0c;USB输出到电脑 同时还可流推2个直播平台&#xff0c;可设置6组定时推流&#xff0c;有线网络 可录像到U盘&#xff0c;支持定时录像 一…

05 部署YUM软件仓库

5.1部署YUM软件仓库 5.1.1准备网络安装源 YUM软件仓库通常借助于HTTP或FTP协议来发布&#xff0c;这样可以面向网络中的所有客户机提供软件源服务。 1.准备软件仓库目录 在Center 7 系统的安装光盘中&#xff0c;已针对软件目录Packages建立好repodata数据&#xff0c;因此…

input标签删除文件之后再次上传同一文件无法触发change

HTML<input type"file" accept".pdf" id"upload-btn" />jsdocument.getElementById(upload-btn).addEventListener(change, function (e) {const file e.target.files[0]; }); 修改&#xff1a; //删除文件document.querySelector(#demo…

Web前端仿项目:探索实践之路

Web前端仿项目&#xff1a;探索实践之路 在Web前端领域&#xff0c;仿项目是一种常见且有效的学习方式。通过模仿已有的项目&#xff0c;我们可以深入了解前端技术的实际应用&#xff0c;提升自己的实践能力。然而&#xff0c;如何有效地进行Web前端仿项目&#xff0c;却是一个…

【向量检索】之向量数据库Milvus,Faiss详解及应用案例

Reference https://www.modb.pro/db/509268 笔记︱几款多模态向量检索引擎&#xff1a;Faiss 、milvus、Proxima、vearch、Jina等 - 知乎 (zhihu.com) 向量数据库入坑指南&#xff1a;聊聊来自元宇宙大厂 Meta 的相似度检索技术 Faiss - 苏洋的文章 - 知乎 常用的三种索引方…

shiny实现点击跳转下一个标签栏

在 Shiny 应用中实现点击按钮跳转到下一个标签栏&#xff0c;可以使用 shiny 的内置函数 updateTabsetPanel 来控制标签栏的切换。以下是一个简单的示例代码&#xff0c;演示了如何通过点击按钮来跳转到下一个标签栏&#xff1a; library(shiny)ui <- fluidPage(titlePanel…

fastapi修改docs文档页面favicon.ico图标

如下图&#xff0c;文档页面默认使用的是tiangolo大神的Logo 如果打开的标签比较多&#xff0c;就不好区分了&#xff0c;想要修改这个logo&#xff0c;可以用fastapi-cdn-host一行代码搞定 fastapi_cdn_host.patch_docs(app, favicon_url/static/logo.png) 例如&#xff1a;…

macbook pro 鼠标键 导致键盘失灵

问题 关闭鼠标键之后 所有键盘还是不可用&#xff08;开关机键除外&#xff09; 解决 开机按住commands进入单用户模式exit重启电脑

react-2 jsx的学习

1.什么是JSX&#xff1f; 概念&#xff1a;JSX就是Javascript和XML&#xff08;HTML&#xff09;的缩写&#xff0c;表示在js代码中编写HTML模板结构&#xff0c;它是React中编写UI模板的方式&#xff0c;如下图就是jsx: 优势&#xff1a;1.HTML的声明式模板写法&#xff1b;…

IDEA GIt 提交提示 “Contents are identica“

当前问题的描述 IDEA 中使用 Git 提交代码时候, 会发现出现在变动列表只用, 文件本身是蓝色的, 也代表文件有改变&#xff0c;但比较上一次的版本和本地版本是一致的, 显示 no difference 并且显示 Contents are identica, 即内容无改变, 但是文件还是蓝色的; 此时拉取代码, 如…

铠侠全面复产:NAND价格还会涨吗?

近期&#xff0c;日本经济新闻&#xff08;Nikkei&#xff09;报道指出&#xff0c;经历长达20个月的产能削减后&#xff0c;全球第四大三维NAND闪存制造商铠侠已全面恢复生产。这一转变不仅标志着铠侠再次全力投入到市场份额的争夺中&#xff0c;也可能预示着闪存市场价格即将…