shell中的流程控制
条件判断在流程控制中的重要性
有了条件判断才能进行if判断即分支流程,才能进行case的多分支流程,才能进行for循环和while循环。
单分支流程判断

如上图所示,在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令,这种一次性执行多条命令的格式与使用管道符来操作还不一样,
使用管道符来操作多条命令的话,每一条命令都需要去执行,但是如果使用分支语句和英文逗号的话,并不一定每一条命令都需要去执行。

单分支语句的执行顺序如上图所示,如果条件为真的话,就执行下面一条语句,如果条件为假的话,就跳过需要执行的语句,执行下一条语句。

如上图所示,先执行cd /home/atguigu/ 再执行ls -l
这样的操作形式常用于if [ 需要判断的条件语句 ] ; then echo OK ; fi
即如果 [ 需要判断的条件语句 ]为真的话,就去执行then与fi之间的语句,如果 [ 需要判断的条件语句 ]为假的话,就跳过then 与fi之间的语句,去执行下一条语句。
这样if [ 需要判断的条件语句 ] ; then 条件为真的时候执行的语句; fi 的语句,即每一条命令并不是一定要去执行。

如上图所示,当我们在脚本中编写分支语句的时候,就需要使用字符串的一个拼接的操作,
因为在实际调用脚本的时候可能要传入的参数为空,这时因为向表达式中传入的参数为空就会报错,所以要进行如上图的·字符串的拼接的操作。

如上图所示,在编写脚本之后,记得使用chmod +x 脚本名称,给脚本加上可执行的权限,当然这里不指定属主,属组,其他用户的话,就默认给全部用户加上对此文件的可执行权限。

如上图所示,是将分支语句跟逻辑与和逻辑或结合起来的语句操作。
if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK;fi
如上图所示,if [ $a -gt 18 ] && [ $a -lt 35 ]; 条件为真的话,就执行then 之间的语句 fi
如果条件为假,就不进行输出打印的操作。
if [ $a -gt 18 -a $a -lt 35 ];表示判断这个参数的数值是否在[ $a -gt 18 -a $a -lt 35 ]区间内,如果在这个区间内就打印OK,如果不在这个区间内就不进行打印输出的操作,
if [ $a -gt 18 -o $a -lt 35 ];表示这个参数的数值满足上述两个条件就可以,就继续执行之后的then fi 语句,
多分支流程判断

如上图所示,是一个多分支语句示例和一个单分支语句示例,在单分支中必须保证中括号中的不能为空,不然报错,即使不传入参数,也应该保证中括号内有字符,
在多分支语句中,
if [ $2 -lt 18 ]
then
echo "未成年人"
else
echo "成年人"
fi
如上所示,如果if中的条件为真的话,就执行then 语句一 否则的话就执行 else 语句二 fi

如上图所示,这是一个调用可执行脚本中的多分支语句的示例。

如上图所示,是一个多分支语句,
if [ 条件判断式 ]
then
程序
elif [条件判断式]
then
程序
else
程序
fi

如上图所示,
if [ $2 - lt 18 ]
then
echo "未成年人"
elif [ $2 -lt 35 ]
then
echo "青年人"
elif [ $2 -lt 60 ]
then
echo "中年人"
else
echo "老年人"
fi
如上图所示,在shell编程中的分支语句中每一个执行语句都需要使用then作为一个前提。

shell编程中的case语句

如上图所示,*)之后的语句表示default语句,即默认语句。

如上图所示,这是在shell编程中实际应用case语句的一个案例,
当输入脚本的参数是1时执行语句1,当输入脚本的参数是2时执行语句2,当输入脚本的参数是3时执行语句3,
当输入脚本的参数是意外情况时,就执行default语句,

shell编程中的for循环
对于for循环来说如果想进入for循环中就必须要使用一个条件判断,当条件判断为真时就进入循环,当条件判断为假时就不进入循环。

for循环中((初始值;循环控制条件;变量变化))
do
程序
done

如上图所示,这是一个for循环示例,当在使用变量的时候必须要在变量的前面加上一个$f的符号,
即sum=$sum + $i但是此时在shell中加法是不能够直接去运用的必须要将这个加和的操作放在中括号内部。
可以在脚本的内部再加上一句echo $sum这样的语句,对最后的结果进行打印输出。

