20.Linux Shell自定义函数

本文详细介绍了如何在LinuxShell中定义和使用自定义函数,包括函数的定义方法、返回值处理(默认状态和return命令)、参数传递、数组操作以及创建shell函数库。作者还讨论了函数重定义、返回值的捕捉以及如何处理函数内的变量和数组问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


Linux Shell自定义函数

在脚本中一遍又一遍地编写同样的代码会很烦人,为了避免这种麻烦,可以将代码封装成函数,多次引用。

1)函数的定义与使用

Linux Shell中函数的定义有两种方式:

  • 采用关键字function
function name {
   
    commands
}
  • 函数名后跟空括号
name() {
   
    commands
}

使用函数:

#!/bin/bash

sayHello

function sayHello {
   
    echo "Hello, Bash Shell."
}

sayHi() {
   
    echo "Hi, Bash Shell."
}

sayHello
sayHi

sayHi() {
   
    echo "Hi2, Bash Shell."
}

sayHi

执行,

$ ./test.sh 
# ./test.sh: 行 3: sayHello:未找到命令
# Hello, Bash Shell.
# Hi, Bash Shell.
# Hi2, Bash Shell.

每次引用函数名时,bash shell会找到函数的定义并执行在那里定义的命令。

从上面的例子可以看到,

  • 使用未定义的函数脚本会报错
  • 函数可以被重定义,调用时会使用最新的定义,原来的定义会被覆盖

2)函数的返回值

通常,在使用函数时为了与调用者交互,会希望函数能给出局部逻辑执行后的返回值,如运算结果,执行有没有出错。

默认情况

bash shell中,默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。函数执行结束后,可以用标准变量 $? 来确定函数的退出状态码

#!/bin/bash
function sayHello {
   
    echo "Hello, Bash Shell."
}
sayHello
echo ret value: $?

sayHi() {
   
    echo "Hi2, Bash Shell."
    ls -al rob
}

sayHi
echo ret value: $?

sayHi() {
   
    ls -al rob
    echo "Hi2, Bash Shell."
}

执行,

$ ./test.sh

# Hello, Bash Shell.
# ret value: 0
# Hi2, Bash Shell.
# ls: 无法访问 'rob': 没有那个文件或目录
# ret value: 2
# ls: 无法访问 'rob': 没有那个文件或目录
# Hi2, Bash Shell.
# ret value: 0

可以看到,在sayHi函数中执行最后一行指令ls -al rob时出错,因此$?的值是2。但是,看上面的例子中,前后两个sayHi函数因为出错语句位置的不同,函数的退出状态也不同。因此,使用$?判断函数的状态是很不可靠的。

使用return命令

bash shell使用 return 命令来退出函数并返回特定的退出状态码。 return 命令允许指定一个整数值来定义函数的退出状态码。

  • return返回的状态码也在$?中,必须函数一结束就返回,否则返回值会结束
  • 退出状态码必须是0-255,任何大于256的值都会产生一个错误值。
#!/bin/bash

doubleCount(){
   
    read 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值