Shell脚本 循环语句、函数、数组

news/2024/7/4 21:09:18/文章来源:https://blog.csdn.net/m0_65551023/article/details/139953951

目录

Shell循环语句

概念

for循环

语法格式

批量创建用户并设置初始密码示例

批量删除用户示例操作步骤

巡检测试主机连通性示例

while循环

语法格式

批量创建、删除用户示例

随机数

控制随机数范围

0 ~ 999

0 ~ 99

0 ~ 9

使用while和随机数实现猜价格示例

until循环

语法格式

示例

脚本调试

Shell函数

概念

类型

无参函数

函数内变量的作用范围

递归函数

阶乘案例

数组

命令示例

命令总结


Shell循环语句

概念

重复执行一段代码,直到满足特定条件为止

循环语句是Shell脚本中的一种控制结构,用于重复执行一段代码块。通过循环,可以在满足特定条件的情况,反复执行相同或类似的任务。

通过合理使用循环语句,可以简化脚本编写,提高代码的可读性和效率。


for循环

语法格式

  • i 是一个变量,在循环过程中会依次取取值列表中的每一个值。,每次迭代时,i 都会被赋予当前列表中的一个值。
  • (取值列表) 是一组值,可以是具体的字符串、数值,或是通过命令产生的一组值。注意,实际使用时不需要括号,例如:for i in users.list
  • do 表示开始一个代码块,代码块中的代码将在循环的每次迭代中执行一次。
  • done 标志着for循环的结束

批量创建用户并设置初始密码示例

新建取值列表文件

写入要新建用户的名称

因为for循环运行时是 以行为单位取值的,所以每个对象单独占用一行

新建脚本文件

添加如下内容

给该脚本添加执行权

查看用户信息文件

可以看到列表中的用户都被创建出来了

批量删除用户示例操作步骤

修改脚本文件内容,使用 userdel -r 删除用户以及该用户的家目录,并丢弃输出信息

运行脚本,查看文件,刚才创建的用户也没有了

巡检测试主机连通性示例

和刚才一样,首先需要一个存放IP地址的主机列表

新建编辑脚本文件添加如下内容

使用 bash 命令测试脚本


while循环

特点:不需要取值列表,但是容易进入死循环

 

语法格式

  • 条件 是一个表达式,通常涉及变量和比较操作符,例如 $i -lt 10($i 小于 10)。
  • 当条件为真(非零)时,do后面的命令序列会被执行;否则循环终止。

批量创建、删除用户示例

新建编辑脚本文件,内容如下

其中的 ${PRE}$i 表示拼接变量的值,使用 ${ } 大括号是为了明确变量的范围

如果你直接写 $PRE$i bash解释器会尝试解析 名为 PREi 的变量

测试脚本,查看系统存储用户账号信息的文件

 

修改脚本内容为批量删除

运行脚本并查看 /etc/passwd 文件

随机数

在 0 ~ 32767 范围内随机一个数字,总数有32768个

控制随机数范围

用 $RANDOM 变量做取余运算

0 ~ 999

如果想控制$RANDOM变量在 0 ~ 999 的范围内随机

如果要包含1000 就和1001取余,以此类推

0 ~ 99

0 ~ 9

使用while和随机数实现猜价格示例

添加如下内容到脚本中

测试结果


until循环

until:直到

直到型循环

语法格式

满足条件退出,不满足条件循环代码块

示例

创建脚本并添加如下内容

测试结果


脚本调试

在脚本中加入 set -x 指定开始调试模式和关闭调试模式的代码区域

测试结果

常用参数

说明

set -x

将执行脚本内容输出到终端上

set -n

读取脚本但不执行,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会报错

set -v

在执行脚本时,先将脚本的内容输出到终端上然后执行该脚本,如果有错误,也会给出错误提示


Shell函数

概念

Shell函数是一组在 Shell 脚本中定义的命令序列,可以在脚本中多次调用。函数允许封装一些特定的功能或任务,并根据需要重复利用。在 Shell 脚本中使用函数可以提高代码的可读性、复用性和维护性。

类型

  • 带参函数
  • 无参函数

无参函数

新建一个测试脚本来编写函数

定义两个函数 并在脚本内通过函数名调用指定函数

