当前位置: 首页 > news >正文

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判断即分支流程&#xff0c;才能进行case的多分支流程&#xff0c;才能进行for循环和while循环。 单分支流程判断 如上图所示&#xff0c;在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令&#x…...

DiffIR: Efficient Diffusion Model for Image Restoration

清华&ETH&字节&UTDhttps://github.com/Zj-BinXia/DiffIR 问题引入 IR任务和image synthesis任务不同点是IR任务本身有一个很强的低质量图片作为先验&#xff0c;所以可以不完全遵循图片生成的范式&#xff0c;本文主要在compact的IPR空间进行DM&#xff1b;本文提…...

xss一些笔记

&#xff08;乱写的一些笔记&#xff09; innerHTML只防script像是img就不会防 innerText都防 上面代码执行避免用户交互 js也可以用’‘执行 例子 alert’1‘ document.location.hash // #号后的部分&#xff0c;包括#号 document.location.host // 域名…...

以太坊网络中为什么要设置Gas上限

以太坊网络中的Gas上限&#xff08;Gas Limit&#xff09;是一个重要的机制&#xff0c;它主要出于以下几个目的&#xff1a; 防止无限循环和拒绝服务攻击&#xff08;DoS&#xff09;&#xff1a; Gas上限防止了智能合约中的无限循环&#xff0c;这可以保护网络免受恶意合约的…...

vue-cli是什么?和 webpack是什么关系?

前言 Vue CLI是Vue.js项目的官方脚手架&#xff0c;基于Node.js与Webpack构建。安装Vue CLI前需确保Node.js已安装&#xff0c;随后通过npm全局安装。Vue CLI能迅速创建和管理Vue.js项目&#xff0c;提升开发效率。而Webpack则负责资源打包&#xff0c;通过配置文件管理依赖、插…...

leetcode刷题(46-50)

算法是码农的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持写题吧。 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就可以啦…...

[渗透测试学习] 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做的消息对话框

一、目的&#xff1a;开发过程中&#xff0c;经常用到对话框&#xff0c;下面演示一个应用Adorner做的带遮盖层蒙版的控件&#xff0c;使用MainWindow的Adorner实现不需要额外定义遮盖层&#xff0c;使用Object作为参数&#xff0c;可自定义DataTemplate定制消息显示样式 二、效…...

Building wheels for collected packages: mmcv, mmcv-full 卡住

安装 anime-face-detector 的时候遇到一个问题&#xff1a;Installation takes forever #1386&#xff1a;在构建mmcv-full时卡住&#xff0c;这里分享下解决方法&#xff08;安装 mmcv 同理&#xff0c;将下面命令中的 mmcv-full 替换成 mmcv&#xff09; 具体表现如下&#x…...

可视化表单拖拽生成器优势多 助力流程化办公!

当前&#xff0c;很多企业需要实现流程化办公&#xff0c;进入数字化转型时期。要想实现这一目标&#xff0c;就需要借助更优质的平台产品。低代码技术平台是得到企业喜爱的发展平台&#xff0c;拥有可视化操作、灵活、高效、更可靠等优势特点&#xff0c;在推动企业实现流程化…...

数据集制作——语义分割前png、jpg格式标签图转yolo格式.txt文件(附代码)

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…...

机器学习课程复习——ANN

Q&#xff1a;ANN&#xff1f; 基本架构 由输入层、隐藏层、输出层等构建前馈/反馈传播 工作原理 先加权求和&#xff1a;每个神经元的输出是输入加权和的激活再送入激活函数&#xff1a;激活函数的存在使得其能够拟合各类非线性任务 联想&#xff1a;像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广告变现&#xff0c;总用户数和日活用户&#xff08;DUA&#xff09;是衡量APP价值和影响力的重要指标之一。 APP DUA过万&#xff0c;尤其是大几万时&#xff0c;通常具备了商业化价值&#xff0c;适合接入广告变现。日活1W意味着每天有1万名用户在使用这款应用&#xff…...

Shell 学习笔记 - 变量的类型 + 变量的赋值

1.6 Shell 变量的类型 Shell 变量分为四类&#xff0c;分别是 自定义变量环境变量位置变量预定义变量 根据工作要求临时定义的变量称为自定义变量&#xff1b; 环境变量一般是指用 export 内置命令导出的变量&#xff0c;用于定义 Shell 的运行环境&#xff0c;保证 Shell …...

vue播放flv格式的直播流

在ios无法播放&#xff0c;安卓可以 安装 npm install flv.js --save页面 <template><div><videoref"videoElement"style"width: 100%; height: 100%"autoplayplaysinlinemuted></video></div> </template><scr…...

