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

Shell编程:流程控制与高级应用的深入解析

目录

Shell 流程控制

1、条件语句

2、循环语句

Shell 函数

Shell 输入/输出重定向

Shell 文件包含

文件包含的示例


Shell 流程控制

使用Shell编程时,流程控制是非常重要的,它允许你根据条件执行不同的命令或者控制程序的执行流程。Shell支持一些基本的流程控制结构,包括条件语句和循环语句。

1、条件语句

if语句

if [ 条件 ]; then# 如果条件为真执行的命令
elif [ 其他条件 ]; then# 如果其他条件为真执行的命令
else# 如果所有条件都不为真执行的命令
fi

示例:

#!/bin/bash
read -p "请输入一个数字: " numif [ $num -eq 0 ]; thenecho "输入的数字是零"
elif [ $num -gt 0 ]; thenecho "输入的数字是正数"
elseecho "输入的数字是负数"
fi

2、循环语句

for循环

for 变量 in 列表; do# 循环体内的命令
done

示例:

#!/bin/bash
for fruit in apple banana cherry; doecho "水果: $fruit"
done

while循环

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

示例:

#!/bin/bash
count=1while [ $count -le 5 ]; doecho "这是第 $count 次循环"((count++))
done

until循环

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

示例:

#!/bin/bash
count=1until [ $count -gt 5 ]; doecho "这是第 $count 次循环"((count++))
done

Shell 函数

当你在Shell脚本中需要多次执行相同的代码块时,你可以使用函数来封装这些代码,以便更容易地管理和重用它们。在Shell中,你可以使用function关键字或()来定义函数。

#!/bin/bash# 定义一个简单的函数
my_function() {echo "这是一个自定义的Shell函数"
}# 调用函数
my_function

1、#!/bin/bash 表示这是一个Bash脚本。

2、my_function() 定义了一个名为my_function的函数。在函数名称后面的括号内可以包含参数,但在这个示例中,我们没有使用任何参数。

3、在函数体内,我们使用echo命令来打印一条消息。

4、最后,我们在脚本的主体部分调用了my_function函数。这会执行函数体内的代码,从而打印出相应的消息。

#!/bin/bash# 定义一个带参数的函数
greet() {local name="$1"echo "Hello, $name!"
}# 调用函数,并传递参数
greet "Alice"
greet "Bob"

在这个示例中,greet函数接受一个参数name,并在消息中使用它。我们使用greet函数两次,每次传递不同的名字作为参数。

Shell 输入/输出重定向

这些示例展示了如何使用不同的输入/输出重定向操作符来处理命令的输入和输出。你可以根据具体的需求,将这些示例中的操作符和命令组合起来使用。

1、标准输出重定向 (>) 示例:

# 将ls命令的输出写入到file.txt文件中
ls > file.txt

2、追加输出重定向 (>>) 示例:

# 将echo的输出追加到file.txt文件的末尾
echo "Hello, World!" >> file.txt

3、标准输入重定向 (<) 示例:

# 从input.txt文件中读取内容,并使用sort命令排序
sort < input.txt

4、管道 (|) 示例:

# 使用ls命令列出当前目录的文件,并将结果传递给grep命令以搜索包含"example"的行
ls | grep "example"

5、标准错误重定向 (2>) 示例:

# 运行一个不存在的命令,将错误信息保存到error.log文件中
non_existent_command 2> error.log

6、同时重定向标准输出和标准错误 (&>2>&1) 示例:

# 将命令的输出和错误信息都写入到output.log文件中
some_command &> output.log

Shell 文件包含

在Shell脚本中,你可以使用文件包含来将一个脚本分解成多个文件,以提高可维护性和代码复用。通常,你可以使用source命令或.(点号)操作符来包含其他Shell脚本文件。

文件包含的示例

脚本1.sh:

#!/bin/bash# 这是脚本1.sh的内容
echo "这是脚本1.sh"

脚本2.sh:

#!/bin/bash# 这是脚本2.sh的内容
echo "这是脚本2.sh"

现在,你可以创建一个主脚本,将这两个文件包含进来。

主脚本.sh:

#!/bin/bash# 包含脚本1.sh
source 脚本1.sh# 或者使用 . 操作符
# . 脚本1.sh# 包含脚本2.sh
source 脚本2.sh# 主脚本的内容
echo "这是主脚本"# 运行脚本1.sh和脚本2.sh中的命令

这样,你可以将一些通用的功能放在单独的脚本文件中,然后在需要的地方包含它们,以提高代码的模块化和可重用性。确保包含的脚本文件具有可执行权限,以便Shell可以执行它们。

 

相关文章:

Shell编程:流程控制与高级应用的深入解析

目录 Shell 流程控制 1、条件语句 2、循环语句 Shell 函数 Shell 输入/输出重定向 Shell 文件包含 文件包含的示例 Shell 流程控制 使用Shell编程时&#xff0c;流程控制是非常重要的&#xff0c;它允许你根据条件执行不同的命令或者控制程序的执行流程。Shell支持一些基…...

一文讲通嵌入式现状

近年来&#xff0c;随着计算机技术和集成电路技术的迅速发展&#xff0c;嵌入式技术在通讯、网络、工控、医疗、电子等领域日益普及&#xff0c;并发挥着越来越重要的作用。嵌入式系统已成为当前最为热门和前景广阔的IT应用领域之一。 随着信息化、智能化、网络化的不断推进&am…...

设计模式-代理模式Proxy

