Shell函数(函数定义、函数调用)
- 函数
- 函数调用
- 函数例题
- 特殊的函数调用
函数
Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。
语法结构:
function 函数名 ()
{
命令列表
return value
}
function是 Shell 中的关键字,专门用来定义函数,也可以不写。
return value表示函数的返回值。
由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。
函数调用
调用 Shell 函数时可以给它传递参数,也可以不传递。如果不传递参数,直接给出函数名字即可:
函数名
如果传递参数,那么多个参数之间以空格分隔:
函数名 param1 param2 param3
不管是哪种形式,函数名字后面都不需要带括号。
和其它编程语言不同的是,Shell 函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。
Shell 也不限制定义和调用的顺序,你可以将定义放在调用的前面,也可以反过来,将定义放在调用的后面。
函数例题
示例1、测试一个输入名是否为目录
#!/bin/bash
##测试文件是否为目录##
function testfile() #函数定义
{
if [ -d $1 ]
then
echo "$1 is a directory!"
else
echo "$1 is not directory!"
fi
return
}
testfile $1 #函数调用
运行结果:
[root@desktop ~]# ./test04.sh haha
haha is not directory!
[root@desktop ~]# ./test04.sh /etc
/etc is a directory!
示例2、使用函数判断一个数是否为素数
#!/bin/bash
## 使用函数判断一个数是否是素数##
prime()
{
j=2
flag=1
if [ $1 -le 1 ];then
echo 不能输入小于1的整数.
#浮点数的情况还没检测#
exit 1
fi
while [ $j -le `expr $1 / 2` ]
do
if [ `expr $1 % $j` -eq 0 ]
then flag=0
break
fi
j=`expr $j + 1`
done
if [ $flag -eq 1 ]
then
return 1
else
return 0
fi
}
prime $1
if [ $? -eq 1 ]
then
echo "$1 is a prime!"
else
echo "$1 is not a prime!"
fi
运行结果:
[root@desktop ~]# ./test5.sh 2
2 is a prime!
[root@desktop ~]# ./test5.sh 3
3 is a prime!
[root@desktop ~]# ./test5.sh 4
4 is not a prime!
示例3、判断两个数的大小关系
#!/bin/bash
##判断两个数的大小关系##
compare()
{
if [ "$1" -eq "$2" ]
then
return 0
elif
[ "$1" -gt "$2" ]
then
return 1
else
return 2
fi
}
compare $1 $2
case $? in
0)
echo "$1 = $2"
;;
1)
echo "$1 > $2"
;;
2)
echo "$1 < $2"
;;
esac
运行结果:
[root@desktop ~]# ./test06.sh 1 2
1 < 2
[root@desktop ~]# ./test06.sh 2 1
2 > 1
[root@desktop ~]# ./test06.sh 2 2
2 = 2
特殊的函数调用
特殊函数符号
.()
{
.|. &
}
;
.
第 1 行说明下面要定义一个函数,函数名为小数点,没有可选参数。
第 2 行表示函数体开始。
第 3 行是函数体真正要做的事情,首先它递归调用本函数,然后利用管道调用一个新进程(它要做的事情也是递归调用本函数),并将其放到后台执行。
第 4 行表示函数体结束。
第 5 行并不会执行什么操作,在命令行中用来分隔两个命令用。从总体来看,它表明这段程序包含两个部分,首先定义了一个函数,然后调用这个函数。
第 6 行表示调用本函数。