测试结果

在无参函数中添加位置参数

通过在无参函数的代码块内加入位置参数,也可以实现有参函数的效果

函数内变量的作用范围

在函数内部使用 local 变量名 来定义局部变量

递归函数

在函数内部调用本函数

阶乘案例


数组

数组是一种用于存储多个数值或字符串的数据结构

多个数据的集合,按顺序排列起来就构成了一个数组

命令示例

声明一个数组

输出数组内数据的个数

输出数组中指定索引(下标)的数据

索引(下标)从0开始

遍历输出数组中每个值(每个值是单独的字符串)

输出整个数组的值(将所有值整合为一个字符串)

数组切片,从第几位下标开始输出,输出的个数

替换输出时指定值的下标值为88

需要注意的是实际数组的数据没有被替换,只是输出的时候改变

删除数组中指定下标的值

使用 unset 命令删除指定数组

命令总结

命令

说明

array=(val1 val2 val3)

声明名为array的数组并赋值

echo ${#数组名[@]}

输出数组中数据个数

echo ${数组名[@]}

遍历输出数组所有内容,每个值都是单独的字符串

echo ${数组名[*]}

将所有值合为一整个字符串并输出数组所有内容,

echo ${数组名[下标]}

输出数组中执行下标的值

echo ${数组名[@]:开始下标:个数}

从第几位下标开始输出,输出的个数

echo ${数组名[@]/被换值/新值}

在输出时,指定数组中某个值替换为指定的值。不会影响实际数据

unset 数组名[下标]

删除数组中指定下标的值

unset 数组名

删除指定数组

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

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

相关文章

docker将容器打包提交为镜像,再打包成tar包

将容器打包成镜像可以通过以下步骤来实现。这里以 Docker 为例,假设你已经安装了 Docker 并且有一个正在运行的容器。 1. 找到正在运行的容器 首先,你需要找到你想要打包成镜像的容器的 ID 或者名字。可以使用以下命令查看所有正在运行的容器&#xff…

八、yolov8模型预测和模型导出(目标检测)

模型查看 模型预测 模型导出 模型训练完成后,找到训练文件生成文件夹,里面包含wights、过程图、曲线图。 模型预测 1、在以下文件夹中放入需要预测的图; 2、找到detect文件下的predict.py文件,修改以下内容。 3、右键点击…

BL104应用在智慧零售多协议采集监控远程实时查看

在智慧零售领域,如今的市场竞争日益激烈,传统的零售模式已经难以满足消费者对服务和体验的高需求。智能化技术的引入,尤其是基于物联网的解决方案,成为提升零售业务效率和服务质量的关键。钡铼BL104 Modbus转MQTT网关作为一种先进…

JSAPI微信支付提示缺少total_fee

微信小程序云开发中使用微信支付。莫名其妙的报错: 这个报错严重图文不符,驴唇不对马嘴,难排查,很恶心。 原因可能是: 1、在微信支付中关联appid; 2、在小程序云开发控制台中授权:

keepalived高可用,LVS+keepalived的实现

概述: keepalived是集群高可用的一个技术,它是一个软件,与网络技术中VRRP协议的实现相类似,都是在若干个服务集群后虚拟出的一个对外提供服务的VIP(Virtual IP),即虚拟IP,当某一台服务器发生故障时&#x…

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长,电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中,如何高效、准确地获取并分析数据,以洞察市场趋势、优化运营策略、提升用户体验,成为电商企业面临的重要挑…

AI Workflow的敏捷开发:持续创新与优化的艺术

在人工智能的浪潮中,AI Workflow作为大模型落地的关键实践,正逐渐成为技术领域的新宠。然而,随着技术的发展,我们面临着一系列挑战,如何有效地应对这些挑战,实现AI Workflow的敏捷开发,成为了一…

手把手AI实战(四)让图片开口说话

一、成果展示 1.1 原始图片 1.2 合成的视频 二、步骤拆解 提供一张带完整人脸的图片,系统能够根据音频(或者根据输入文本生成音频)合成视频,也就是AI数字人。 本篇实战使用的AI平台是hedra,网址是:https://…

监督学习(二)线性分类

每个样本都有标签的机器学习称为监督学习。根据标签数值类型的不同,监督学习又可以分为回归问题和分类问题。分类和回归是监督学习的核心问题。 回归(regression)问题中的标签是连续值。分类(classification)问题中的标签是离散值。分类问题根据其类别数量又可分为…

代码随想录算法训练营第四十一天| 416. 分割等和子集

416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i0;i<nums.length;i){sum nums[i];}if(sum%2!0){return false;}int weight sum /2;// int[][] dp new int[nums.length][weig…

