1、定义
将命令序列按照格式写在一起。
格式指的是函数的固定格式,有两种格式
2、作用
(1)方便重复使用
形成一个函数库,集中在一起,随时可以传参调用。
(2)大的工程分割成若干个小的功能模块,提高代码的可读性
3、函数的格式
格式1:
function 函数名 {
命令序列
}
函数名(传参)
格式2:
函数名 () { 命令序列 }
4、return的作用
return只能写在函数的内部,目的是从函数的内部获取一个返回值,用来判断是否继续执行下一个脚本。
echo $? 这个时候不再是判断执行结果,只是一个函数内部的返回值。
在使用return传返回码的时候,默认0是成功,非0都是失败
返回码可以自定义,范围0-255
function qqq { read -p "输入一个数:" num if [ $num -eq $num ] &> /dev/null then a=$(($num*4)) return 0 else echo "输入错误" return 1 fi } qqq if [ $? -eq 0 ] then echo "ok" else exit fi
5、函数的传参方式以及函数变量的作用范围
在函数内部定义了全局变量,外部的赋值是不能改变内部函数的全局变量的
加了local之后就是函数内部的变量,而不再是全局变量,外部的赋值会替换内部的变量值
6、函数递归
函数调用自己本身的函数
阶乘:4的阶乘 4×3×2×1=24
用函递归的方式来实现阶乘
echeng () { if [ $1 -eq 1 ] then echo 1 else local temp=$(($1-1)) local result=$(jiecheng $temp) echo "$(($1*$result))" fi } read -p "输入一个数:" num result1=`jiecheng $sum` echo $result1
递归目录,把/etc目录下所有的文件递归出来,如果只是目录且该目录下没有文件就打印目录,否则继续打印,直到目>录里面没有文件为止。
digui () { for file in `ls $1` do if [ -d "$1/$file" ] then echo $file digui "$1/$file" else echo "$file" fi done } digui $1
7、函数库
函数库中只包含定义的函数,由另外一个脚本传入参数来调用我们定义的函数
jiafa () {
result=$(($1+$2))
echo $result
}
jianfa () {
result=$(($1-$2))
echo $result
}
chengfa () {
result=$(($1*$2))
echo $result
}
. /opt/hanshu.shread -p "输入第一个数:" num1
read -p "输入第二个数:" num2
sum=`jiafa $num1 $num2`
sub=`jianfa $num1 $num2`
mult=`chengfa $num1 $num2`
echo $sum
echo $sub
echo $mult