shell脚本函数的创建与使用
函数是一个脚本代码块,你可以对它进行自定义命名,并且可以在脚本中任意位置使用这个函数,要使用这个函数,只要使用这个函数名称就可以了。使用函数的好处:模块化,代码可读性强。
函数创建语法
方法1:
function name {
commands
}
注意:name是函数唯一的名称
方法2:name后面的括号表示你正在定义一个函数
name(){
commands
}
调用函数语法:
函数名 参数1 参数2 …
调用函数时,可以传递参数。在函数中用$1、$2…来引用传递的参数
函数的使用
例1:
[root@xuegod63 ~]# cat fun-1.sh
#!/bin/bash
function fun_1 { #定义函数
echo "this is function"
}
fun_1 #调用函数
注意:函数名的使用,如果在一个脚本中定义了重复的函数名,那么以最后一个为准
[root@xuegod63 ~]# cat fun-1.sh
#!/bin/bash
function fun_1 {
echo "this is function"
}
function fun_1 {
echo "this is 2222222"
}
fun_1
[root@xuegod63 ~]# bash fun-1.sh
this is 2222222
返回值
使用return命令来退出函数并返回特定的退出码
例1:
[root@xuegod63 ~]# vim fun-1.sh
#!/bin/bash
function fun_1 {
echo "this is function"
ls /etc/passwd
return 3
}
fun_1
[root@xuegod63 ~]# bash fun-1.sh #查看结果
this is function
/etc/passwd
[root@xuegod63 ~]# echo $?
3
注:状态码的确定必需要在函数一结束就运行return返回值;状态码的取值范围(0~255)
互动: exit 数字 和return 数字的区别?
exit整个脚本就直接退出,往回数字 ; return 只是在函数最后添加一行,然后返回数字,只能让函数后面的命令不执行,无法强制退出整个脚本的。
把函数值赋给变量使用
例子: 函数名就相当于一个命令
[root@xuegod63 ~]# cat fun-3.sh
#!/bin/bash
fun1(){
read -p "Input a value: " va
echo $[$va*5]
}
num=$(fun1)
echo current num is $num
[root@xuegod63 ~]# sh fun-3.sh
Input a value: 22
current num is 110
函数的参数传递
第一种:通过脚本传递参数给函数中的位置参数$1
[root@xuegod63 ~]# cat fun-4.sh a.txt
#!/bin/bash
fun1(){
rm -rf $1
}
fun1 $1
第二种:调用函数时直接传递参数
[root@xuegod63 ~]# touch /root/a.txt #创建一个测试文件
[root@xuegod63 ~]# cat fun-4.sh
#!/bin/bash
fun1(){
rm -rf $1
}
fun1 /root/a.txt
[root@xuegod63 ~]# bash fun-1.sh #测试
[root@xuegod63 ~]# ls /root/a.txt
ls: 无法访问/root/a.txt: 没有那个文件或目录
第三种:函数中多参数传递和使用方法
[root@xuegod63 ~]# cat fun-5.sh
#!/bin/bash
fun1(){
echo $[$1*5]
echo $[$2*2]
}
fun1 5 2 #直接传两个参数
[root@xuegod63 ~]# bash fun-1.sh #测试
25
4
函数中变量的处理
函数使用的变量类型有两种:
局部变量
全局变量
1、全局变量,默认情况下,你在脚本中定义的变量都是全局变量,你在函数外面定义的变量在函数内也可以使用
例子:
[root@xuegod63 ~]# cat fun-5.sh
#!/bin/bash
function fun1 {
num1=$[var1*2]
}
read -p "input a num:" var1
fun1
echo the new value is: $num1
[root@xuegod63 ~]# bash fun-1.sh
input a num:2
the new value is: 4