网站建设和管理是教什么科目,wordpress 开发版 视频教程,产品包装设计网,温州做网站设计文章目录 一、函数的定义1.1 shell函数:1.2函数如何定义 二、函数的返回值三、函数的传参四、函数变量的作用范围五、函数的递归六、函数库 一、函数的定义
1.1 shell函数:
使用函数可以避免代码重复使用函数可以将大的工程分割为若干小的功能模块#xff0c;代码的可读性更… 文章目录 一、函数的定义1.1 shell函数:1.2函数如何定义 二、函数的返回值三、函数的传参四、函数变量的作用范围五、函数的递归六、函数库 一、函数的定义
1.1 shell函数:
使用函数可以避免代码重复使用函数可以将大的工程分割为若干小的功能模块代码的可读性更强
1.2函数如何定义
法一
[function] 函数名 (){命令序列[return x]
}法二
函数名(){命令序列
}二、函数的返回值
1、在函数内用return退出函数并返回函数的值在函数外用echo $?获取返回值注:返回值的范围只能在0~255超过部分需除以256取余
编写一个脚本查看他的返回数
执行脚本 可以看出$?的返回值是有上限的返回值的范围只能在0~255超过部分需除以256取余
2、在函数内用echo输出值在函数体外可用变量$(函数名获取函数的返回值
编写一个脚本 执行脚本 可以看出相较于$?没有取值的范围。
三、函数的传参
在Shell中调用函数时可以向其传递参数。在函数体内部通过 $n 的形式来获取参数的值例如$1表示第一个参数$2表示第二个参数…即使用位置参数来实现参数传递。
示例 结果 示例 结果 函数体内部的$1 $2代表的是调用函数时函数后面跟的位置参数 函数体外的$1 $2代表的是执行脚本时脚本后面跟的位置参数 在函数体内部的$#代表调用函数时函数后面跟的参数个数 在函数体内部的$ $*代表调用函数时函数后面跟的所有参数 在函数体外时$#代表脚本后面跟的参数个数 在函数体外时$ $*代表脚本后面跟的所有参数
四、函数变量的作用范围
1、函数在Shell脚本中仅在当前脚本Shell环境中有效使用source/. 执行脚本也会影响系统的当前Shell环境 2、Shell脚本中变量默认全局有效 3、将变量限定在函数内部使用local命令 4、系统Shell环境脚本Shell环境函数Shell环境
示例一
[rootlocalhost ~]# vim test5.sh
#!/bin/bash
myfun () {echo $namenamefengchuecho $name
}
namewolong
myfun
echo $name
[rootlocalhost ~]# sh test5.sh
wolong
fengchu
fengchu实例二
[rootlocalhost ~]# vim test5.sh
#!/bin/bash
myfun () {echo $namelocal namefengchuecho $name
}
namewolong
myfun
echo $name
[rootlocalhost ~]# sh test5.sh
wolong
fengchu
wolong五、函数的递归
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身每调用一次就进入新的一层。所以递归要有两个基本要素结束条件与递推关系。
递归的两个基本要素 1.边界条件确定递归到何时结束也被称为递归的出口 2.递归所使用的模式大问题分解成小问题。递归函数只有具有上述两个条件才能计算出结果。
示例一求阶乘
#!/bin/bash
fact() {
if [ $1 -eq 1 ]
thenecho 1
elselocal temp$[$1-1]local res$(fact $temp)echo $[$1 * $res]
fi
}
read -p 请输入一个数 n
res$(fact $n)
echo $res
[rootlocalhost opt]# sh digui.sh
请输入一个数5
120
[rootlocalhost opt]# sh digui.sh
请输入一个数6
720示例二使用递归查询目录 使用函数递归目录/var/log如果是文件直接输出文件名如果是目录则输出目录名且输出此目录下的所有目录和文件名
[rootlocalhost opt]# vim digui2.sh
#!/bin/bash
list () {
for f in $(ls $1)
doif [ -d $1/$f ]thenecho $2这是目录$flist $1/$f $2elseecho $2这是文件$ffi
done
}
list /opt
[rootlocalhost opt]# sh digui2.sh这是目录aa这是目录bb这是目录cc这是目录dd这是文件123.txt这是文件digui2.sh这是文件digui.sh这是目录rh这是文件test2.sh这是文件test3.sh这是文件test4.sh这是文件test.sh六、函数库
如果我们能拥有或者编写过很多有价值的函数能够具体实现某一功能的那种函数我们在想运用的时候希望能够跨文件调用这些在Linux中shell脚本也能实现只要进行函数库文件的搭建后期就能在编写脚本时进行直接调用 函数库所存文件为普通文件即可但是函数的格式一定要规范有能传参的设置。 后面进行调用时可以通过 “.”和“source”来进行跨文件调用
创建一个函数库
[rootlocalhost opt]# vim ku.sh
#!/bin/bash
jiafa(){echo $[$1 $2]
}jianfa(){echo $[$1 - $2]
}chengfa(){echo $[$1 * $2]
}chufa(){if [ $2 -eq 0 ]thenecho 除数不可为0elseecho $[$1 / $2]fi
}fact(){if [ $1 -eq 1 ];thenecho 1elif [ $1 -gt 1 ]thenlocal tmp$[$1 - 1]local res$(fact $tmp)echo $[$1 * res]elseecho 输入的值无效请输入大于等于1的整数fi
}在其他的shell脚本中执行函数 [rootlocalhost opt]# vim test6.sh
#!/bin/bash
. /opt/ku.shread -p 请输入一个正整数 num1
read -p 请输入二个正整数 num2res1$(jiafa $num1 $num2)
res2$(jianfa $num1 $num2)
res3$(chengfa $num1 $num2)
res4$(chufa $num1 $num2)
res5$(fact $num1 $num2)echo 加法的结果为$res1
echo 减法的结果为$res2
echo 乘法的结果为$res3
echo 除法的结果为$res4
echo 阶乘的结果为$res5
[rootlocalhost opt]# sh test6.sh
请输入一个正整数5
请输入二个正整数2
加法的结果为7
减法的结果为3
乘法的结果为10
除法的结果为2
阶乘的结果为120