shell脚本 函数

函数

1.什么是函数

在编写脚本时,有些脚本可以反复使用,可以调用函数来解决

语句块定义成函数约等于别名

函数使用方法:

  1. 定义函数
  2. 再引用函数

基本格式

function 函数名{

​ 命令序列

}

函数名(){

命令序列

}

function func_name () {

…函数体…

}

注意事项

  1. 直接写 函数中调用函数 直接写函数名
  2. 同名函数 后一个生效
  3. 调用函数一定要先定义
  4. 只要先定义了调用的 其他函数定义顺序无关
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

猜你喜欢

转载自blog.csdn.net/q1231vev/article/details/132397790