领卷网站怎么做,wordpress 会员购买系统,微信里的小程序游戏怎么删除,手机网站建设制作教程视频教程shell函数的定义
定义:将命令序列按照格式写在一起.格式指的是函数的固定格式
作用:方便重复使用,还可以做成函数库,集中在一起,随时可以传参调用,大的工程分割成小的模块,提高代码的可读性.
函数的格式
vim hanshu1.shfunction shopping {命令序列}shopping () {命令…shell函数的定义
定义:将命令序列按照格式写在一起.格式指的是函数的固定格式
作用:方便重复使用,还可以做成函数库,集中在一起,随时可以传参调用,大的工程分割成小的模块,提高代码的可读性.
函数的格式
vim hanshu1.shfunction shopping {命令序列}shopping () {命令序列}示例
function abc {read -p 输入一个数 numa$(($num*2))echo $a
}
abc:wq
函数返回值
return的作用
只能写在函数的内部,目的是从函数的内部获取一个返回值,用来判断是否继续执行下一个脚本.
在使用return $?传返回码的时候,默认0是成功,非0都是失败,返回码可以自定义,范围是0-255之间,超过了就会大数字/255,取余
function abc {read -p 输入一个数 numa$(($num*2))return $a #return改变了$?的状态码性质,不再代表成功或失败,只代表返回的数字
}
abc
echo $?
:wq函数的传参方式以及函数变量的作用范围
脚本内部传参
sum () {num$(($1$2))echo $num
}
read -p 第一个数字 num1
read -p 第一个数字 num2
sum $num1 $num2脚本外部
vim chuancan.sh
sum () {num$(($1$2))echo $num
}
sum $1 $2
:wqbash chuancan.sh 1 2abc (){a5b6
}
a8
b9
abc
echo $a
echo $b
在函数内部定义了全局变量,外部的赋值是不能改变内部函数的全局变量的[[ $num ~ ^-?[0-9]$ ]]abc (){local a5local b6c10
}
a8
b9
abc
echo $a
echo $b
echo $c
在加了local之后,就是函数内部的变来那个,而不再是全局变来那个,外部的赋值会替换内部的变量
abc (){echo inside1 $a let alocal aecho inside3 $aa8echo inside2 $a
}
a9
abc
echo outside $a
函数递归
函数调用自己本身的函数
阶乘举例
4的阶乘 4*3*2*124
vim jc.shjiecheng (){if [[ $1 -eq 1 ]]thenecho 1elselocal temp$(($1-1))local result$(jiecheng $temp)echo $(($1*$result))fi}read -p 输入一个数字 numresult1jiecheng $numecho $result1函数库
函数库中,只包含定义的函数,由另外一个脚本传入参数来调用我们定义的函数
vim jisuanhanshuku.sh
jiafa() {result$( echo $1$2 | bc )echo $result
}jianfa() {result$( echo $1-$2 | bc )echo $result
}chengfa() {result$( echo $1*$2 | bc)echo $result
}练习1
递归目录.把/etc/目录下,所有文件递归出来
如果只是目录,且该目录下没有文件,就打印目录,否则继续打印,直到目录里面没有文件为止
mulu () {for file in ls $1doif [[ -d $1/$file ]]thenecho $filemulu $1/$fileelseecho 这是个文件,直接打印echo $filefi
done
}
mulu $1练习2
把后缀名是.txt的文件复制到/opt/dec当中 mulu () {for file in ls $1doif [[ -d $1/$file ]]thenecho $filemulu $1/$fileelseecho 这是个文件,直接打印 $fileif [[ $file *.txt ]]thencp $file /opt/dec/fifi
done
}
mulu $1练习3
函数库加减乘除,要求小数和整数都可以运算,小数点后两位
vim jisuanhanshuku.sh
jiafa() {result$( echo scale2; $1$2 | bc )echo $result
}jianfa() {result$( echo scale2; $1-$2 | bc )echo $result
}chengfa() {result$( echo scale2; $1*$2 | bc)echo $result
}
chufa(){result$( echo scale2; $1/$2 | bc)echo $result
}vim jisuan.sh
. /root/jisuanhanshuku.sh
read -p 请输入第一个数 num1
read -p 请输入第二个数 num2
sumjiafa $num1 $num2
subjianfa $num1 $num2
multchengfa $num1 $num2echo $sum
echo $sub
echo $mult