shell编程之函数
函数的作用就是将程序里多次被调用的相同的代码组合起来(函数体),为其取个名字(函数名),其它所有想重复调用这部分代码的地方都只需要调用这个名字
函数的优势:
把相同的程序定义成函数,可以减少程序的代码量,提升开发效量
增加程序的可读、易读性,提升管理效率
可以实现程序功能模块化,使程序具备通用性(可移植性)
1.shell函数语法
方法一:
function 函数名() {
指令集...
return n
}
方法二:
function 函数名 {
指令集...
return n
}
方法三:
函数名() {
指令集...
return n
}
1.1 函数的执行
1.不带参数的函数执行时,直接输入函数名即可(不带小括号):格式如下:函数名
有关执行函数的重要说明:
执行函数时,函数名前的function和函数后的小括号都不要带
函数的定义必须要在执行前面定前或加载
shell执行系统中各种程序的顺序为:系统别名-函数-系统命令-可执行文件
函数执行时,会和调用它的脚本共用变量,可以为函数设定局变变量以及特殊位置参数
在shell函数里,return命令功能与exit类似,作用是退出函数,而exit是退出脚本文件
return语句会返回一个退出值(返回值)给调用函数的当前程序,而exit会返回一个退出值给执行程序的当前shell
如果函数存放在独立的文件中,被脚本加载使用时,需要使用source或.来加载
在函数内一般使用local定义局部变量,这些变量离开函数后即消失
2.带参数函数的执行方法,格式如下:函数名 参数1 参数2
函数后接参数说明:
shell的位置参数$1、$2....$#、$*、$?、$@都可以作为函数的参数使用
此时父脚本的参数临时的被函数参数所掩盖或隐藏
$0比较特殊,它仍是父脚本的名称
当函数执行完成时,原来的命令脚本参数即恢复
函数的参数变量是在函数体里面定义的
1.2 简单函数执行
oldboy() {
echo "I am oldboy"
}
oldboy
function oldgirl() {
echo "I am oldgirl"
}
oldgirl
function test {
echo "this is test"
}
test
1.3 带参数函数执行
[root@ci-node1 scripts]# cat 12.sh.1
#!/bin/bash
##############################################################
# File Name: 12.sh
# Version: V1.0
# Author: liu
# Organization:
# Created Time : 2019-04-12 10:36:48
# Description:
##############################################################
oldboy() {
echo "I am $1"
}
oldboy $1
ps:从接收脚本参数,然后将收到参数传给函数
2.函数案例
2.1 通过脚本传参的方式,检查Web 网站URL是否正常
使用命令访问url命令:
wget命令:
--spider:模拟爬虫
-q:安静访问
-o /dev/null:不输出
-T --timeout 超时时间
-t --tries 重试次数
wget --spider -T 5 -q -o /dev/null -t 2 www.baidu.com
curl命令:
-I 看响应头
-s 安静的
-o /dev/null 不输出
-w %{http_code} 返回状态码,200
curl -I -m 5 -s -w "%{http_code}
" -o /dev/null www.baidu.com
案例:
[root@ci-node1 scripts]# cat 13.sh
#!/bin/bash
##############################################################
# File Name: 13.sh
# Version: V1.0
# Author: liu
# Organization:
# Created Time : 2019-04-12 18:07:02
# Description:
##############################################################
chekurl() {
wget --spider -o /dev/null -T 5 $1
if [ $? -ne 0 ]
then
echo "网站url不正常!"
else
echo "网站正常"
fi
}
usage() {
echo "Usage:$0 url"
}
main() {
if [ $# -ne 1 ]
then
usage
else
chekurl $1
fi
}
main $*