Shell 学习(10)Bash 的函数

函数声明

语法:

# 第一种
fn() {
  # codes
}

# 第二种
function fn() {
  # codes
}

调用格式:函数名 参数1 参数2 参数3 ...,就和执行脚本一样。

参数变量

函数体内获取参数变量,与脚本中获取脚本参数变量是一致的。

  • $1~$N:函数的第一个到第N个的参数。
  • $0:函数所在的脚本名。
  • $#:函数的参数总数。
  • $@:函数的全部参数,参数之间使用空格分隔。
  • $*:函数的全部参数,参数之间使用变量${IFS}值的第一个字符分隔,默认为空格,但是可以自定义。

全局变量和局部变量,local 命令

定义在函数体外的为全局变量,函数体内的为局部变量。

# 全局变量
globalVar="gvv"

fn() {
  # 局部变量
  localVar="lvv"
}

在一般的开发语言中,函数体内部可以访问外部的变量,外部无法访问到内部的变量。但是在 Shell 中,函数体内定义的变量是可以被外部访问的。

#!/bin/bash

fn () {
  localVar="local var value"
}
fn
echo "localVar = ${localVar}"

输出:

$ ./func.sh 
localVar = local var value

解决这个问题可以使用local命令来实现:

#!/bin/bash

fn () {
  local localVar="local var value"
}
fn
echo "localVar = ${localVar}"

输出:

./func.sh 
inner: localVar = local var value
localVar =

return 命令

用于返回函数的返回值。在函数体中执行到了该命令,就不会继续向下执行了。

返回的值是有限定的,并不是所有值都能返回。必须是: [0-255] 区间中的整数。

#!/bin/bash

# 声明函数
function myFunc() {
    return "abc"
}

# 调用函数
myFunc

执行:

$ ./func.sh 
./func.sh: line 4: return: abc: numeric argument required
255

那么如何获取到函数的返回值呢:当调用函数后,函数的返回值会被赋值到$?中。

#!/bin/bash

function myFunc() {
    return 99
}

myFunc

echo "$?"

输出:

$ ./func.sh
99

如果函数没有返回值呢?

#!/bin/bash

function myFunc() {
    echo "exec myFunc..."
}

myFunc

echo "$?"

输出:

$ ./func.sh
exec myFunc...
0

返回带有成功含义的0。

删除函数

与删除变量的方式一样,通过unset命令即可:unset functionName

执行优先级

函数总是在当前 Shell 执行,Bash 会新建一个子 Shell 执行脚本。

如果函数与脚本同名,函数会优先执行。如果函数与别名同名,那么别名优先执行。

总结:别名 -> 函数 -> 脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值