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

shell编程lesson06

流控制 while 和 until 循环

#!/bin/bash# while-count:display a series of numbersi=1
while [ $i -le 5 ];doecho $ii=$((i+1))
done
echo "Finished!"

while命令的语法结构如下:

while commands;do commands;done

我们可以使用while循环改进上一节中的菜单驱动程序

#!/bin/bash# while-menu: a menu driven system information programDELAY=3 # Number of seconds to display resultswhile [[ $REPLY != 0 ]];doclearcat <<- _EOF_Please Select:1.Display System Information2.Display Disk Space3.Display Home Space Utilization0.Quit_EOF_read -p "Enter selection [0-3] > "if [[ $REPLY =~ ^[0-3]$ ]];thenif [[ $REPLY == 1 ]];thenecho "Hostname: $HOSTNAME"uptimesleep $DELAYfiif [[ $REPLY == 2 ]];thendf -hsleep $DELAYfiif [[ $REPLY == 3 ]];thenif [[ $(id -u) == 0 ]];thenecho "Home Spsce Utilization(All Users)"du -sh /home/*elseecho "Home Space Utilization($USER)"du -sh $HOMEfisleep $DELAYfielseecho "Invalid entry" >&2sleep $DELAYfi
done
echo "Program terminated."

        将菜单封装到while循环内,程序可以在用户每次选择后重复展示菜单项。只要REPLY值不为0,重复循环,展示菜单项,给用户又一次进行选择的机会。

        而在每次动作结束时,系统执行sleep命令使程序暂停几秒,让用户能看到选择执行的结果,随后程序清空屏幕显示并再次展示菜单项。

        一旦REPLY值为0,也就意味着用户选择了推出项,循环终止,程序进一步执行done之后的代码。

跳出循环

bash提供了两种可控制循环内部程序流的内建命令。

break

break命令立即终止循环,程序从循环体后的语句开始执行;

continue

continue命令则会导致程序跳过本次循环剩余的部分,进入下一次新的循环迭代。

#!/bin/bash# while-menu: a menu driven system information programDELAY=3 # Number of seconds to display resultswhile true;doclearcat <<- _EOF_Please Select:1.Display System Information2.Display Disk Space3.Display Home Space Utilization0.Quit_EOF_read -p "Enter selection [0-3] > "if [[ $REPLY =~ ^[0-3]$ ]];thenif [[ $REPLY == 1 ]];thenecho "Hostname: $HOSTNAME"uptimesleep $DELAYcontinuefiif [[ $REPLY == 2 ]];thendf -hsleep $DELAYcontinuefiif [[ $REPLY == 3 ]];thenif [[ $(id -u) == 0 ]];thenecho "Home Spsce Utilization(All Users)"du -sh /home/*elseecho "Home Space Utilization($USER)"du -sh $HOMEfisleep $DELAYcontinuefiif [[ $REPLY == 0 ]];thenbreakfielseecho "Invalid entry" >&2sleep $DELAYfi
done
echo "Program terminated."

        以上版本的菜单驱动构建了一个无限循环,利用true命令向while提供退出状态。因为true退出时状态总为0,所以循环永远也不会停止。这是一个常见的脚本技术。

        因为循环永远也不会自动停止,所以需要程序员提供在适当的时刻跳出循环的方式。当用户选择为0时,脚本使用break命令来终止循环。

        为了使脚本执行更加高效,可以在其他选项执行末端使用continue。在确认用户做出了选择后,continue让脚本跳过了不需要执行的代码。例如,用户选择了1,那么就没必要再验证其他选项了。

until

while命令退出状态不为0时终止循环,而until命令则刚好相反。until命令在退出状态是0的时候终止循环。

#!/bin/bash# until-count:display a series of numberscount=1until [[ $count -gt 5 ]];doecho $countcount=$((count + 1))
done
echo "Finished."

选择使用while还是until,通常取决于哪种循环能够允许程序员写出最明了的测试表达式。

使用循环读取文件

        while和until可以处理标准输入,这让使用while和until循环处理文件成为可能。

#!/bin/bash# while-read: read lines from a filewhile read distro version release;doprintf "Distro:%s\tVersion:%s\tReleases:%s\n" \$distro \$version \$release
done < distros.txt

