1、了解函数
(1)什么是函数
函数其实就是一堆命令的合集,用来完成特定功能的代码块,你可以对他进行自定义命名,并且可以在脚本中任意位置使用这个函数,只需要填写函数名称就可以了
(2)函数的使用
- 使用函数可以让代码模块化,便于代码复用,同时增加脚本的可读性
- 函数和变量类似,必须先定义才可以调用,如果定义不调用,则不会被执行
2、 定义函数的方式
方式一
[root@node3 /server/scripts]# cat function1.sh
#!/bin/bash
# 方式一
meminfo (){
command1
command2
command3
}
方式二
#!/bin/bash
# 方式二
function 函数名 {
command1
command2
command3
}
3、函数使用举例
示例(1)函数基本使用
[root@node3 /server/scripts]# cat function3.sh
#!/bin/bash
meminfo () {
echo "hello world"
}
meminfo #函数直接调用即可
[root@node3 /server/scripts]# sh function3.sh
hello world
[root@node3 /server/scripts]#
示例(2) 函数中使用位置变量
[root@node3 /server/scripts]# fun2() { echo "hello,$1"; }
[root@node3 /server/scripts]# fun2
hello,
[root@node3 /server/scripts]# fun2 tt
hello,tt
[root@node3 /server/scripts]#
示例(3)函数中使用位置变量
[root@node3 /server/scripts]# fun2() { echo "hello,$*"; }
[root@node3 /server/scripts]# fun2
hello,
[root@node3 /server/scripts]# fun2 tt1 ttt2 tt3 tt4
hello,tt1 ttt2 tt3 tt4
[root@node3 /server/scripts]#
(4) 对函数中的变量赋值
[root@node3 /server/scripts]# cat function4.sh
#!/bin/bash
#使用变量对函数赋值
meminfo (){
echo $num
}
num=10
meminfo
[root@node3 /server/scripts]# sh function4.sh
10
[root@node3 /server/scripts]#
示例(5) 函数传参传,传递多个参数
[root@node3 /server/scripts]# cat function5.sh
#!/bin/bash
# 函数传参,传递多个位置参数
info() {
echo $1
}
info $1 #接收第一个位置参数,传入函数算第一个参数
info $2 #接收第二个位置参数,传入函数算第一个参数
info $3 #接收第三个位置参数,传入函数算第一个参数
[root@node3 /server/scripts]# sh function5.sh 10 20 30
10
20
30
[root@node3 /server/scripts]#
示例(6) 函数传参,传递多个参数
[root@node3 /case/scripts/fun]# cat fun05.sh
#!/usr/bin/bash
fun_1(){
echo "$1" "$1" "$3" #函数接收传递三个参数
}
#rc=$(fun_1 10 20 30) #传递固定的值
rc=$(fun_1 $1 $2 $3) #传递可变的值
echo "传递参数的值为,$rc"
[root@node3 /case/scripts/fun]#
[root@node3 /case/scripts/fun]# sh fun05.sh 20 30 40
传递参数的值为,20 20 40
[root@node3 /case/scripts/fun]#
示例(7) 函数传参,传递多个参数
[root@node3 /case/scripts/fun]# cat fun06.sh
#!/usr/bin/bash
fun_1(){
echo "$num1" "$num2" "$num3"
}
num1=$1 #将脚本位置参数一的值传递给变量num1
num2=$2 #将脚本位置参数二的值传递给变量num2
num3=$3 #将脚本位置参数三的值传递给变量num3
rc=$(fun_1) #将函数执行的结果保存至rc变量中,便于后续echo输出
echo "传递参数的值为,$rc"
[root@node3 /case/scripts/fun]# sh fun06.sh 20 30 40
传递参数的值为,20 30 40
[root@node3 /case/scripts/fun]#
4、函数状态返回
shell 的函数返回值,也算是退出的状态。在shell中值echo和return两种方式
-
return:使用return返回值,只能返回1-255的整数,函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常仅返回0或1,0表示成功,1表示失败。
-
echo: 使用echo返回值,使用echo可以返回任何字符串结果,通常用于返回数据,比如一个字符或者列表值
举例函数返回值的使用
根据函数的返回值来判断下面的脚本
[root@node3 /case/scripts/fun]# cat fun09.sh
#!/usr/bin/bash
#本示例没有任何实际意义,纯粹为了展示函数返回值得使用场景
checknum(){
read -p "请输入对应的数字:" num
if [ $num -ge 0 -a $num -lt 10 ];then
return 0
elif [ $num -ge 10 -a $num -lt 20 ];then
return 1
elif [ $num -ge 20 -a $num -lt 30 ];then
return 2
else
return 3
fi
}
# 调用函数,函数执行后会通过return返回对应的状态码
checknum
#根据函数返回值进行判断
case $? in
0)
echo "你输入的数字是,$num,大于0小于10"
;;
1)
echo "你输入的数字是,$num,大于10小于20"
;;
2)
echo "你输入的数字是,$num,大于20小于30"
;;
*)
echo "输入错误..."
esac
[root@node3 /case/scripts/fun]#
网友评论