函数
1.什么是函数
在编写脚本时,有些脚本可以反复使用,可以调用函数来解决
语句块定义成函数约等于别名
函数使用方法:
- 定义函数
- 再引用函数
基本格式
function 函数名{
命令序列
}
函数名(){
命令序列
}
function func_name () {
…函数体…
}
注意事项
- 直接写 函数中调用函数 直接写函数名
- 同名函数 后一个生效
- 调用函数一定要先定义
- 只要先定义了调用的 其他函数定义顺序无关
func_name (){
...函数体...
}
[root@yyds opt]#func1 (){ hostname;date;}
[root@yyds opt]#func1
yyds
2023年 08月 15日 星期二 18:19:33 CST
[root@yyds opt]#vim func.sh
h () {
echo "hello"
}
nihao () {
echo `h` `w`
}
w () {
echo "world"
}
nihao
[root@yyds opt]#bash func.sh
hello world
//同名函数会进行覆盖
2.查看函数
[root@yyds opt]#declare -F
declare -f __HOSTNAME
declare -f __SIZE
declare -f __SLAVEURL
declare -f __VOLNAME
declare -f __expand_tilde_by_ref
declare -f __get_cword_at_cursor_by_ref
declare -f __git_aliased_command
declare -f __git_aliases
..............
//函数列表,可以declare -f __HOSTNAME查看内容
3.删除函数
unset func_name
[root@yyds opt]#unset h w nihao
4.函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
退出码必须是0-255,超出的值将为除以256取余
test1 () {
read -p "请输入一个数字:" num
return $[$num*2]
}
test1
echo $?
[root@yyds opt]#bash return.sh
请输入一个数字:34
68
5.函数的传参数
函数变量的作用范围:
函数在shell脚本中仅在当前的shell环境中有效
shell脚本中函数的变量默认全局有效
将变量限定在函数内部使用local命令
#!/bin/bash
sum1 (){
echo $1
echo $2
}
sum1 $2 $1
[root@yyds opt]#bash chuan.sh 2 5
5
2
//sum1 后面的$2对应这sum1函数里面的$1
[root@localhost opt]# vim demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
[root@localhost opt]# chmod +x demo8.sh
[root@localhost opt]# ./demo8.sh
8
[root@localhost opt]# vim demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
echo $i
[root@localhost opt]# ./demo8.sh
8
8
[root@localhost opt]# ./demo8.sh
8
8
[root@localhost opt]# cat demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
i=9
myfun
echo $i
[root@localhost opt]# ./demo8.sh
8
8
[root@localhost opt]# cat demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
i=9
echo $i
[root@localhost opt]# ./demo8.sh
8
9
[root@localhost ~]#name=666
[root@localhost ~]#func1 () { name=99 ; echo $name; }
[root@localhost ~]#func1
99
[root@localhost ~]#echo $name
99
[root@localhost ~]#name=666;func1 () { local name=99 ;echo $name; };echo $name
#加上local变量即可将变量限制在函数内
666
6.函数文件
建立存放函数的文件
可以建立一个文件用来存储函数,下次要使用函数时可以
. 文件名
函数名
进行使用
7.函数递归
函数调用自己本身的函数
阶乘
使用for循环
#!/bin/bash
sum=1
read -p "请输入一个数:" num
for i in `seq $num`
do
let sum=$[i*sum]
done
echo $sum
函数调用自己
#!/bin/bash
#
fact() {
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
fact $1
阶乘
fact() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
read -p "请输入:" n
result=$(fact $n)
echo $result