函数,函数是什么,函数是一些命令的集合,使用一个名称做代表,称为函数名称,函数名称的命名规范和变量相同

函数的用法

函数的语法

语法一:

function 函数名称 ()

{

    命令区域

}

语法2

关键字function 可以省略,以下写法也可

函数名称()

{

    命令区域

}



语法3



如果使用关键词 function ,那么,函数名称后面的小括号可以省略

function 函数名称

{

    命令区域

}

调用函数的方法是直接写出函数名称即可



如果要传入参数,可把参数选项写在函数名称之后,

函数名称 参数1 参数2 参数3

例子:

getline() ##定义函数getline,用来计算文件的行数

{

local i=0

while read line

do

let ++i

done < $file

echo "$file 共有$i行"

}

##i代表已计算的行数,线归零,local用来设定变量i 是getline函数中专有的变量,不影响脚本其他地方的i变量,使用while循环,自变量$file指定的文件读取每一行,每读一行,变量i的值就加1

file=$1 #使用转向输入,让read能由$file读取数据

getline#调用getline函数,这时bash会跳到{}内,去执行getline内的命令区域

echo 'getline 执行完毕'

执行完成后,回到这里继续下一道指令

注意:在调用函数之前,一定要实现定义函数,否则会出现错误

定义函数后,也可以取消函数,unset -f

unset -f getline

函数的结束状态

执行函数时,函数中最后一个命令的传回值代表函数的结束状态,执行函数,如果遇到return命令,就立即结束,回到调用函数的下一个命令,此时函数的传回值为0

例子:

getline()

{

local i=0

while read line

do

let ++i

if (( $i > 10 ));then

echo "已经超过10行,不在继续读取"

return

fi

done < $file

echo "$file 共有$i行"

}

file=$1

getline

echo $?

echo 'getline 执行完毕'

[root@localhost tmp]# bash test.sh 1

已经超过10行,不在继续读取

0

getline 执行完毕

return 命令也可以指定不同的传回值,如

return 3

[root@localhost tmp]# bash test.sh 1

已经超过10行,不在继续读取

2

getline 执行完毕



不同的传回值要如何引用,看脚本设计的安排,例如,函数的传回值是3,就执行某些命令

例子:





getline()

{

local i=0

while read line

do

let ++i

if (( $i > 10 ));then

echo "已经超过10行,不在继续读取"

return 2

fi

done < $file

echo "$file 共有$i行"

}

file=$1

getline

if [ $? -eq 2 ];then

echo '行数太多,放弃读取'

else

echo 'getline 执行完毕'

fi



函数与变量的作用范围

函数仅在定义的shell环境中有效,bash执行函数时,并不会另外在开启一个子shell,如果要传递函数给子shell环境使用,可使用内置命令 export 和-f 选项

语法:export -f 函数名称

export -f getline

这样,getline就变成环境变量的一部分,(以函数型存在),可供子shell的脚本调用





位置参数



传递参数