Shell 函数
命令序列按照格式写在一起,用函数的方式调用并进行重复使用命令序列。这就是它的核心作用
使用函数可以避免代码重复,函数可以将大的工程分割成若干小的功能模块,提高代码的可读性。
函数的基本格式写法有两种,如下:
第一种方式:
第二种写法:
区别在于function可以替换为括号()
return
return:表示退出函数并返回一个退出值,用$?可以显示这个值,return一般会写在函数最后一行退出值是有范围的:0—255,超过255会除以256再取余
shell脚本中return的返回值默认就是0,或者非0的返回码,在shell脚本中意义不大,主要是作为判断结果,判断函数的执行情况。
exit:作用于整个脚本,立即终止,没有返回码,脚本会立刻停止运行
exit 0 :表示程序正常结束
exit 1 :程序是异常退出的
$?:在shell脚本中就是exit 0
函数传参:在shell中,调用函数可以传递参数,位置变量来传参,我们在函数内部可以定义位置变量。
在函数中,local仅用于函数的内部变量;定义了local变量就代表内部变量,只能用在函数内部;不加就是默认为全局变量。如:
递归函数
函数调用自己本身的函数,
例:用函数递归的方式,写一个阶乘,要求阶乘数可以自定义
以求6的阶乘为例,6被调用到函数的命令序列当中,先判断是否为1,6不为1执行else,6在函数内部执行减1(temp)并且和6再相乘,并且函数重复执行,直到最后值为1
local result=$(abc $temp) 意思为 abc调用 local temp=$(($1-1)) 中得到的数,得到的数进入函数的命令序列 并且每次减一都调用一次循环执行直到最后得到的值为1不再进行判断,最后把累乘的结果打印出来
例:函数调用自己,打印出自定义目录下所有的目录和文件 /opt目录下
实验
1. 判断return值
[root@localhost opt]# vim ggg.sh
ky30 () {
read -p"输入一个数字:“ a
a=$(($a*2))
return
}
ky30
#如果这个运算结果不正确,
a=10.88
result=$?
echo $?
#这种情况下,return的值,是多少呢?
此时return值为非0
2. 使用函数库,创建一个yum源,然后要在脚本中安装一个服务nginx
[root@localhost opt]# vim ck.sh
ck () {
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
yum -y install epel-release.noarch
}
az () {
yum -y install $1
}
vim dy.sh
./opt/hanshuku.sh
ck
read -p "输入要安装的软件" a
az $a