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

shell——函数与数组

文章目录

  • 前言
  • 一、函数
    • 1.1 函数的定义
    • 1.2 函数的简单使用
    • 1.2 函数的参数
      • 1.2.1 带参数的函数
      • 1.2.2 接收两个数据并计算两个数之和
    • 1.3 函数的返回值
      • 1.3.1 有返回的函数
      • 1.3.2 编写有返回值的函数计算两个数的和
  • 二、数组
    • 2.1 定义与赋值
    • 2.2 读取数组元素
    • 2.2 获取数组所有元素及数组长度
    • 2.3 遍历数组
  • 三、加载外部文件
    • 3.1 示例
    • 3.2 打印当前用户相关信息
      • 3.2.1 创建 shuju.sh
  • 总结:


前言

shell函数是shell脚本中封装的一组命令,用于执行特定任务。它们类似于其他编程语言中的函数,可以接收参数、返回结果,并避免代码重复。shell函数在脚本中定义后,通过函数名调用。


一、函数

函数:可以理解为是一个功能。
例如: print()函数用于输出内容

  • 优点:当有了解决某个问题的函数(功能)时,程序员就可以直接调用这
    个函数直接解决问题。

  • 函数的两种类型:

          - 1、内置函数:编程语言自带的函数- shell语言的内置函数- AWK语言中print函数- 2、自定义函数:程序员自己写的函数- 函数的定义:如何编写函数- 函数的调用:如何使用已编写的函数
    

1.1 函数的定义

在 Shell中所有函数在使用前必须定义。这意味着必须将函数放在脚本开始
部分,直至 shell解释器首次发现它时,才可以使用。 调用函数仅使用其函
数名即可。

记住
先把函数制作好, 才能正确调用
Shell中的函数书写在前面 (书写在调用函数的代码之前)

function 函数名字 ()
{程序段;[return int;]
}1、可以带 function fun() 定义,也可以直接 fun() 定义, 不带任何参数。
2、参数返回,可以显式加 return ,如果不加,将以最后一条命令运行结果,作为返回值。

1.2 函数的简单使用

#!/bin/bash
### 演示函数的简单使用
##注意:函数书写在shell脚本的开始位置
##定义函数,函数名为:print
function print()
{echo "hello"echo "你好"
}
##调用print函数
print

在这里插入图片描述

1.2 函数的参数

在 Shell 中,调用函数时可以向其传递参数。在函数体内部, 通过 $n 的形式来获取参数的值,例如, $1 表示第一个参数, $2 表示第二个参数…

注意, 当 n>=10 时,需要使用${n} 来获取参数。

1.2.1 带参数的函数

#!/bin/bash
### 演示带参数的函数
##定义函数
funWithParam()
{echo "第一个参数为 $1"echo "第二个参数为 $2"echo "第十个参数为 $10"echo "第十个参数为 ${10}"echo "第十一个参数为 ${11}"echo "参数总数有 $# 个"echo "作为一个字符串输出所有参数 $*"
}
##调用函数,并传递参数
funWithParam 1 2 3 4 5 6 7 8 9 34 73

在这里插入图片描述

在这里插入图片描述

1.2.2 接收两个数据并计算两个数之和

#!/bin/bash
num1=$(($1+1))
num2=$(($2+1))# 定义函数 : 接收两个数据
function sum(){# 计算两个数字之和sum=$[$1+$2]      # 这里的$1和$2指的是调用函数时的位置参数echo ${sum}
}# 调用函数
sum $num1 $num2

在这里插入图片描述
在这里插入图片描述

1.3 函数的返回值

函数的返回值:函数内部在处理完所有问题后,需要有一个结果返回给调用者。

function 函数名(){......函数体中的代码......return 数据 ## 返回的数据只能有一个值
}

1.3.1 有返回的函数

#!/bin/bash
###演示带返回值的参数
function getMax()
{if [ $1 -lt $2 ]; thenreturn $2 #使用return来返回一个数据值 (return后面的返回值只能书写一个)elsereturn $1;fi
}
echo "Shell程序中传递的两个参数是:$1 , $2"
##调用函数
getMax $1 $2echo "最大值::$?" # $?表示返回值

取最大值:
在这里插入图片描述
在这里插入图片描述
取最小值:
在这里插入图片描述
在这里插入图片描述

1.3.2 编写有返回值的函数计算两个数的和

#!/bin/bash
sum()
{read -p "请输入第一个数:" num1read -p "请输入第二个数:" num2SUM=$((num1 + num2))return $SUM
}sum
echo "两个数的和:$?"   # $?表示返回值

在这里插入图片描述
在这里插入图片描述

