【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功能…

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

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

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

作为一个家电工作者&#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> &…

同三维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;因此…

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

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

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;…

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;…

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

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

Unity URP下通过相机让部分Render不受后处理渲染

我们有时候不想某些对象受到后处理影响&#xff0c;找到了这样一个决绝办法&#xff0c;通过增加一个Overlay相机只照射这个模型来实现&#xff0c;下面看看如何实现。 第一步 首先我们拖一个测试场景&#xff0c;有如下一些元素 一个盒子&#xff0c;以后后处理&#xff0c…

docker部署dm数据库

官方文档参考 官网地址&#xff1a;https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html 下载镜像地址 docker部署 1、加载镜像 docker load -i dm8_20240613_x86_rh6_64_rq_ent_8.1.3.140_pack5.tar使用docker images&#xff0c;查看镜像和镜像标签…

HuggingFace烧钱做了一大批实验,揭示多模态大模型哪些trick真正有效

构建多模态大模型时有很多有效的trick&#xff0c;如采用交叉注意力机制融合图像信息到语言模型中&#xff0c;或直接将图像隐藏状态序列与文本嵌入序列结合输入至语言模型。 但是这些trick为什么有效&#xff0c;其计算效率如何&#xff0c;往往解释得很粗略或者或者缺乏充分…

Android开发系列(三)Jetpack Compose 之TextField

TextField 是一个用于接收用户输入的UI组件。它是Jetpack Compose中的一部分&#xff0c;可以方便地实现用户文本输入的功能。 TextField 允许用户输入一个或多个文本行&#xff0c;可以用于接收用户的文本输入、搜索等操作。它提供了一些常用的功能&#xff0c;如输入验证、键…

第三方仓库WMS仓储管理系统智能库存预警解决方案

在当今竞争激烈的物流市场中&#xff0c;第三方仓库扮演着连接供应链各环节的关键角色。面对不断变化的客户需求和日益严格的市场要求&#xff0c;如何提升仓库管理水平、优化库存结构、降低运营成本&#xff0c;成为了第三方仓库管理者必须面对的重要课题。在这一背景下&#…

开展“安全生产月”活动向媒体投稿的好方法找到了

作为一名单位的信息宣传员,我的职责是确保每一次重要活动的声音都能准确无误地传达到社会的每一个角落。在这样的使命驱动下,我曾一度陷入了一种传统的投稿模式——依赖电子邮件,将精心准备的稿件一封封地发送给各大媒体。初入此行,我满心以为这便是信息传播的路径,却未料到,这…

QT day4(对话框 事件机制)

1&#xff1a;思维导图 2&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->setupUi(this);//去除头部this->setWindowFlag(Qt::Frameles…

Linux中DNS搭建

文章目录 一、DNS介绍1.1、DNS是什么1.2、DNS的工作原理1.3、DNS的域名结构 二、Bind介绍2.1、bind概述2.2、bind主要配置文件 三、DNS安装四、主要配置文件解析&#xff08;除/etc/named.conf&#xff09;4.1、/etc/named.rfc1912.zones4.2、/etc/rc.d/init.d/named4.3、/etc/…

C++学习/复习15--栈与队列概述及练习/deque/适配器的概念

1.1stack概念 1.2stack函数 1.3最小栈 1.4栈的压入弹出 1.5逆波兰表达式 1.6栈实现队列 1.7层序遍历 1.8stack模拟实现 2.1queue概念 2.2queue函数 2.3queue模拟实现 3.1deque适配器 3.2deque功能 3.3deque原理 3.4deque特点与适配器