Linux Shell脚本中的变量和流程控制

news2024/11/23 12:38:39

Linux Shell脚本中的变量和流程控制

Linux Shell脚本是一种方便的自动化工具,它可以帮助我们完成各种复杂任务。在本文中,我们将详细介绍Shell脚本中的变量和流程控制语句,以及如何使用它们编写高效、可读性强的脚本。

https://image.baidu.com/search/detail?ct=503316480&z=undefined&tn=baiduimagedetail&ipn=d&word=Linux%20Shell&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=undefined&hd=undefined&latest=undefined&copyright=undefined&cs=2812537524,3237249650&os=3061806688,3426950554&simid=4240442422,819455717&pn=0&rn=1&di=7214885350303334401&ln=767&fr=&fmq=1688355119667_R&fm=&ic=undefined&s=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&is=0,0&istype=0&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=1e&objurl=https%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farchive%2Fcaf7feb16c03ee43c95e205585d7be40298d536b.jpg&rpstart=0&rpnum=0&adpicid=0&nojc=undefined&dyTabStr=MTEsMCwxLDYsNCw1LDMsNyw4LDIsOQ%3D%3D

变量

在Shell脚本中,变量是用来存储和引用数据的容器。变量名由字母、数字和下划线组成,但不能以数字开头。

定义变量

在Shell脚本中,可以使用等号(=)定义变量。变量名和等号之间不能有空格。

name="John Doe"
age=30

引用变量

要引用变量,可以在变量名前加上美元符号($)。引用变量时,可以将变量名放在双引号(")或单引号(')中。双引号内的变量会被扩展,而单引号内的则不会。

echo "My name is $name and I am $age years old."
echo 'My name is $name and I am $age years old.'

输出:

My name is John Doe and I am 30 years old.
My name is $name and I am $age years old.

变量操作

  1. 字符串拼接:
string1="Hello, "
string2="world!"
combined_string="$string1$string2"
echo $combined_string

输出:

Hello, world!
  1. 字符串长度:
string="Hello, world!"
length=${#string}
echo "The length of the string is $length."

输出:

The length of the string is 13.
  1. 字符串截取:
string="Hello, world!"
substring=${string:7:5}
echo "The substring is '$substring'."

输出:

The substring is 'world'.

流程控制语句

流程控制语句用于控制脚本的执行顺序。常见的流程控制语句有:if-then-else、case、for、while、until等。

if-then-else语句

if-then-else语句用于根据条件执行不同的代码块。

number=5

if [ $number -lt 10 ]; then
    echo "The number is less than 10."
elif [ $number -eq 10 ]; then
    echo "The number is equal to 10."
else
    echo "The number is greater than 10."
fi

输出:

The number is less than 10.

注意,测试条件需要用方括号([ ])括起来,且方括号之间需要有空格。

case语句

case语句用于根据变量值执行不同的代码块。

fruit="apple"

case $fruit in
    "apple")
        echo "It's an apple."
        ;;
    "banana")
        echo "It's a banana."
        ;;
    *)
        echo "It's something else."
        ;;
esac

输出:

It's an apple.

for循环

for循环用于重复执行某段代码。

for i in {1..5}; do
    echo "Iteration $i"
done

输出:

Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5

while循环

while循环在满足条件时重复执行某段代码。

i=1
while [ $i -le 5 ]; do
    echo "Iteration $i"
    i=$((i + 1))
done

输出:

Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5

until循环

until循环在不满足条件时重复执行某段代码。

i=1
until [ $i -gt 5 ];do
    echo "Iteration $i"
    i=$((i + 1))
done

输出:

Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5

总结

本文详细介绍了Linux Shell脚本中的变量和流程控制语句,以及如何使用它们编写高效、可读性强的脚本。通过掌握这些基本概念,您将能够更加熟练地使用Shell脚本完成各种任务。当然,Shell脚本的功能远不止这些,还有许多高级特性等待您去探索和学习。

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

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

相关文章

【LeetCode热题100】打卡第31天:买卖股票的最佳时机二叉树中的最大路径和

文章目录 【LeetCode热题100】打卡第31天:买卖股票的最佳时机&二叉树中的最大路径和⛅前言 买卖股票的最佳时机🔒题目🔑题解 二叉树中的最大路径和🔒题目🔑题解 【LeetCode热题100】打卡第31天:买卖股票…

Hello Vue3

一、为什么要学vue3 vue官网:https://cn.vuejs.org/api/ 这是vue官网的简介,说vue2在23年年底就停止维护了,将来会拥抱vue3,这是事务发展的一个必然趋势。 二、vue3相比于vue2做了哪些方面的改进和优化 以下是Vue3相比于Vue2的一些改进和…

DAY37:贪心算法(四)跳跃游戏+跳跃游戏Ⅱ

文章目录 55.跳跃游戏思路完整版总结 45.跳跃游戏Ⅱ思路完整版为什么next覆盖到了终点可以直接break,不用加上最后一步逻辑梳理 总结 55.跳跃游戏 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃…

weui 密码二次检查校验

