Shell函数

一、Shell函数

1、函数定义

函数定义的语法格式:

function function_name() {
    statements
    [return int_value]
}

说明:

  • function是 Shell 中的关键字,专门用来定义函数;
  • function_name是函数名;
  • statements是函数要执行的代码,也就是一组语句;
  • return 表示函数的返回值int_value(0-255),可以写也可以不写。如果不写,将以最后一条命令运行结果,作为返回值。

注意:return 语句只能返回一个介于 0 到 255 之间的 整数,而有可能超过这个范围或者返回其他值。要解决这个问题,您可以直接使用 echo 输出和而不是使用 return。

函数定义的简化写法

函数定义时也可以不写 function 关键字:

function_name() {
    statements
    [return value]
}

如果写了 function 关键字,也可以省略函数名后面的小括号:

function function_name {
    statements
    [return value]
}

推荐使用标准的定义写法,这样能够做到“见名知意”,一看就懂。

2、函数调用

调用 Shell函数仅使用其函数名即可。调用函数时可以给它传递参数,也可以不传递。

  • 如果不传递参数,直接给出函数名字即可。
  • 如果传递参数,那么多个参数之间以空格分隔。在函数体内部,通过 $n 的形式来获取参数的值。

不管是哪种形式,函数名字后面都不需要带括号。

函数调用语法格式:

# 无参
function_name
# 有参
function_name param1 param2 param3

注意:

  • Shell 函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。
  • Shell 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。

示例如下:

#!/bin/bash

#函数定义
function fn1(){
    echo "https://www.baidu.com/1"
}

fn2(){
    echo "https://www.baidu.com/2"
}

function fn3 {
 	echo "function3"
    echo "https://www.baidu.com/3"
}

#函数调用
fn1
fn2
fn3
echo "====="
fn3_res=$(fn3)
echo "fn3_res为:$fn3_res"
echo "ends"

在这里插入图片描述

二、函数示例

1、无参函数

示例如下:

#!/bin/bash

function fun1(){
    echo "这个函数会对输入的两个数字进行相加运算。"
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read bNum
    sum=$(($aNum + $bNum))
    echo "两个数字计算结果为:$aNum + $bNum = $sum"
}

fun1
echo "ends"

在这里插入图片描述

2、有参函数

传递参数查看:Shell流程控制和传参(https://blog.csdn.net/qq_42402854/article/details/136282663)。

通过 $n的形式来接收的参数,在 Shell 中称为位置参数(命令行参数)。注意:$10 不能获取第十个参数,获取第十个参数需要 ${10}。当n>=10时,需要使用${n}来获取参数。

在这里插入图片描述

在这里插入图片描述

示例如下:

#!/bin/bash

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !" # 不对,请使用${10}
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}

funWithParam 11 12 13 14 15 16 17 18 19 34 73

echo "ends"

在这里插入图片描述

3、带返回值的函数

$@表示函数的所有参数,
$?表示函数的退出状态(返回值)。$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。

示例1如下:

#!/bin/bash

funWithReturn(){
	aNum=$1
	bNum=$2
    sum=$(($aNum + $bNum))
    echo "两个数字计算结果为:$aNum + $bNum = $sum"
    return $(($aNum+$bNum))
}

funWithReturn 2 4
echo "两个数字之和为 $? !"

echo "ends"

在这里插入图片描述

示例2如下:

#!/bin/bash

function getsum(){
    local sum=0
    for n in $@
    do
         ((sum+=n))
    done
    echo $sum
    return 0
}

#调用函数并传递参数
getsum 10 20 55 15
echo "调用函数 return为 $? !"

#调用函数并传递参数,最后将结果赋值给一个变量
total=$(getsum 10 20 55 15)
echo "变量接收函数结果:total = $total"

#也可以将变量省略
echo "直接输出函数结果:$(getsum 10 20 55 15)"

echo "ends"

在这里插入图片描述

– 求知若饥,虚心若愚。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值