定义

  1. 函数名 () {
  2. 函数体
  3. }

或者函数名称前面增加关键字function

  1. function 函数名 {
  2. 函数体
  3. }

eg:

  1. #!/bin/bash
  2. foo(){
  3. echo "hello world"
  4. }
  5. bar(){
  6. echo "hello shell"
  7. }
  8. foo
  9. bar

执行shell脚本

  1. chmod +x func.sh
  2. ./func.sh

执行结果

  1. hello world
  2. hello shell

参数

在Shell 中的函数的圆括号里不能放置参数,函数传递参数的方式其实跟Shell 脚本传递命令行参数一样。需要把参数直接置于函数名字后面,参数名称是:$1,$2,$3…

  1. #!/bin/bash
  2. foo(){
  3. echo hello $1
  4. }
  5. bar(){
  6. echo hello $1 $2
  7. }
  8. foo world
  9. bar bash shell

执行函数结果如下

  1. hello world
  2. hello bash shell

返回值

Shell 的函数却没办法做到。但是 Shell 的函数可以返回一个状态,有点类似一个程序或命令退出时会有一个退出状态,表明是否成功。Shell 函数要返回状态,也用 return 这个关键字

  1. foo(){
  2. sum=$(($1+$2))
  3. return $sum
  4. }
  5. foo $1 $2
  6. echo $?

执行结果,变量 $? 包含前一次被运行的命令或函数的返回状态。

  1. $ ./func.sh 1 4
  2. 5

变量作用范围

一个变量是“全局的”(global),意味着在脚本的任何地方都可以访问它。
我们也可以创建局部(local)变量。当我们在函数中创建局部变量时,这个变量就只能在这个函数中被访问。定义一个局部变量,我们只要在第一次给这个变量赋值时在变量名前加上关键字 local 即可( local 是英语“本地的”的意思)。