Shell 脚本编程:函数

Shell 脚本编程:函数

将命令序列按格式写在一起

可重复使用命令序列

一、函数定义格式

格式一:
shell 复制代码
function 函数名 {
    命令序列
}
格式二:
shell 复制代码
函数名() {
    命令序列
}

二、函数返回值

  • 使用 return 返回值(0-255),可通过 $? 获取

  • 0-255,超出时 除以256取余

示例:
shell 复制代码
#!/bin/bash
function cy {
        read -p "请输入一个整数: " n
        return $[n*2]
}
cy
echo "返回值: $?"

3. 函数传参与变量作用域

函数变量的作用范围(局部变量以及全局变量)

函数在shell脚本中仅在当前shell环境中有效

shell脚本中变量默认全局有效

将变量限定一个函数的内部local,即局部变量

示例:传参计算两数之和
shell 复制代码
#!/bin/bash
sum() {
        sum=$[ $1 + $2 ]
        echo $sum
}
sum $1 $2
示例:局部变量与全局变量

将变量限定在函数内部使用local命令

即这个local的变量仅仅在当前的函数内有效,在别的函数中无效

shell 复制代码
#!/bin/bash
abc() {
        echo "函数内未定义local的i: $i"
        let i++
        local i
        i=6
        echo "函数内local的i: $i"
}
i=9
abc
echo "函数外的i: $i"

四、递归函数

示例:计算阶乘
shell 复制代码
#!/bin/bash
function yy() {
        if [ $1 -eq 1 ]; then
                echo 1
        else
                local temp=$[$1 - 1]
                local result=$(yy $temp)
                echo $[result * $1]
        fi      
}
read -p "输入一个值: " value
result=$(yy $value)
echo "阶乘值为: $result"

五、函数库

将常用函数集中在一个脚本中,方便其他脚本调用

示例

编辑函数库脚本

shell 复制代码
#!/bin/bash
jia() {
        result=$[$1 + $2]
        echo "$result"
}

jian() {
        result=$[$1 - $2]
        echo "$result"
}

cheng() {
        result=$[$1 * $2]
        echo "$result"
}

chu() {
        if [ $2 -ne 0 ]; then
                result=$[$1 / $2]
                echo "$result"
        else
                echo "除法中分母不能为0"
        fi
}

编辑调用函数库脚本

shell 复制代码
#!/bin/bash
. /root/test5.sh

read -p "请输入第一个数字: " n
read -p "请输入第二个数字: " m

result1=$(jia $n $m)
result2=$(jian $n $m)
result3=$(cheng $n $m)
result4=$(chu $n $m)

echo "两数之和为: $result1"
echo "两数之差为: $result2"
echo "两数之积为: $result3"
echo "两数之商为: $result4"
相关推荐
艾莉丝努力练剑12 分钟前
【QT】Qt常用控件与布局管理深度解析:从原理到实践的架构思考
linux·运维·服务器·开发语言·网络·qt·架构
以太浮标13 分钟前
华为eNSP模拟器综合实验之- WLAN瘦AP配置实战案例详解
运维·网络·网络协议·华为·智能路由器·信息与通信
个性小王13 分钟前
华为-AC+FIT AP组网(web方式)
运维·网络·华为
码云数智-园园22 分钟前
Python 列表与元组:从核心区别到实战选型
运维·服务器·windows
zhangzeyuaaa23 分钟前
Logstash 单次运行模式下的数据丢失陷阱:Output 缓冲区丢弃的根因与根治方案
运维·logstash
格林威23 分钟前
Linux系统工业相机:Linux udev 规则绑定相机设备
linux·运维·开发语言·人工智能·数码相机·计算机视觉·工业相机
IMPYLH25 分钟前
Linux 的 mv 命令
linux·运维·服务器·bash
weixin_4235339927 分钟前
虚拟机-ubuntu突然连不上网,网络图标消失
linux·运维·ubuntu
清水白石00828 分钟前
Python 在数据栈中的边界:何时高效原型、何时切换到 SQL、Spark、Rust 或数据库原生能力
数据库·python·自动化
zzzsde32 分钟前
【Linux】进程间通信(3)system V信号量
linux·运维·服务器