二、数组

  • 数组可以理解为是一个用来存放多个值的容器。
  • 数组中存储的数据,通常可以称为:元素。
  • 当数组中存储了多个元素后,就会给每一个元素添加一个编号(索引),从0开始。

2.1 定义与赋值

  • Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
  • Shell 数组用括号来表示,元素用"空格"符号分割开,
  • 语法格式如下:
array_name=(value1 value2 value3 ... valueN)

示例:

#!/bin/bash
my_array=(A B "C" D)

也可以使用索引来定义数组:

# 数组名[索引]=元素值
array_name[0]=value0
array_name[1]=value1

2.2 读取数组元素

读取数组元素值的一般格式是: ${array_name[index]}

index 是指数组的索引,从0开始

示例:

#!/bin/bash
my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"

在这里插入图片描述

2.2 获取数组所有元素及数组长度

在这里插入图片描述

在这里插入图片描述

2.3 遍历数组

把数组中存储的元素依次取出

方式一:

#!/bin/bash
# 定义数组
my_arr=(AA BB CC)
# 利用for循环 遍历数组
for var in ${my_arr[@]}
doecho $var
done

在这里插入图片描述
方式二:

#!/bin/bash
# 定义数组
my_arr=(AA BB CC)
# 利用for循环 遍历数组
for var in ${my_arr[@]}
doecho $var
done

在这里插入图片描述
在这里插入图片描述

三、加载外部文件

在一个Shell程序中可以指定包含外部的其他Shell脚本程序。这样可以很方便的封装一些公用的代码作为一个独立的文件。

好处:

  • 实现数据源与业务逻辑的分离
  • 提升代码复用性和可扩展性优化后的表达

3.1 示例

定义两个shell文件分别为: test1.sh、test2.sh

  1. 在test1中定义一个变量 arr=(linux hadoop shell)
  2. 在test2中对arr进行循环打印输出

第一步:test1.sh

#!/bin/bash
my_array=(AA BB CC)

第二步:test2.sh

#!/bin/bash
source /opt/shelldemo/test1.sh
for var in ${my_array[@]}
doecho $var
done

在这里插入图片描述
在这里插入图片描述

3.2 打印当前用户相关信息

3.2.1 创建 shuju.sh

在这里插入图片描述
在这里插入图片描述

总结:

通过合理使用函数、数组和模块化加载,Shell 脚本能显著提升效率与可维护性,适用于自动化任务和复杂流程管理。

http://www.dtcms.com/a/361357.html

相关文章:

  • Selenium自动化测试框架
  • 艾莉丝努力练剑的创作纪念日:星河初启,牧梦长空
  • 如何做好出入库管理工作,好用的出入库管理软件有哪些
  • AI+PLM如何重构特种/高端复杂装备行业的工艺管理?
  • 大数据行业调研: 1列举大数据涉及到的各种行业,以及该行业未来发展的优势和劣势? 2列举大数据相关的岗位、岗位职责及其需要的专业技能?
  • ES6手录02-字符串与函数的扩展
  • 埃文科技亮相2025中部数字经济产业发展大会暨数智创新博览会
  • 华宇TAS应用中间件与长城科技两款产品完成兼容互认证
  • 深入浅出 HarmonyOS 应用开发:掌握 ArkTS 声明式 UI 与高效状态管理
  • 从零开始学习n8n-定时器+HTTP+飞书多维表格(上)
  • 基于高量子效率sCMOS相机的激光光斑衍射计算成像实验
  • 基于Flask的企业级产品信息管理系统技术实现笔记
  • Git中批量恢复文件到之前提交状态
  • 海康相机开发---HCNetSDK
  • 神经网络1——sklearn的简单实现
  • Qt::Q_INIT_RESOURCE用法
  • AUTOSAR进阶图解==>AUTOSAR_TPS_XMLSchemaProductionRules
  • 【ComfyUI】图像描述词润色总结
  • KL Loss
  • 生产者-消费者问题与 QWaitCondition
  • 深入探讨Java异常处理:受检异常与非受检异常的最佳实践
  • leetcode 1576 替换所有的问号
  • 深入Linux内核:IPC资源管理揭秘
  • Unity资源导入设置方式选择
  • 【Element Plus `el-select` 下拉菜单响应式定位问题深度解析】
  • 【数学建模学习笔记】缺失值处理
  • SRE 系列(五)| MTTK/MTTF/MTTV:故障应急机制的三板斧
  • 每周读书与学习->认识性能测试工具JMeter
  • 【开题答辩全过程】以 基于python爬虫对微博数据可视化及实现为例,包含答辩的问题和答案
  • Certificate is Signed Using a Weak Signature Algorithm漏洞解决