shell 编程函数

函数

简单地说,函数的作用就是将程序里面多次被调用的相同代码组合起来(函数体),并为其取个名字(函数名)。其他所有想重复调用这部分代码的地方,只需要调用这个名字就好了。可以把函数独立的写到文件里,当需要调用函数时候,再加载进来使用。下面是使用shell函数的有事:
 把相同的程序段定义成函数,可以减少整个程序的代码量,提升开发效率
 增加程序的可读、易读性、提升管理效率
 可以实现程序功能模块化,使得程序具备通用性(可移植性)
 对于Shell来说,Linux系统里面近2000个命令都可以说是shell的函数。所以shell的函数还是很多的,这一点需要读者注意

函数语法

shell函数的常见语法格式,其标准写法为:

function 函数名(){   # 推荐书写函数的方法(带括号)
指令集...
return n
}

简化写法1:

function 函数名 {   # 不推荐使用此方法(无括号,函数名和左花括号之间需要有空格。)
指令集...
return n
}

简化写法2:

函数名(){   # 不用function的方法
指令集...
return n
}

函数执行

Shell函数分为最基本的函数和可以传参的函数两种,其执行方式分别说明如下:

不带参数的函数

不带参数的函数执行时,直接输入函数名即可(注意不带小括号)。格式如下:
函数名
有关执行函数的重要说明:
 执行Shell函数时候,函数名前面的function和函数后的小括号都不要带
 执行函数必须要在执行前定义或加载好(先定义再执行)
 Shell执行系统中各种程序的顺序为:系统别名-->函数-->系统命令-->可执行文件
 在Shell里面,return功能与exit类似,作用是退出函数,而exit是退出脚本文件。
 如果函数存放于独立的文件中,被脚本加载使用时,需要使用source或者. 来加载。
 函数执行时,会和调用它的脚本共用变量,也可以为函数设定局部变量以及特殊位置参数
 在函数内一般使用local定义局部变量,这些变量离开后即消失。

带参数的函数

带参数的函数执行方法,格式如下

函数名 参数1 参数2

函数后接的参数说明:
 Shell的位置函数(1、2...、#、*、?、@)都可以做作为函数的参数使用
 此时父脚本的参数临时的被函数参数所掩盖或隐藏
 $0比较特殊,依然是父脚本的名称
举例说明:

[root@oldboy ~]# cat func1.sh 
#!/bin/bash
function hello(){
    echo "hello $1"
}
hello oldchang

[root@oldboy ~]# sh func1.sh 
hello oldchang

练习
通过以上举例,思考,如何把参数通过执行脚本传递给函数?

function hello(){
echo $*
}
hello $*                        
[root@shell ~]# sh  hello.sh hello word
hello word

附录

0.1 监控Web服务和Mysql数据库服务是否异常的方法
1)端口监控 a.服务器本地监控服务端口的常见命令有:netstat、ss、lsof
b.从远端监控服务器本地端口的命令有telnet、nmap
2)对服务进程或者进程数监控 此方法适合本地服务器,注意,过滤的是进程名字,命令为
ps -ef | grep nginx | wc -l
ps -ef | grep mysql | wc -l
3)客户端模拟用户访问 使用wget或者curl命令进行测试(如果监测数据库则需要转为通过web服务器访问数据库),并对测试结果判断:
1) 利用返回值(echo $?)判断
2) 利用特殊字符串判断(需要事先开发程序)
3) 根据http响应header情况判断
4)登陆MySQL数据库判断 通过mysql客户端连接数据库,根据返回值或者返回内容判断,例如:mysql -uroot -peoor -e “select version()” &>/dev/null
示例:

# 使用第一种方式测试
netstat -ntlup | grep nginx | wc -l
ss -ntlup | grep nginx | wc -l
lsof -i :80 | wc -l
echo -e "\n" | telnet 127.0.0.1 22  2> /dev/null | grep Connected | wc -l
nmap 127.0.0.1 -p 22 | grep open | wc -l
# 使用第三种方式测试
wget -q 127.0.0.1:80 &> /dev/null ; echo $?
curl -s 127.0.0.1:80 2> /dev/null ; echo $?

0.2 自定义控制系统服务脚本

[root@oldboy ~]# cat /usr/lib/systemd/system/rsyncd_oldchang.service
[Unit]
Description=Rsync service
After=rsyncd_oldchang.target

[Service]
Type=forking
ExecStart=/etc/init.d/rsyncd start
ExecReload=/etc/init.d/rsyncd restart
ExecStop=/etc/init.d/rsyncd stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值