越复杂的CoT越有效吗?Complexity-Based Prompting for Multi-step Reasoning

Complexity-Based Prompting for Multi-step Reasoning 论文&#xff1a;https://openreview.net/pdf?idyf1icZHC-l9 Github&#xff1a;https://github.com/FranxYao/chain-of-thought-hub 发表位置&#xff1a;ICLR 2023 Complexity-Based Prompting for Multi-step Reason…

【Matlab】CNN-LSTM分类 卷积神经网络-长短期记忆神经网络组合模型(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/89466499 分类算法资源合集&#xff1a;https://download.csdn.net/download/vvoennvv/89466519 目录 Matlab SVM支持向量机分类算法 Matlab RF随机森林分类算法 Matlab RBF径向基神经网络分类算法 Ma…

韩顺平0基础学java——第28天

p569-591 坦克大战&#xff01;&#xff08;绘图监听事件线程文件处理&#xff09; 绘图 绘图原理 Component类提供了两个和绘图相关最重要的方法: 1. paint(Graphics g)绘制组件的外观 2. repaint()刷新组件的外观。 当组件第一次在屏幕显示的时候,程序会自动的调用paint()…

通过 Setapp 使用 240 多款 Mac 生产力工具以及 GPT-4o

Setapp 是一项革命性的订阅服务&#xff0c;可以使用 240 多款 Mac 应用程序的综合套件&#xff0c;并配有强大的人工智能助手。 通过 Setapp 为你的工作效率和生产力增添魔力。 Setapp 官网&#xff1a;访问&#xff08;提供 7 天试用&#xff09; Setapp 的主要功能 AI 助手…

Python爬取中国福彩网彩票数据并以图表形式显示

网页分析 首先打开中国福彩网&#xff0c;点击双色球&#xff0c;选择往期开奖栏目 进入栏目后&#xff0c;选定往期的奖金数目作为我们想要爬取的目标内容 明确目标后&#xff0c;开始寻找数据所在的位置 鼠标右击页面&#xff0c;打开网页源代码&#xff0c;在源代码中搜索…

临时关闭Windows安全中心

在使用WindowsOS是&#xff0c;微软安全中心是我们必不可少的安全防护&#xff0c;但有时我们也会产生想要将其关闭的需求&#xff0c;下面将要介绍如何临时关闭Windows的安全中心 一、打开安全中心、选择“病毒与威胁防护”&#xff0c;点击“管理设置” 之后将其实时保护关闭…

Linux企业实时同步服务---3688字

实时同步服务 正常的互联网公司架构&#xff1a; 内容&#xff1a;每天服务器及服务器上的应用程序等正常使用&#xff08;每天查看&#xff09;比如&#xff1a;邮件&#xff0c;短信&#xff0c;等信息&#xff1b;巡检内容是否正常使用。互联网公司就是底层服务开发、代码运…

C++ (week8):数据库

文章目录 一、数据库简介1.数据库2.MySQL(1)数据库的结构(2)MySQL的三种使用方式(3)命令行(4)Navicat Premium 二、SQL1.SQL (Structured Query Language)&#xff0c;即结构化查询语言2.数据定义语言 DDL (Data Definition Language) &#xff0c;创建、修改、删除数据库、表结…

QT listView的简单使用

本文章实现了添加数据&#xff0c;插入数据及删除和清空。用到了Qmessage做为消息提示。lineEdit用于数据的收入&#xff0c;lable用来显示所选中的数据位置的索引。具体代码如下&#xff1a;

go gin web服务器使用fvbock/endless优雅地重启或停止

gin使用fvbock/endless gin 正常使用注册路由时&#xff1a; package mainimport "github.com/gin-gonic/gin"func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong",})})r.Run()…