代理模式Proxy 代理模式 (Proxy)1) 静态代理1.a) 原理解析1.b) 使用场景1.c) 静态代理步骤总结 2) 动态代理2.a) 基于 JDK 的动态代理实现步骤2.b) 基于 CGLIB 的动态代理实现步骤2.c) Spring中aop的使用步骤 代理模式 (Proxy) 代理设计模式&#xff08;Proxy Design Pattern&…...

如何使用CSS实现一个自适应等高布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Flexbox 布局⭐ 使用 Grid 布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发…...

Google colab部署VITS——零门槛快速克隆任意角色声音

目录 序言 查看GPU配置 复制代码库并安装运行环境 选择预训练模型 上传视频链接&#xff08;单个不应长于20分钟&#xff09; 自动处理所有上传的数据 训练质量相关&#xff1a;实验发现目前使用CJ模型勾选ADD_AUXILIARY&#xff0c;对于中/日均能训练出最好的效果&#x…...

14 | Spark SQL 的 DataFrame API 读取CSV 操作

sales.csv 内容 date,category,product,full_name,sales 2023-01-01,Electronics,Laptop,John Smith,1200.0 2023-01-02,Electronics,Smartphone,Jane Doe,800.0 2023-01-03,Books,Novel,Michael Johnson,15.0 2023-01-04,Electronics,Tablet,Emily Wilson,450.0 2023-01-05,B…...

redis面试题二

redis如何处理已过期的元素 常见的过期策略 定时删除&#xff1a;给每个键值设置一个定时删除的事件&#xff0c;比如有一个key值今天5点过期&#xff0c;那么设置一个事件5点钟去执行&#xff0c;把它数据给删除掉&#xff08;优点&#xff1a;可以及时利用内存及时清除无效数…...

虚拟现实(VR)和增强现实(AR)

虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;和增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;是两种前沿的计算机技术&#xff0c;它们正在改变人们与数字世界的互动方式。虚拟现实创造了一个计算机生成的全新虚拟环境&#xff0c;而增…...

如何使用ChatGPT提词器,看看这篇文章

ChatGPT提词器是一种强大的自然语言处理工具&#xff0c;可以帮助你提高创造性写作的效率和质量。本教程将向您介绍如何使用ChatGPT提词器&#xff0c;以获得有趣、吸引人的文章、故事或其他文本内容。 步骤1&#xff1a;访问ChatGPT提词器 首先&#xff0c;确保您已经访问了…...

vue3-vuex持久化实现

vue3-vuex持久化实现 一、背景描述二、实现思路1.定义数据结构2.存值3.取值4.清空 三、具体代码1.定义插件2.使用插件 四、最终效果 一、背景描述 有时候我们可能需要在vuex中存储一些静态数据&#xff0c;比如一些下拉选项的字典数据。这种数据基本很少会变化&#xff0c;所以…...

详解 SpringMVC 的 @RequestMapping 注解

文章目录 1、RequestMapping注解的功能2、RequestMapping注解的位置3、RequestMapping注解的value属性4、RequestMapping注解的method属性5、RequestMapping注解的params属性&#xff08;了解&#xff09;6、RequestMapping注解的headers属性&#xff08;了解&#xff09;7、Sp…...

类的静态成员变量 static member

C自学精简教程 目录(必读) 类的静态成员 static member 变量全局只有一份副本&#xff0c;不会随着类对象的创建而产生副本。 static 静态成员 在类的成员变量前面增加static关键字&#xff0c;表示这个成员变量是类的静态成员变量。 #include <iostream> using name…...

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

文章目录 1 准备工作1.1 下载源码1.2 测试集下载2 配置环境3 dtu数据集 重建演示3.1 重建效果查看4 补充解释4.1 bash 脚本文件超参数解释4.2 lists/dtu解释5 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗…...

Linux系统Ubuntu以非root用户身份操作Docker的方法

本文介绍在Linux操作系统Ubuntu版本中&#xff0c;通过配置&#xff0c;实现以非root用户身份&#xff0c;进行Docker各项操作的具体方法。 在文章Linux系统Ubuntu配置Docker详细流程&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/132612560&#xff0…...

m4s格式转换mp4

先安装 ffmpeg&#xff0c;具体从官网可以查到&#xff0c;https://ffmpeg.org&#xff0c;按流程走。 转换代码如下&#xff0c;可以任意选择格式导出 import subprocess import osdef merge_audio_video(input_audio_path, input_video_path, output_mp4_path):# 构建 FFmpe…...

SQL sever中库管理

目录 一、创建数据库 1.1库界面方式 1.2SQL命令方式 二、修改数据库 2.1库界面方式 2.2SQL命令方式 三、删除数据库 3.1库界面方式 3.2SQL命令方式 四、附加和分离数据库 4.1附加和分离数据库概述 4.2作用 4.3附加和分离数据库方法 4.4示例 一、创建数据库 1.1库…...

模板方法模式简介

概念&#xff1a; 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤延迟到子类中实现。该模式通过在抽象类中定义一个模板方法来控制算法的流程&#xff0c;并使用具体方法来实现其中的某些步骤。 特点&#xff1a; 定义了一个算…...

自动化运维工具-------Ansible(超详细)

一、Ansible相关 1、简介 Ansible是自动化运维工具&#xff0c;基于Python开发&#xff0c;分布式,无需客户端,轻量级&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能&#xff0c;ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是a…...

计算机毕设 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要…...

Citespace、vosviewer、R语言的文献计量学 、SCI

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...