为将一份文件重定向到循环中,我们可在done语句之后添加重定向操作符。循环使用read命令读取重定向文件中的字段。

在到达文件末端之前,退出状态皆为0。在读取过文件中的最后一行后,read命令退出,此时退出状态变为非0,循环终止。

        将标准输出重定向到循环中也是可以的!

#!/bin/bash# while-read2:read lines from a filesort -k 1,1 -k 2n distros.txt | while read distro version release;doprintf "Distro:%s\tVersion:%s\tReleased:%s\n" \$distro \$version \$release
done

需要注意的是因为管道是在子shell中进行循环操作。当循环终止时,循环内部新建的变量或者对变量的赋值效果都会丢失

相关文章:

shell编程lesson06

流控制 while 和 until 循环 #!/bin/bash# while-count:display a series of numbersi1 while [ $i -le 5 ];doecho $ii$((i1)) done echo "Finished!"while命令的语法结构如下&#xff1a; while commands;do commands;done 我们可以使用while循环改进上一节中的…...

国内免费可用的ChatGPT网页版

ChatGPT 一、ChatGPT是个啥&#xff1f;二、16个国内免费的ChatGPT网站。三、ChatGPT使用方式 一、ChatGPT是个啥&#xff1f; chat&#xff1a;表示“聊天”。 GPT&#xff1a;则是Generative、Pre-trained、Transformer的缩写&#xff0c;表示“预训练语言模型”&#xff0…...

用同样的关键词测试不同的人工智能

测试词汇&#xff1a;用“电商、接口、店群”写一篇关于API接口的推广软文 返回结果&#xff1a; 人工智能1&#xff1a; 电商行业已经进入了全面数字化转型的时代&#xff0c;而API接口技术正是数字化转型的重要组成部分。随着移动端、小程序等终端越来越普及&#xff0c;A…...

shell变量类型含义 长方形面积计算 截取相应字段方法

1.总结变量的类型及含义&#xff1f; 2.实现课堂案例计算长方形面积&#xff1f;&#xff08;6种方式&#xff09; 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815&#xff08;通过多种方法实现&#xff09; 1&#xff09;截取网站访问的协议 …...

Java:从单线程计数器到多线程数据同步synchronized和原子类Atomic

目录 使用单线程使用多线程使用多线程 synchronized使用多线程 原子类AtomicLong 使用单线程 单线程修改计数器的值&#xff0c;没有发生问题&#xff0c;每次运行结果都是10000&#xff0c;不过程序耗时较长 package com.example;/*** 计数器*/ class Counter {private st…...

提前进入行业顶尖阵营:高性能计算实习的竞争优势

如今就业越来越内卷&#xff0c;尤其是计算机行业更是如此。加上GPT以及大模型的加持&#xff0c;各大企业纷纷降本增效&#xff0c;普通程序员逐渐失去竞争力。想要在竞争激烈的就业市场中脱颖而出&#xff0c;提前进入行业顶尖阵营是一个明智的选择。而高性能计算实习将为您提…...

Java程序设计入门教程--标识符和关键字

目录 标识符 标识符的约定 标识符 1. 定义 用来标识类名&#xff0c;变量名&#xff0c;方法名&#xff0c;类型名&#xff0c;数组名&#xff0c;文件名的有效序列称为标识符。简单地说&#xff0c;标识符就是一个名字。 2. 标识符命名规则 &#xff08;1&#xff09;大小…...

国产IC芯片自动化测试系统ATECLOUD,助力芯片测试自动化

IC芯片测试成本是影响制造和加工成本的重要因素。在某些情况下&#xff0c;测试成本可能占到器件总成本的40%左右。为了降低测试成本&#xff0c;可以优化测试程序并研发多工位测试。同时&#xff0c;必须平衡良品率和测试时间&#xff0c;以实现最佳的成本控制。本篇文章纳米软…...

BeanFactory和ApplicationContext有什么区别?

BeanFactory和ApplicationContext有什么区别&#xff1f; BeanFactory和ApplicationContext有什么区别&#xff1f; BeanFactory和ApplicationContext有什么区别&#xff1f; BeanFactory (轻量级) 和ApplicationContext(高级特性和框架)是Spring的两大核心接口&#xff0c;都…...

js的BOM对象中的window、location使用