Qt入门小项目 | 实现一个图片查看器

文章目录 一、实现一个图片查看软件 一、实现一个图片查看软件 需要实现的功能&#xff1a; 打开目录选择图片显示图片的名字显示图片 在以上功能的基础上进行优化&#xff0c;需要解决如下问题&#xff1a; 如何记住上次打开的路径&#xff1f; 将路径保存到配置文件中&#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之前版本的哈希方法&#xff1a;JDK 8版本的哈希方法 4、拉链法解决哈希冲突什么是拉…...

C#异步编程完全指南:async/await背后的状态机原理

# C#异步编程完全指南&#xff1a;async/await背后的状态机原理## 引言在现代软件开发中&#xff0c;异步编程已成为构建高响应、高吞吐量应用程序的基石。C# 作为一门不断演进的现代编程语言&#xff0c;从 .NET Framework 4.5 开始引入了 async 和 await 关键字&#xff0c;彻…...

从零到一:基于LLaMA-Factory的微调实战与核心参数精讲

1. 环境准备与LLaMA-Factory初探 第一次接触LLaMA-Factory时&#xff0c;我对着官方文档发呆了半小时——这个工具链实在太强大了&#xff0c;但新手很容易被各种依赖项劝退。这里分享我的踩坑经验&#xff1a;不要一上来就追求最新版本。去年12月我在RTX 3090上折腾v0.4.0时&a…...

从外卖配送看算法实战:Python+NetworkX解决简化版VRP问题

外卖配送路径优化实战&#xff1a;用PythonNetworkX解决简化版VRP问题 中午12点&#xff0c;城市里的外卖订单如潮水般涌来。配送员小张的手机上瞬间出现了8个不同方向的订单&#xff0c;他盯着地图上分散的标记点皱起了眉头——怎样才能用最短的时间送完所有外卖&#xff1f;这…...

突破信息获取壁垒:智能内容解锁工具使用指南

突破信息获取壁垒&#xff1a;智能内容解锁工具使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾遇到这样的情况&#xff1a;一篇专业的技术文章、一份重要的研究报告…...

Dify向量检索精度跃升47%的秘密(重排序Pipeline低延迟部署避坑手册)

第一章&#xff1a;Dify重排序算法精度跃升47%的核心动因解析Dify v0.12.0 引入的重排序&#xff08;Reranking&#xff09;模块并非简单叠加模型&#xff0c;而是通过三重协同优化机制实现精度质变。核心突破在于将传统单阶段打分范式升级为「语义对齐—上下文感知—动态归一化…...

Cursor+Qt5.12.12开发环境配置全攻略:从插件安装到项目构建

CursorQt5.12.12开发环境配置全攻略&#xff1a;从插件安装到项目构建 对于刚接触Qt开发或从其他IDE迁移到Cursor的开发者来说&#xff0c;配置一个高效的开发环境是首要任务。Qt5.12.12作为长期支持版本(LTS)&#xff0c;在稳定性和兼容性方面表现优异&#xff0c;而Cursor作为…...

一文讲透|一键生成论文工具:2026年最新测评与推荐大全

2026年真正好用的一键生成论文工具&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。…...

NaViL-9B图文问答入门必看:纯文本+图像理解双模式快速上手

NaViL-9B图文问答入门必看&#xff1a;纯文本图像理解双模式快速上手 1. 认识NaViL-9B多模态模型 NaViL-9B是一款原生支持多模态交互的大语言模型&#xff0c;由专业研究团队开发。它最大的特点是能同时处理纯文本问答和图片内容理解任务&#xff0c;就像一个同时精通文字和视…...

保姆级教程:用Android 12新特性为你的App打造丝滑启动页(附完整代码示例)

Android 12启动页开发实战&#xff1a;从基础配置到高级动画优化 在移动应用体验中&#xff0c;启动页作为用户接触产品的第一印象&#xff0c;其流畅度直接影响用户留存率。Android 12引入的SplashScreen API为开发者提供了标准化且高度可定制的启动解决方案&#xff0c;本文将…...

实战数据可视化:基于快马平台构建小龙虾销售趋势分析看板

实战数据可视化&#xff1a;基于快马平台构建小龙虾销售趋势分析看板 最近帮朋友的小龙虾连锁店做数据分析&#xff0c;发现传统Excel报表根本满足不了实时决策的需求。老板们需要一眼就能看懂销售趋势、口味偏好和地区差异&#xff0c;于是我尝试用InsCode(快马)平台快速搭建…...