shell 脚本之 函数与数组

简介: shell 脚本之 函数与数组

一,函数

(一)函数基本知识

1,函数的形成

在编写脚本时,有些脚本可以反复使用,可以调用函数来解决

语句块定义成函数约等于别名

2,函数使用方法

先定义函数

再使用函数        

3,函数基本格式(三种)

第一种(最常用):

函数名(){

命令序列

}

第二种:

function 函数名 {

命令序列

}

第三种:

function func_name () {

...函数体...

}

4,注意事项

  1. 直接写 函数中调用函数 直接写函数名
  2. 同名函数 后一个生效
  3. 调用函数一定要先定义
  4. 每个函数是独立

5,函数例子

(二)查看函数

declare   -r   看所有函数

declare   -f   看所有函数详细情况

declare   -f   跟函数名    看指定函数详细情况

(三)删除函数

unset 对应函数名

(四)函数的返回值return

1,含义

return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

2,使用原则

  1. 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
  2. 退出码必须是0-255,超出的值将为除以256取余

3,return 用法

(五)函数的传参数

函数后面可以  接位置变量

(六)使用函数文件

我们可以新建一个专门存放函数的文件

开头先执行 这个文件

后面就可以调用里面的函数

(七)函数的作用范围

1,函数变量会影响 当前环境

2,因此需要把变量 固定在函数里面 local

(八)函数和 定义变量

1,定义变量

做定义变量 脚本里直接使用

2,函数

做函数时 脚本要先写 color 先调用

(九)检测ip 是否合法

二,函数递归

函数调用自己本身的函数

自己调用自己, 看成 有条件的死循环

(一)函数递归定义

1.函数调用自己本身的函数

2.必须要有结束函数的语句,防止死循环

如  func  () {  echo $i;echo "run fast";let i++;func;  }

这就是个病毒,会不断调用自己

(二)阶乘

阶乘就是1x2x3x4x5x6x7x8....xn

1,for 循环写阶乘

2, 函数写阶乘

例如  5的阶   1x2x3x4x5    就是4的阶乘以5

       6的阶    1x2x3x4x5x6      就是5的阶乘以6

所以把以上两个值作为变量

三,数组

(一)数组定义

可以理解为变量的集合

1,变量与数组

  • 变量:存储单个元素的内存空间
  • 数组:存储多个元素的连续的内存空间,相当于多个变量的集合

2,数组名和索引

  • 索引的编号从0开始,属于数值索引
  • 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持

  • 定义关联数组 ,一定要先声明  declare

  • bash的数组支持稀疏格式(索引不连续)

(二)定义数组格式

1,定义数组格式:

  1. 数组名=(value0 value1 value2 value3 ......)
  2. 数组名=([0]=value [1]=value1 [2]=value2 ....)
  3. 列表名="value0 value1 value2 value3 ...... "
    数组名=($列表名)
  4. 数组名[0]="value1"
    数组名[1]="value2"
    数组名[2]="value3"

2,数组的包括数据类型

  • 数值型
  • 字符型
  • 混合型数值加字符

使用" "或' '定义单引号或双引号括起来

(三)定义关联数组

1,定义关联数组方法

2,使用关联数组前先声明

declare -a 声明普通属组 -A声明关联数组

普通属组可以不声明

3,声明后再使用关联数组

4,用来追加或者 修改原来的值

(四)数组介绍  与示例

1,基本介绍

2,获取 数组长度

!显示索引

3,数组中  追加变量

4,数组切片

从第三个开始 取两个

从第三个开始取

5,数组替换

不是真换,临时的

6, 数组删除

删除后,对应的索引也会删

7,取数组中最大值和最小值

8,冒泡排序

8.1 冒泡排序含义

数组排序算法:日泡排序类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

基本思想,冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面 (也就是交换两个元素的位置》,这样较小的元素就像气泡一样从底部上升到顶部。

算法思路冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,此时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置对比和交换次数随排序轮数而减少。

8.2 实验

排序后arr数组值为

相关文章
|
2月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
408 9
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
291 2
|
5月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
263 60
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
8月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
4月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
510 1
|
6月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
178 17
|
6月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
193 4
|
6月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
392 3
|
7月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
607 25