说明&#xff1a;BOM的全称是Browser Object Model&#xff0c;浏览器对象模型&#xff0c;有Window&#xff08;浏览器窗口&#xff09;、Navigator&#xff08;浏览器&#xff09;、Screen&#xff08;屏幕&#xff09;、History&#xff08;历史记录&#xff09;和Location&…...

DAY 68 redis高可用的主从复制、哨兵、cluster集群

Redis 高可用 什么是高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供正常服…...

leetcode 1209 学会删除字符串

删除字符串的经典kotlin操作&#xff1a; val mTemp (temp.text).replace(Regex("℃"),"") 以下是题目&#xff01; 1209. 删除字符串中的所有相邻重复项 II 提示 中等 174 相关企业 给你一个字符串 s&#xff0c;「k 倍重复项删除操作」将会从 s…...

JavaScript6

一、概念 ES6是JavaScript语言的标准。 新特性&#xff1a;let和const命令、变量的解构赋值、字符串函数对象数组等扩展。 环境准备&#xff1a;需要安装NodeJs。 二、新特性 1、let let命令用来声明变量。他的用法类似var&#xff0c;但所声明的变量&#xff0c;只在let命令…...

轻松安装Redis:不用担心配置问题

一、Centos安装Redis 1.安装 EPEL 源 Redis 不在 CentOS 官方仓库中&#xff0c;需要安装 EPEL 源才能访问到 Redis 软件包。运行以下命令安装 EPEL 源&#xff1a; sudo yum install epel-release 2.安装 Redis 使用以下命令安装 Redis&#xff1a; sudo yum install re…...

ChatGPT学习研究总结

目录 ChatGPT研究总结 一、程序接入用途不大 二、思考&#xff1a;如何构建一个类似ChatGPT的自定义模型 一些ChatGPT研究学习资料&#xff08;来源网络&#xff09; &#xff08;1&#xff09;一文读懂ChatGPT模型原理 &#xff08;2&#xff09;MATLAB科研图像处理——…...

SpringBoot枚举入参实战

文章目录 前言一、什么是枚举&#xff1f;二、枚举的优点三、枚举的缺点四、使用步骤1.代码实现1.1.枚举1.2.实体1.3.控制层 2.Postman测试2.1.Get请求2.1.1.枚举参数2.1.2.对象枚举属性参数 2.2.Post请求2.2.1.枚举参数2.2.2.对象枚举属性参数 2.3.Put请求2.3.1.枚举参数2.3.2…...

Ansible介绍

文章目录 Ansible介绍Ansible的架构为什么要有Ansible TowerAnsible Tower Ansible介绍 Ansible是一种自动化工具&#xff0c;可以用于自动化部署、配置和管理IT基础设施。它是一种基于Python的开源软件&#xff0c;提供了一个简单易用的语言和工具集&#xff0c;使得自动化管…...

GPT-4的免费使用方法分享

目录 方法1&#xff1a;使用Ora.sh的LLM应用 方法2&#xff1a;使用https://steamship.com 方法3&#xff1a;使用https://nat.dev 方法4&#xff1a;http://tdchat.vip 方法5&#xff1a;使用Poe网站或App 方法6&#xff1a;使用 Opencat App 方法7:使用https://Huggin…...

一个产品的诞生

一个产品的诞生 一个产品的诞生通常需要经历多个阶段&#xff0c;包括市场调研、产品设计、原型制作、测试和生产等。在市场调研阶段&#xff0c;公司会了解消费者的需求和市场趋势&#xff0c;以确定产品的定位和特点。在产品设计阶段&#xff0c;设计师会根据市场调研结果和…...

MQTT与传统的HTTP协议对比,优势在哪里呢?

HTTP是应用最为广泛和流行的协议。但是MQTT在过去的几年里迅速取得了进展。在讨论物联网开发的时候&#xff0c;开发者必须在这两者之间作出选择。 MQTT集中于数据&#xff0c;而HTTP集中于文档。HTTP是一个用于客户端-服务器计算的请求-响应协议&#xff0c;它并非总是为移动设…...

PyTorch 2.8模型可视化艺术:使用Visio绘制神经网络架构图

PyTorch 2.8模型可视化艺术&#xff1a;使用Visio绘制神经网络架构图 1. 为什么需要专业的模型可视化 在深度学习项目中&#xff0c;一个清晰直观的模型架构图往往比千言万语更有说服力。想象一下&#xff0c;当你需要向团队展示新设计的Transformer变体&#xff0c;或者在论…...

