Skip to content
GitHub

04.Bash Function

functionName() {
    code
}

function functionName() {
    code
}

function functionName {
    code
}
function hello() {                               # 定义函数
    local name=$1                                # 获取第一个参数的值赋值给 name(使用 local 声明局部变量, 避免污染全局变量)
    echo "Function hello $name"
}

$ hello "lily"                                   # 函数调用
> Function hello lily                            # 函数执行结果

函数允许使用参数, 参数使用 $1$2$3 等获取
$0 表示函数名
$# 表示参数个数
$* 表示所有参数
$@ 表示所有参数

function func() {                               # 在 test.sh 中定义函数
    for param in $*; do
        echo "param $param"
    done
    echo "param length: $#"
    echo "full param: $@"
}
func 1st 2nd 3rd                                 # 函数调用

 $ bash test.sh                                  # 执行脚本
 > param 1st
 > param 2nd
 > param 3rd
 > param length: 3
 > full param: 1st 2nd 3rd

使用 return 返回函数值, 返回值只能是数字(0-255)
一般使用 0 表示执行成功, 1 或其它非 0 数字表示执行失败

function bigger() {                              # 定义函数
    [[ $1 -gt $2 ]] && return 0 || return 1      # 返回值只允许数字
}

$ num1=7; num2=3; bigger num1 num2               # 变量定义, 函数调用
$ [[ $? -eq 0 ]] && echo "$num1 bigger" || echo "$num2 bigger"
> 7 bigger

获取函数打印作为返回值

function add() {
    echo $(($1 + $2))
}

echo "100 + 200 = $(add 100 200)" 

function last_user() {
    who | awk '{print $1}' | tail -n 1
}

echo "last user: $(last_user)"

定义的变量默认为全局变量, 使用 local 定义为局部变量 为避免使用全局变量污染(同名覆盖), 函数内变量使用局域变量

count=0                                          # 定义全局变量 count
function func() {
    local index=0                                # 定义局内变量 index
    for param in $*; do
        count=$((count + 1))
        index=$(expr $index + 1)
    done
    echo "local count: $count index: $index"     # 函数内打印
}

func 1st 2nd 3rd                                 # 函数调用
echo "global count: $count index: $index"        # 函数调用
echo "param: $param"

 $ bash test.sh                                  # 执行脚本
 > local count: 3 index: 3                       # 函数内部全局变量和局部变量都可用
 > global count: 3 index:                        # 函数外局部变量不可用
 > param: 3rd                                    # 函数内部变量污染全局变量