1.语法
方法1:
函数名() {
函数体
return n
}
方法2:
function 函数名() {
函数体
return n
}
其中return n 是表示函数的返回值
2.调用函数
函数的调用是输入函数名,下面的fun1就是调用上面函数
#!/bin/bash
function fun1() {
echo "I like westos"
}
fun1
3.引用函数
每次引用函数时,bash会重新回到函数的定义
#!/bin/bash
function fun1() {
echo "I am a boy~"
}
count=1
while [ $count -le 5 ]
do
fun1
count=$[ $count + 1 ]
done
echo "End of loop"
fun1
echo "End of script"
这个脚本执行的话为:每一次调用函数都会回到函数定义的 i am a boy
[root@localhost mnt]# sh hhh.sh
I am a boy~
I am a boy~
I am a boy~
I am a boy~
I am a boy~
End of loop
I am a boy~
End of script
4.函数不一定要在最开始定义,但是如果函数在定义前就使用,会报错
下面的函数fun2 在定义前进行了调用,所以执行时会报错
#!/bin/bash
count=1
echo "Before function definition"
function fun1() {
echo "fun1"
}
while [ $count -le 5 ]
do
fun1
count=$[ $count + 1 ]
done
echo "End of loop"
fun2
function fun2() {
echo "fun2"
}
执行结果:
[root@localhost mnt]# sh hhh.sh
Before function definition
fun1
fun1
fun1
fun1
fun1
End of loop
hhh.sh: line 18: fun2: command not found
5.函数名必须是唯一的,如果重新定义了函数,新的函数会覆盖旧的
#!/bin/bash
function fun1() {
echo "first fun1"
}
fun1
function fun1() {
echo "second fun1"
}
fun1
function fun1() {
echo "third fun1"
}
echo "End"
执行结果:三个函数均用的时fun1这个函数名,所以在每次调用函数的时候,都会覆盖前一个函数
[root@localhost mnt]# sh hhh.sh
first fun1
second fun1
third fun1
End
[root@loca
6.返回值
1)默认退出状态码:默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码
#!/bin/bash
function fun1() {
echo "trying to display a non-existent file"
ls -l westosfile &> /dev/null
}
echo "test the function:"
fun1
echo "The exit status is : $?"
上面输出的$?为fun1所执行的返回的函数值,由于westosfile这个文件不存在,所以返回值非0
2)使用return命令
shell使用return命令来退出函数并返回特定的退出状态码
#!/bin/bash
function db1() {
read -p "Enter a value:" value
echo "doubling the value..."
return $[ $value * 2 ]
}
db1
echo "The new value is $?"
[root@localhost mnt]# sh hhh.sh
Enter a value:2
doubling the value...
The new value is 4
3)使用函数输出
将函数的输出保存在shell变量中
可以获得任何类型的函数输出
并将其保存到变量中
#!/bin/bash
function db1() {
read -p "Enter a value:" value
echo $[ $value * 2 ]
}
result=`db1`
echo "The new value is $result"
4)函数中使用变量
可以向函数中传递参数
函数名会再$0变量中定义,函数命令行上的任何参数都会
通过$1,$2定义
$#来判断传给函数的参数数目
#!/bin/bash
function fun1() {
echo $[ $1 * $2 ]
}
if [ $# -eq 2 ];then
value=`fun1 $1 $2`
echo "The result is $value"
else
echo "Usage:fun1 a b"
fi
执行结果:
[root@localhost mnt]# sh hhh.sh
Usage:fun1 a b
[root@localhost mnt]# vim hhh.sh
[root@localhost mnt]# sh hhh.sh 2 3
The result is 6
5)函数不能直接从命令行获取脚本的参数值