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

Shell编程-函数

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们前面学习了那么多命令,以及涉及到部分逻辑判断的问题。从简单来说,他就是Shell编程,只有由于命令比较单一,只能实现比较简单的功能。如果我们把多个操作都放到一起去,并添加更复杂的逻辑在里面,他就是Shell编程。所以我们主要从以下几个方面讲解Shell编程:

Shell编程-什么是shell

Shell编程-变量

Shell编程-数据类型

Shell编程-逻辑判断

Shell编程-if判断

Shell编程-if和else

Shell编程-while循环

Shell编程-for循环

Shell编程-case

Shell编程-break

Shell编程-continue

Shell编程--函数(本章节)

Shell编程-案例(一)

Shell编程-案例(二)

Shell编程-小结

我们前面讲了可以使用case来作为复杂程序的入口,但是如果程序里面有很多分支怎么办呢?总不能使用几十个选项和几十个脚本吧,这里引入一个函数的概念,可以把某些具体的功能,封装成功一个函数,有点类似一个单独的脚本,然后再引用。

在Shell脚本中,函数(Functions)允许您组织和重复使用代码片段,以及将复杂任务分解为更小的模块。函数可以带有参数,可以返回值,提供了一种封装和抽象代码的方式。

定义函数:

在Shell中定义函数的基本语法如下:

function_name () {
    # 函数体(命令序列)
}

或者:

function function_name {
    # 函数体(命令序列)
}

例如,定义一个简单的打印消息的函数:

print_message() {
    echo "Hello, world!"
}

调用函数:

要调用函数,只需使用其名称即可:

print_message

函数参数:

函数可以接受参数,参数通过位置变量 $1$2$3, ... 表示。在函数内部,可以使用 $1$2, 等访问这些参数。

greet() {
    echo "Hello, $1!"
}

greet "Alice"

这会输出 Hello, Alice!

函数返回值:

Shell函数的返回值通过 return 语句实现。返回值是一个整数,通常用于表示函数执行的状态或结果。​​​​​​​

calculate_sum() {
    local sum=$(( $1 + $2 ))
    return $sum
}

calculate_sum 10 20
result=$?
echo "Sum is: $result"

在这个例子中,$? 获取了函数 calculate_sum 的返回值,然后将其打印出来。

示例:​​​​​​​

#!/bin/bash

# 定义一个函数来判断数字的奇偶性
is_even() {
    if [ $(( $1 % 2 )) -eq 0 ]; then
        echo "$1 is even."
    else
        echo "$1 is odd."
    fi
}

# 调用函数并传递参数
is_even 7
is_even 10

局部变量:

在函数内部定义的变量默认是全局的,可以使用 local 关键字来声明局部变量,其作用域仅限于函数内部。

#!/bin/bash

chenfa () {
    for ((i = 1; i <= $1; i++))
  do
     for ((j = 1; j <= i; j++))
     do
            echo -n "$i*$j=$(($i*$j))$(printf '\t')"
        done
        echo
    done
}
#调用函数
chenfa $1

这里有2个变量,都是$1,其中函数调用的时候,后面的$1,就是运行该程序的时候传递给它的参数,如果不传参数,这个程序会运行失败。

在函数内部的的$1是在调用函数的时候输入的值,虽然这个值的最终来源还是执行命令传输的给他的参数,理解这个逻辑是为了理解变量的局部性。

总结

  1. 函数最重要功能实际就是把一个类型或者某一个具体功能的代码封装在一起,方便重复调用。

  2. 比如我们在Shell编程-for循环打印的99乘法表,如果我们要打印一个其他乘法表,则需要修改代码,但是通过局部变量的我们把乘法表封装在函数内部,只要在运行函数的时候传递给他对应的参数,就可以打印任何乘法表。


http://www.kler.cn/news/359312.html

相关文章:

  • Git 总结
  • 软件开发----设计模式每日刷题(转载于牛客)
  • 测试教程分享
  • 二层交换机的工作原理与局域网设备通信详解
  • 把其他.ui文件拿到我的工程中使用
  • 100多种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
  • 每天练打字7:今日状况——常用字后五百击键3.5第2遍进行中,赛文速度95.65
  • 【截流软件】采集短视频关键词笔记下的筛选评论
  • 一文了解供应链攻击
  • GitHub每日最火火火项目(10.21)
  • Python学习---高效字符串处理技巧
  • 鸿蒙ArkTS中的资源管理详解
  • oceanbase的日志量太大,撑爆磁盘,修改下日志级别
  • Unity--AssestBundles--热更新
  • 【 用python写一个把视频每一帧提取为png图片】
  • 【鸡翅Club】项目启动
  • HAL+M4学习记录_8
  • MySQL常见优化策略
  • xRDP – 在 Ubuntu 18.04、20.04、22.04、22.10、23.04(脚本版本 1.4.7)上轻松安装 xRDP
  • 如何使用外呼电话机器人的功能可以更高效的获客?