如上图所示,就是调用加和脚本并且对脚本传递参数的结果。

如上图所示,在shell编程中可以在双小括号中正常的使用一些数学上的符号。就不必使用那些复杂的-le这样的运算符了。

如上图所示,在shell编程中使用双小括号可以将数学上的符号正常使用,if ((表达式正确)); then 当表达式正确的时候需要执行语句 ; else 当表达式不正确的时候需要执行的语句。

如上图所示,是在shell中调用for循环的另外一种形式。

如上图所示,是对for循环的一个基本调用,
在shell中大括号的作用是表示一个序列,比如{1..100}这样的形式就表示1-100的序列。

如上图所示,是一个求和的for循环。


如上图所示,编写脚本赋予其执行权限,被引号引起来的$*和$@的作用是不同的,而没有被引号引起来的$*和$@的作用是相同的,都是将获取到的参数区分对待。

如上图所示,这是一个通过使用$*和$@来接收参数从而实现for循环的一个案例。
shell编程中的while循环

如上图所示,与for循环不同的是,在shell编程的while循环中,我们需要在while循环外面进行变量的初始化,在do done之间进行变量的调整。

如上图所示,这是在使用for循环和while循环完成的1-100的加和,
首先在for循环中
for ((i=1; i <= $1; i++))
do
sum=$[ $sum + $i ]//在shell编程中如果想让数学运算符正常生效的话,就需要使用$[ ]如果想调用变量的话,就需要在变量名前面加上$的符号。
done
echo $sum
其次在while循环中
a=1
while [ $a -le $1 ]
do
sum2=$[ $sum2 + $a ]
a=$[ $a + 1 ]//对进入循环的变量的调整。
done
echo $sum2

如上图所示,这是一个实现1-100加和的while循环,
let sum2+=a
let a++
这样let的操作就可以将shell编程中一些比较反人类的运算符的操作,简化一些。
read读取控制台的输入(交互式操作)


如上图所示,这是在创建一个交互式的输入,read -t表示等待用户等待的时间,
-p表示指定读取值时的提示符(这里的提示符可以用引号括起来): 接收参数的变量
echo $变量 对变量的打印输出