检验规则里rules[]增加: equalTo:需要匹配一致的字段名 我这第一个密码是:USR_PWD,第二个密码是:USR_PWD2,让第二个等于第一个就可以了: equalTo:USR_PWD 效果:

MIT 6.S081 教材第七章内容 -- 调度 --下

MIT 6.S081 教材第七章内容 -- 调度 -- 下 引言调度多路复用代码:上下文切换代码:调度代码:mycpu和myprocsleep与wakeup代码:sleep和wakeup代码:Pipes代码:wait, exit和kill真实世界练习 引言 MIT 6.S081 …

0基础学习VR全景平台篇 第54篇: 高级功能-皮肤

功能位置示意 一、本功能将用在哪里? 皮肤功能,摆脱传统VR全景展示样式,自行选择场景与全景分组的界面模板,从而与不同的应用行业风格相互适应,达到最贴切的展示效果。 是在各种风格的VR全景作品中,最快实…

C++ DAY5

1.全局变量,int monster 10000;定义英雄类hero,受保护的属性string name,int hp,int attck;公有的无参构造,有参构造,虚成员函数 void Atk(){monster-0;},法师类继承自英雄类,私有属…

前端web入门-移动web-day09

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 空间转换 空间转换 – 平移 视距 perspective 空间 – 旋转 立体呈现 – transform-style 空间转换…

Docker学习笔记16

在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享。 容器管理数据有两种方式: 1)数据卷:容器内数据直接映射到本地主机环境; 2)数据卷容器:…

服务器远程管理工具Xshell安装及使用,传输文件工具安装及使用

两个软件 Xshell 双击输入用户名和密码 也可以通过密钥的方式 怎么生成密钥还没做过 Xftp 一边主机一边服务器,相互拖动就行了

【C#】并行编程实战:实现数据并行(3)

本章继续学习实现数据并行,本文主要介绍取消循环。 本教程对应学习工程:魔术师Dix / HandsOnParallelProgramming GitCode 4、取消循环 在顺序循环中,可以使用 break 来跳出循环,而在并行循环的情况下,由于他…

Unity协程

unity提供了一种类似“多段代码并行执行”的功能,即协程。 我们在定义一个协程的时候,需要遵循类似这样的语法 IEnumerator(枚举器接口) namespace System.Collections {public interface IEnumerator{object Current { get; }/…

卷积神经网络--猫狗系列【VGG16】

数据集:【文末】 ​ 数据集预处理 定义读取数据辅助类(继承torch.utils.data.Dataset) import osimport PILimport torchimport torchvisionimport matplotlib.pyplot as pltimport torch.utils.dataimport PIL.Image # 数据集路径train_p…

哈希桶的增删查改简单实现

个人简单笔记。 目录 闭散列 开散列 插入 删除 查找 改变 什么是哈希桶呢?这是一个解决哈希数据结构的一种解决方法,在STL中的unorder_map与unorder_set的底层结构就是使用它来实现的。 闭散列 首先我们知道,哈希映射表是依据数组下…

CSS画特殊边框

例如如图所示边框 .card-middle {width: 672px;height: 486px;border: 1px solid #5fadec;border-radius: 5px;position: relative; }.card-middle::before {content: ;position: absolute;top: -4px;left: -4px;width: 680px;height: 448px;border: 25px solid transparent;b…

【Python】PIL.Image转QPixmap后运行异常的个人解决方法

问题场景: PIL.Image图片,直接调用PIL.Image.toqpixmap()转成QPixmap后,不会立即报错,   但后续使用该QPixmap时(包括但不仅限于使用QLabel.setPximap()、QPixmap.save())将立即出现异常 不知道是我关键词不对,还是只…

【数据结构与算法】文学语言助手(C\C++)

实践要求 1. 问题描述 文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为"文学研究助手"。 2. 基本要求 英文小说存于文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必需在…

linux常用命令介绍 06 篇——Linux查看目录层级结构以及创建不同情况的层级目录

linux常用命令介绍 06 篇——Linux查看目录层级结构以及创建不同情况的层级目录 1. 前言1.1 Linux常用命令其他篇1.2 关于tree简介 2. 安装并使用 tree2.1 安装tree2.1.1 方式1:yum安装2.1.2 方式2:下载安装包安装2.1.2.1 下载安装包2.1.2.2 解压安装2.1…

transformer入坑指南

*免责声明: 1\此方法仅提供参考 2\搬了其他博主的操作方法,以贴上路径. 3* 场景一: Attention is all you need 场景二: VIT 场景三: Swin v1 场景四: Swin v2 场景五: SETR 场景六: TransUNet 场景七: SegFormer 场景八: PVT 场景九: Segmeter … 场景一:Attention…

Spring Boot 中的 Spring Cloud Ribbon:什么是它,原理及如何使用

Spring Boot 中的 Spring Cloud Ribbon:什么是它,原理及如何使用 在分布式系统中,服务之间的通信是非常重要的。在大型的分布式系统中,有许多服务需要相互通信,而这些服务可能会部署在多个服务器上。为了实现服务之间…