linux笔记:shell中的while、if、for语句

在Udig软件的启动脚本中使用了while循环if语句for循环,其他内容基本都是变量的定义,所以尝试弄懂脚本中这三部分内容,了解脚本执行过程。

(1)while循环

while do循环内容如下所示,在循环中还用了expr命令和正则表达式等内容,解析符号链接来找到程序的实际路径。符号链接(Symbolic Link),也称为软链接(Soft Link),是一种特殊的文件类型,它指向另一个文件或目录,类似于Windows系统中的快捷方式。

while [ -h "$PRG" ]; dols=`ls -ld "$PRG"`link=`expr "$ls" : '.*-> \(.*\)$'`if expr "$link" : '/.*' > /dev/null; thenPRG="$link"elsePRG=`dirname "$PRG"`/"$link"fi
done

while do循环的基本结构如下所示,可以看到与python 直接简单的 while 条件: 循环体内命令 这种结构还是有一些差别。上面代码中,条件是指 -h "$PRG",这个指令用于判断变量$PRG所指向的文件是否是一个符号链接,其中**-h是一个测试运算符,专门用于检查文件是否为符号链接。这里使用了测试条件表达式**,在之后进行测试条件表达式的学习。

while [ 条件 ]; 
do# 循环体内的命令
done

循环体内循环了大量的命令,使用ls -ld命令列出了$PRG的详细信息,-d表示只列出$PRG本身的信息,而不是其内容;第二句使用expr命令结合正则表达式$ls中提取符号链接指向的目标路径。正则表达式'.*-> \(.*\)$'的含义是:匹配以 -> 结尾的字符串,并提取其后面的部分,即符号链接的目标路径,然后将其赋值给变量link。这里使用了正则表达式,在之后进行正则表达式的学习。

	ls=`ls -ld "$PRG"`link=`expr "$ls" : '.*-> \(.*\)$'`if expr "$link" : '/.*' > /dev/null; thenPRG="$link"elsePRG=`dirname "$PRG"`/"$link"fi