Graphormer模型推理加速:利用.accelerate库优化计算性能

Graphormer模型推理加速&#xff1a;利用.accelerate库优化计算性能 1. 引言&#xff1a;为什么需要加速Graphormer推理 Graphormer作为图神经网络领域的重要突破&#xff0c;在分子属性预测、药物发现等任务中展现出强大能力。但随着分子库规模扩大&#xff0c;推理速度成为…...

S2-Pro集成Python爬虫实战:自动化数据采集与智能分析应用

S2-Pro集成Python爬虫实战&#xff1a;自动化数据采集与智能分析应用 1. 引言&#xff1a;当爬虫遇上大模型 最近帮一家电商公司做市场调研时&#xff0c;遇到了一个典型问题&#xff1a;他们需要监控竞品价格和用户评价&#xff0c;但手动收集数据效率太低。传统爬虫能抓取数…...

伏羲天气预报可信AI:预报结果置信度输出、不确定性传播与可视化

伏羲天气预报可信AI&#xff1a;预报结果置信度输出、不确定性传播与可视化 1. 引言&#xff1a;天气预报&#xff0c;我们到底能信多少&#xff1f; “明天会下雨吗&#xff1f;”这是我们每天都会问的问题。传统的天气预报会告诉你一个概率&#xff0c;比如“降水概率70%”…...

all-MiniLM-L6-v2效果展示:实测文本相似度计算,准确率惊艳

all-MiniLM-L6-v2效果展示&#xff1a;实测文本相似度计算&#xff0c;准确率惊艳 1. 模型能力概览 all-MiniLM-L6-v2作为轻量级语义嵌入模型的代表&#xff0c;在保持高效推理的同时&#xff0c;展现出令人惊喜的文本理解能力。这个基于BERT架构的模型通过知识蒸馏技术&…...

5步搞定:Z-Image-Turbo_UI界面LoRA使用教程,轻松玩转多种画风

5步搞定&#xff1a;Z-Image-Turbo_UI界面LoRA使用教程&#xff0c;轻松玩转多种画风 作为一名AI绘画工具的重度使用者&#xff0c;我深知新手最需要的是什么——不是复杂的参数解释&#xff0c;而是简单明了的操作指南。今天要介绍的Z-Image-Turbo_UI界面&#xff0c;可能是你…...

效率翻倍:利用Streamlit界面快速A/B测试,找到最佳转换参数组合

效率翻倍&#xff1a;利用Streamlit界面快速A/B测试&#xff0c;找到最佳转换参数组合 1. 为什么需要参数A/B测试 在2.5D转真人的图像转换任务中&#xff0c;参数组合的选择直接影响最终效果。传统的命令行工具需要反复修改配置文件并重启服务&#xff0c;效率极低。而Anythi…...

OpenClaw智能搜索:Qwen3.5-9B支持的知识检索与摘要

OpenClaw智能搜索&#xff1a;Qwen3.5-9B支持的知识检索与摘要 1. 为什么需要智能搜索助手 作为一个经常需要查阅技术文档的研究者&#xff0c;我每天要花大量时间在不同平台间切换——打开浏览器搜索、翻阅PDF论文、在GitHub仓库里找示例代码。最头疼的是&#xff0c;当需要…...

从手机芯片到AI芯片:NoC拓扑结构怎么选?(Mesh、Torus、树形对比指南)

从手机芯片到AI芯片&#xff1a;NoC拓扑结构选型实战指南 当你在设计一款边缘AI芯片时&#xff0c;面对数十个需要高效协同的计算单元&#xff0c;最令人头疼的问题之一就是&#xff1a;如何选择片上网络(NoC)的拓扑结构&#xff1f;这个问题看似简单&#xff0c;实则牵一发而动…...

线性代数实战:特征值与二次型的核心应用解析

1. 特征值与特征向量的实战密码 第一次接触特征值和特征向量时&#xff0c;我也觉得这不过是数学课本里的抽象概念。直到在图像压缩项目中亲眼看到&#xff0c;用前20%的特征向量就能还原90%的图像信息&#xff0c;才真正理解它的威力。特征值分解就像给矩阵做X光&#xff0c;能…...