相关文章:
shell中的流程控制
条件判断在流程控制中的重要性 有了条件判断才能进行if判断即分支流程,才能进行case的多分支流程,才能进行for循环和while循环。 单分支流程判断 如上图所示,在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令&#x…...
DiffIR: Efficient Diffusion Model for Image Restoration
清华Ð&字节&UTDhttps://github.com/Zj-BinXia/DiffIR 问题引入 IR任务和image synthesis任务不同点是IR任务本身有一个很强的低质量图片作为先验,所以可以不完全遵循图片生成的范式,本文主要在compact的IPR空间进行DM;本文提…...
xss一些笔记
(乱写的一些笔记) innerHTML只防script像是img就不会防 innerText都防 上面代码执行避免用户交互 js也可以用’‘执行 例子 alert’1‘ document.location.hash // #号后的部分,包括#号 document.location.host // 域名…...
以太坊网络中为什么要设置Gas上限
以太坊网络中的Gas上限(Gas Limit)是一个重要的机制,它主要出于以下几个目的: 防止无限循环和拒绝服务攻击(DoS): Gas上限防止了智能合约中的无限循环,这可以保护网络免受恶意合约的…...
vue-cli是什么?和 webpack是什么关系?
前言 Vue CLI是Vue.js项目的官方脚手架,基于Node.js与Webpack构建。安装Vue CLI前需确保Node.js已安装,随后通过npm全局安装。Vue CLI能迅速创建和管理Vue.js项目,提升开发效率。而Webpack则负责资源打包,通过配置文件管理依赖、插…...
leetcode刷题(46-50)
算法是码农的基本功,也是各个大厂必考察的重点,让我们一起坚持写题吧。 遇事不决,可问春风,春风不语,即是本心。 我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦…...
[渗透测试学习] Runner-HackTheBox
Runner-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -v 10.10.11.13扫描结果如下 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.18.0 (Ubuntu) 8000…...
keil5显示内存和存储占用百分比进度条工具
简介 [Keil5_disp_size_bar] 以进度条百分比来显示keil编译后生成的固件对芯片的内存ram和存储flash的占用情况, 并生成各个源码文件对ram和flash的占比整合排序后的map信息的表格和饼图。 原理是使用C语言遍历当前目录找到keil工程和编译后生成的map文件 然后读取工程文件和m…...
示例:推荐一个应用Adorner做的消息对话框
一、目的:开发过程中,经常用到对话框,下面演示一个应用Adorner做的带遮盖层蒙版的控件,使用MainWindow的Adorner实现不需要额外定义遮盖层,使用Object作为参数,可自定义DataTemplate定制消息显示样式 二、效…...
Building wheels for collected packages: mmcv, mmcv-full 卡住
安装 anime-face-detector 的时候遇到一个问题:Installation takes forever #1386:在构建mmcv-full时卡住,这里分享下解决方法(安装 mmcv 同理,将下面命令中的 mmcv-full 替换成 mmcv) 具体表现如下&#x…...
可视化表单拖拽生成器优势多 助力流程化办公!
当前,很多企业需要实现流程化办公,进入数字化转型时期。要想实现这一目标,就需要借助更优质的平台产品。低代码技术平台是得到企业喜爱的发展平台,拥有可视化操作、灵活、高效、更可靠等优势特点,在推动企业实现流程化…...
数据集制作——语义分割前png、jpg格式标签图转yolo格式.txt文件(附代码)
💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…...
机器学习课程复习——ANN
Q:ANN? 基本架构 由输入层、隐藏层、输出层等构建前馈/反馈传播 工作原理 先加权求和:每个神经元的输出是输入加权和的激活再送入激活函数:激活函数的存在使得其能够拟合各类非线性任务 联想:像adaboosting的加权求…...
C++回溯算法(2)
棋盘问题 #include<bits/stdc.h> using namespace std; void func(int,int); bool tf(int,int); void c(); int n,k; char a[110][110]; int cnt20; int main() {cin>>n>>k;for(int i0;i<n;i){for(int j0;j<n;j){cin>>a[i][j];}}func(0,0);cout…...
流量有限、日活低的APP适合对接广告变现吗?
APP广告变现,总用户数和日活用户(DUA)是衡量APP价值和影响力的重要指标之一。 APP DUA过万,尤其是大几万时,通常具备了商业化价值,适合接入广告变现。日活1W意味着每天有1万名用户在使用这款应用ÿ…...
Shell 学习笔记 - 变量的类型 + 变量的赋值
1.6 Shell 变量的类型 Shell 变量分为四类,分别是 自定义变量环境变量位置变量预定义变量 根据工作要求临时定义的变量称为自定义变量; 环境变量一般是指用 export 内置命令导出的变量,用于定义 Shell 的运行环境,保证 Shell …...
vue播放flv格式的直播流
在ios无法播放,安卓可以 安装 npm install flv.js --save页面 <template><div><videoref"videoElement"style"width: 100%; height: 100%"autoplayplaysinlinemuted></video></div> </template><scr…...
Qt入门小项目 | 实现一个图片查看器
文章目录 一、实现一个图片查看软件 一、实现一个图片查看软件 需要实现的功能: 打开目录选择图片显示图片的名字显示图片 在以上功能的基础上进行优化,需要解决如下问题: 如何记住上次打开的路径? 将路径保存到配置文件中&#x…...
qt仿制qq登录界面
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {// 设置窗口大小this->resize(window_width, window_heigth);// 固定窗口大小this->setFixedSize(window_width, window_heigth);// 设置窗口图标this->se…...
HashMap详解(含动画演示)
目录 HashMap1、HashMap的继承体系2、HashMap底层数据结构3、HashMap的构造函数①、无参构造②、有参构造1 和 有参构造2 (可以自定义初始容量和负载因子)③、有参构造3(接受一个Map参数)JDK 8之前版本的哈希方法:JDK 8版本的哈希方法 4、拉链法解决哈希冲突什么是拉…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
