函数介绍
函数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