Linux bash shell 函数的创建和使用

bash shell 函数的创建和使用

为了代码复用,bash 也提供了函数功能。函数是一个脚本代码块,可以为其命名并在代码中任何位置重用。

1 创建函数

bash shell 提供了两种格式来创建函数。一是使用关键字 function 后跟分配给该代码块的函数名。name 属性定义了赋予函数的唯一名称。commands 是构成函数的一条或多条 bash shell 命令。调用函数时,会按命令的顺序依次执行。

function name {
	commands
}

第二种格式更接近其它语言中的定义方式。

name() {
	commands
}

函数必须在调用语句之前定义,否则将会报错。当 bash 执行到引用函数名时,将跳转到函数的定义并执行那里定义的命令。

zzz@ubuntu:~/my_learning$ cat test1.sh 
#!/bin/bash

name

name() {
	echo "This is name function." 
}

name

zzz@ubuntu:~/my_learning$ ./test1.sh 
./test1.sh: 行 3: name:未找到命令
This is name function.
zzz@ubuntu:~/my_learning$ 

2 函数的返回值

bash shell 函数的返回值和其它语言不同,大致有三种。

2.1 默认退出状态码

默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。函数执行结束后,可以使用标准变量 $? 来确定函数的退出状态码。也因此,如果函数中最后一条命令之前的语句如果出现错误,函数返回的退出状态码依然为 0 。

zzz@ubuntu:~/my_learning$ cat test2.sh 
#!/bin/bash

name() {
	# 抛出一个错误
	e
	echo "This is name function." 
}

name

zzz@ubuntu:~/my_learning$ ./test2.sh 
./test2.sh: 行 5: e:未找到命令
This is name function.
zzz@ubuntu:~/my_learning$ echo $?
0
zzz@ubuntu:~/my_learning$ 
2.2 使用 return 命令

bash shell 在 return 处退出函数。return 命令可以指定一个退出状态码来作为函数的退出状态码。指定的退出状态码的值在 0~255之间。

zzz@ubuntu:~/my_learning$ cat test3.sh 
#!/bin/bash

name() {
	
	echo "This is name function."
        return 15	
}

name
echo $?

zzz@ubuntu:~/my_learning$ ./test3.sh 
This is name function.
15
zzz@ubuntu:~/my_learning$ 
2.3 使用函数输出到指定变量

可以直接将函数的输出赋值给变量,这样就可以更灵活的处理函数的返回值。

zzz@ubuntu:~/my_learning$ cat test4.sh 
#!/bin/bash

name() {
	
    read -p "Enter a value: " value
    echo $value	
}

result=`name`
echo $result

zzz@ubuntu:~/my_learning$ ./test4.sh 
Enter a value: 5
5
zzz@ubuntu:~/my_learning$ 

3 函数中的变量使用

3.1 向函数传递参数

bash shell 会将函数当作小型脚本,所以可以像普通脚本那样向函数传递参数。函数可以使用标准的参数环境变量来表示命令行上传给函数的参数。

zzz@ubuntu:~/my_learning$ cat test5.sh 
#!/bin/bash

name() {
    value=$[ $1 + $2 ]	
    echo $value	
}


echo "$0 parameter: $1, $2"
result=`name $1 $2`
echo $result

zzz@ubuntu:~/my_learning$ ./test5.sh 10 20
./test5.sh parameter: 10, 20
30
zzz@ubuntu:~/my_learning$ 
3.2 在函数中处理变量

函数中定义的变量和普通的变量作用域不同。函数使用两种类型的变量:

  • 全局变量:默认情况下,脚本中定义的变量都是全局变量。在函数外定义的变量可在函数内正常访问。
  • 局部变量:无需在函数中使用全局变量,函数内部使用的任何变量都可以被声明成局部变量。可以在变量前加上 local 关键字。对于函数内部的局部变量,函数内外的同名变量是分离的。
zzz@ubuntu:~/my_learning$ cat test6.sh 
#!/bin/bash

name() {
    local value=$[ ($1 + $2) * $a ]	
    echo $value	
}

a=2
result=`name $1 $2`
echo "value=$value, result=$result"

zzz@ubuntu:~/my_learning$ ./test6.sh 10 20
value=, result=60
zzz@ubuntu:~/my_learning$ 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值