在循环中还嵌套另一个if判断语句。上面的第三句代码判断$link是否是一个绝对路径,其中expr "$link" : '/.*'会尝试匹配以/开头的字符串,如果匹配成功,说明$link是一个绝对路径。> /dev/null的作用是将expr命令的输出重定向到/dev/null,因为只关心匹配是否成功,而不关心输出内容。在 Linux 系统中,/dev/null 是一个特殊的文件,它没有任何数据,起着丢弃数据的作用,用于一些忽略输出或者输入的场合。 如果$link是一个绝对路径,就直接将$link赋值给$PRG,这样$PRG就更新为符号链接的实际目标路径。否则的话,dirname "$PRG"会获取$PRG所在的目录路径,然后将其与$link拼接起来,得到完整的绝对路径,并赋值给`$PRG。

(2)for循环

for循环语句遍历命令行参数,并检查其中是否有-data参数。如果有,则将变量DATA_ARG设置为true。这里的$@是一个特殊变量,它包含了脚本接收到的所有命令行参数,而每个参数会被当作一个单独的元素,依次赋值给变量ARG。这里的for循环内部又嵌套了一个if语句,用于检查当前的参数$ARG是否等于-data。其中,**[ $ARG = "-data" ]是一个测试条件表达式,用于比较$ARG和字符串-data是否相等,使用了=运算符进行字符串比较;而then DATA_ARG=true; fi**表示如果$ARG等于-data,则将变量DATA_ARG设置为true

for ARG in $@ 
doif [ $ARG = "-data" ]; then DATA_ARG=true; fi
done

for循环的基本结构如下所示:

for 变量 in 值1 值n
do# 命令
done

(3)if语句

if语句内容如下所示,其用来根据变量$DATA_ARG的值来决定执行不同的命令。第一句是用来检查变量$DATA_ARG的值,如果$DATA_ARG的值是一个非空字符串且真值,则条件为真,执行then部分的代码;如果$DATA_ARG的值为空字符串或被视为假值,则条件为假,执行else部分的代码。then部分的代码中,$PRGDIR是一个变量,表示程序所在的目录路径;$UDIGEXEC也是一个变量,表示要执行的程序名称,这两个变量组合起来形成完整的命令路径;**$@接收到的所有命令行参数会传递给$PRGDIR/$UDIGEXEC命令。else部分代码中,添加了-data ~/uDigWorkspace**传递给命令的一个额外参数,表示指定数据目录为~/uDigWorkspace

if $DATA_ARG; then $PRGDIR/$UDIGEXEC $@
else$PRGDIR/$UDIGEXEC -data ~/uDigWorkspace $@
fi

if 循环的基本结构如下所示:

if 条件
then# 命令1
else# 命令2
fi

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

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

相关文章

利用分治策略优化快速排序

1. 基本思想 分治快速排序(Quick Sort)是一种基于分治法的排序算法,采用递归的方式将一个数组分割成小的子数组,并通过交换元素来使得每个子数组元素按照特定顺序排列,最终将整个数组排序。 快速排序的基本步骤&#…

从零到一实现微信小程序计划时钟:完整教程

在本教程中,我们将一起实现一个微信小程序——计划时钟。这个小程序的核心功能是帮助用户添加任务、设置任务的时间范围,并且能够删除和查看已添加的任务。通过以下步骤,我们将带你从零开始实现一个具有基本功能的微信小程序计划时钟。 项目…

idea日常报错之UTF-8不可映射的字符

目录 一、UTF-8不可映射的字符的解决 1、出现这种报错的情形 2、具体解决办法 前言: 在我们日常代码编写的时候可能会遇到各式各样的错误,有时候并不是你改动了代码,而是莫名其妙就出现的报错,今天我就遇到一个在maven编译的时候…

人工智能技术-基于长短期记忆(LSTM)网络在交通流量预测中的应用

人工智能技术-基于长短期记忆(LSTM)网络在交通流量预测中的应用 基于人工智能的智能交通管理系统 随着城市化进程的加快,交通问题日益严峻。为了解决交通拥堵、减少交通事故、提高交通管理效率,人工智能(AI&#xff…

HTTP FTP SMTP TELNET 应用协议

1. 标准和非标准的应用协议 标准应用协议: 由标准化组织(如 IETF,Internet Engineering Task Force)制定和维护,具有广泛的通用性和互操作性。这些协议遵循严格的规范和标准,不同的实现之间可以很好地进行…

Matlab离线安装硬件支持包的方法

想安装支持树莓派的包,但是发现通过matlab安装需要续订维护服务 可以通过离线的方式安装。 1. 下载SupportSoftwareDownloader Support Software Downloader - MATLAB & Simulink 登录账号 选择对应的版本 2. 选择要安装的包 3.将下载的包copy到安装目录下 …

Django REST Framework (DRF) 中用于构建 API 视图类解析

Django REST Framework (DRF) 提供了丰富的视图类,用于构建 API 视图。这些视图类可以分为以下几类: 1. 基础视图类 这些是 DRF 中最基础的视图类,通常用于实现自定义逻辑。 常用类 APIView: 最基本的视图类,所有其…

MyBatis拦截器终极指南:从原理到企业级实战

在本篇文章中,我们将深入了解如何编写一个 MyBatis 拦截器,并通过一个示例来展示如何在执行数据库操作(如插入或更新)时,自动填充某些字段(例如 createdBy 和 updatedBy)信息。本文将详细讲解拦…

137,【4】 buuctf web [SCTF2019]Flag Shop

进入靶场 都点击看看 发现点击work会增加¥ 但肯定不能一直点下去 抓包看看 这看起来是一个 JWT(JSON Web Token)字符串。JWT 通常由三部分组成,通过点(.)分隔,分别是头部(Header&…

twisted实现MMORPG 游戏数据库操作封装设计与实现

在设计 MMORPG(大规模多人在线角色扮演游戏)时,数据库系统是游戏架构中至关重要的一部分。数据库不仅承担了游戏中各种数据(如玩家数据、物品数据、游戏世界状态等)的存储和管理任务,还必须高效地支持并发访…

【R语言】聚类分析

聚类分析是一种常用的无监督学习方法,是将所观测的事物或者指标进行分类的一种统计分析方法,其目的是通过辨认在某些特征上相似的事物,并将它们分成各种类别。R语言提供了多种聚类分析的方法和包。 方法优点缺点适用场景K-means计算效率高需…

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍

该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南,适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤,还提供了68G多套独立部署视频教程教程,针对不同硬件配置的模型选择建议,以…

Java Spring boot 篇:常用注解

Configuration 作用 Configuration 注解的核心作用是把一个类标记为 Spring 应用上下文里的配置类。配置类就像一个 Java 版的 XML 配置文件,能够在其中定义 Bean 定义和 Bean 之间的依赖关系。当 Spring 容器启动时,会扫描这些配置类,解析其…

在 Ubuntu 20.04 为 Clash Verge AppImage 创建桌面图标教程

在 Ubuntu 20.04 为 AppImage 创建桌面图标教程 一、准备工作 确保你已经下载了 xxxx.AppImage 文件,并且知道它所在的具体路径。同时,你可以准备一个合适的图标文件(.png 格式)用于代表该应用程序,如果没有合适的图…

【复现DeepSeek-R1之Open R1实战】系列6:GRPO源码逐行深度解析(上)

目录 4 GRPO源码分析4.1 数据类 GRPOScriptArguments4.2 系统提示字符串 SYSTEM_PROMPT4.3 奖励函数4.3.1 accuracy_reward函数4.3.2 verify函数4.3.3 format_reward函数 4.4 将数据集格式化为对话形式4.5 初始化GRPO Trainer 【复现DeepSeek-R1之Open R1实战】系列3&#xff1…

【杂谈】加油!!!!

为了在三月底前系统准备Java后端开发的面试和笔试,以下是分阶段的高效学习计划: 一、知识体系构建(第1-2周) 核心基础强化 Java基础(每日1.5小时): 重点掌握:JVM内存模型&#xff0…

python旅游推荐系统+爬虫+可视化(协同过滤算法)

✅️基于用户的协同过滤算法 ✅️有后台管理 ✅️2w多数据集 这个旅游数据分析推荐系统采用了Python语言、Django框架、MySQL数据库、requests库进行网络爬虫开发、机器学习中的协同过滤算法、ECharts数据可视化技术,以实现从网站抓取旅游数据、个性化推荐和直观展…

HarmonyNext上传用户相册图片到服务器

图片选择就不用说了,直接用 无须申请权限 。 上传图片,步骤和android对比稍微有点复杂,可能是为了安全性考虑,需要将图片先拷贝到缓存目录下面,然后再上传,当然你也可以转成Base64,然后和服务…

同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展

1 2025开年,人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸,不仅在国内掀起了技术热潮,并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球,这不仅重塑了产业格…

二、QEMU NFS 环境搭建

​ 在上一章节中,我们已经成功完成了内核和 busybox 环境的配置。为了进一步提高开发效率,我们可以使用 NFS(Network File System)来挂载根目录。NFS 允许我们将本地文件系统通过网络共享给虚拟机使用,这样在开发过程中…