定义
函数名 () {
函数体
}
或者函数名称前面增加关键字function
function 函数名 {
函数体
}
eg:
#!/bin/bash
foo(){
echo "hello world"
}
bar(){
echo "hello shell"
}
foo
bar
执行shell脚本
chmod +x func.sh
./func.sh
执行结果
hello world
hello shell
参数
在Shell 中的函数的圆括号里不能放置参数,函数传递参数的方式其实跟Shell 脚本传递命令行参数一样。需要把参数直接置于函数名字后面,参数名称是:$1,$2,$3…
#!/bin/bash
foo(){
echo hello $1
}
bar(){
echo hello $1 $2
}
foo world
bar bash shell
执行函数结果如下
hello world
hello bash shell
返回值
Shell 的函数却没办法做到。但是 Shell 的函数可以返回一个状态,有点类似一个程序或命令退出时会有一个退出状态,表明是否成功。Shell 函数要返回状态,也用 return 这个关键字
foo(){
sum=$(($1+$2))
return $sum
}
foo $1 $2
echo $?
执行结果,变量 $? 包含前一次被运行的命令或函数的返回状态。
$ ./func.sh 1 4
5
变量作用范围
一个变量是“全局的”(global),意味着在脚本的任何地方都可以访问它。
我们也可以创建局部(local)变量。当我们在函数中创建局部变量时,这个变量就只能在这个函数中被访问。定义一个局部变量,我们只要在第一次给这个变量赋值时在变量名前加上关键字 local 即可( local 是英语“本地的”的意思)。