函数介绍
函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。
它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序 的一部分 。
函数和shell程序比较相似,区别在于:
Shell程序在子Shell中运行,而Shell函数在当前Shell中运行。
因此在当前Shell中,函数可以对shell中变量进行修改。
定义函数
函数由两部分组成:函数名和函数体
语法一: function f_name { ...函数体... }
语法二: function f_name () { ...函数体... }
语法三: f_name (){ ...函数体... } (此语法最为常用)
函数也分为本地函数和环境函数。
set 查看本地变量及本地函数
1 [root@mmmm(mei) bin]# set
2 BASH=/bin/bash
3 BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
4 BASH_ALIASES=()
5 BASH_ARGC=()
6 BASH_ARGV=()
7 BASH_CMDS=()
8 BASH_LINENO=()
unset 变量名或函数名 取消变量或函数的定义
本地函数
1 [root@mmmm(mei) bin]# test () { echo hello world; return 2; }
2 [root@mmmm(mei) bin]# test
3 hello world
4 [root@mmmm(mei) bin]# unset test
5 [root@mmmm(mei) bin]# test
6 [root@mmmm(mei) bin]#
环境函数
declare -xf mage或export -f mage
查看环环境函数
declare -xf 或export -f
1 [root@mmmm(mei) bin]# declare -xf test
2 [root@mmmm(mei) bin]# declare -xf
3 [root@mmmm(mei) bin]# test () { echo hello world; return 2; }
4 [root@mmmm(mei) bin]# declare -xf test
5 [root@mmmm(mei) bin]# declare -xf
6 test ()
7 {
8 echo hello world;
9 return 2
10 }
11 declare -fx test
函数使用
函数的定义和使用:
(1)可在交互式环境下定义函数
1 [root@mmmm(mei) ~]# test () { 2 > echo hello world 3 > } 4 [root@mmmm(mei) ~]# test 5 hello world
(2)可将函数放在脚本文件中作为它的一部分
1 1 #!/bin/bash 2 2 test () { 3 3 echo hello world 4 4 } 5 5 test
在此需要注意一点:
当我们需要使用函数时,直接使用函数名即可,函数名会被自动替换为函数代码 。
但建议将函数部分的代码写在调用函数前面,使得在解释脚本时不报错。
(3)可放在只包含函数的单独文件中 ,可以在其他脚本中调用该文件的函数
函数是在被调用时创建,返回时终止。那么函数的返回值是什么呢?
函数的返回值也分为两种情况:
1.函数的执行结果返回值:
(1) 使用echo等命令进行输出
(2) 函数体中调用命令的输出结果
2.函数的退出状态码:
(1) 默认取决于函数中执行的最后一条命令的退出状态码
1 [root@mmmm(mei) bin]# test () { 2 > echo hello world 3 > } 4 [root@mmmm(mei) bin]# test 5 hello world 6 [root@mmmm(mei) bin]# echo $? 7 0
(2) 自定义退出状态码,
其格式为: return 从函数中返回,用最后状态命令决定返回值
return 0 无错误返回。
return 1-255 有错误返回
1 [root@mmmm(mei) bin]# test () {
2 > echo hello world
3 > return 2
4 > }
5 [root@mmmm(mei) bin]# test
6 hello world
7 [root@mmmm(mei) bin]# echo $?
8 2
接下来我们举一个简单的小例子来介绍一些函数的用法
declare -i num=100 使num的赋值只在当前函数中有效,等于同local num=100
1 1 #!/bin/bash
2 2 test() {
3 3 declare -i num=$1
4 4 if [ $1 -le 1 ]; then
5 5 echo -e "hello\n"
6 6 else
7 7 echo no
8 8 echo $(test $[$num-1])
9 9
10 10 fi
11 11 echo $num
12 12 }
13 13 test $1
14 14 echo $num
15 [root@mmmm(mei) bin]# testhanshu.sh 2
16 no
17 hello 1
18 2