Bash(Bourne Again shell)也跟其他编程语言一样也支持函数,一般在编写大型脚本中需要用到,它可以将shell脚本程序划分成一个个功能相对独立的代码块,使代码的模块化更好,结构更加清晰,并可以有效地减少程序的代码量。但是bash作为一种解释性语言,bash 在编程能力方面提供的支持并不像其他编译性的语言(例如 C 语言)那样完善,执行效率也会低很多。
函数的定义、执行与传参
定义
格式1
function name() {
command 1
command 2
...
}
格式2
name() {
command 1
command 2
...
}
可以带function name()
定义,也可以直接name()
定义,不带任何参数。
执行
函数只有在调用时,才会生效。调用通过函数名进行。
name
传递参数
# cat func.sh
#!/bin/bash
#
a="This is a"
b="This is b"
name() {
local c="This is c"
local d="This is d"
echo $a, $b
echo $c
return 0
}
echo $d
name
执行如下:
# bash func.sh
This is a, This is b
This is c
说明:
- a和b定义的时全局变量
- c和d定义的时局部变量,只能在函数name中使用
- $a是第一个参数$1,$b是第一个参数$2,以此类推$n是第n个参数$n。
-
return 0
参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果作为返回值。
递归函数
所谓递归函数,就是函数调用自身。例如:
#!/bin/bash
function name() {
echo $1
name hello
sleep 1
}
name
运行此脚本后不断打印出hello,按Ctrl+C结束。
实例:斐波那契数列
斐波那契数列是指类似于0,1,1,2,3,5,8,13,21,……的一组数,在数学上,斐波纳契数列有递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),我们也根据这个来用shell编出来,代码如下:
#!/bin/bash
declare -a a
a=(0 1)
echo ${a[0]}
echo ${a[1]}
for ((i=2;i<10;i++));do
let a[i]=a[i-1]+a[i-2]
done
echo ${a[*]}
用函数实现

网友评论