版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
shell函数shell函数任务01Shell函数任务02Shell案例2学习目标认识shell函数掌握函数的定义及调用。31.Shell函数
做为一个经常写脚本的运维人员来讲,都能发现一个问题,很多时候我们在不同的脚本里面重复的写着同一段代码。比如我们要去使用正则表达式去判断IP地址的合法性问题,如果每次都去写一遍这个匹配IP的表达式,整个表达式写下来老长老长的,0-9的数字组合看的眼都花了,是不是很累了。当然有人会说了,保存一份正确的代码之后,需要用这段代码的时候,直接粘贴到正在编写的脚本里面不就行了嘛!是没错,但这样是不是很多脚本里面都重复存放着同一段代码,额外增加了脚本的代码量。有没有一个两全其美的办法,让我们的脚本代码量又小,又省去了每次重复的粘贴同一段代码的操作,同时还能完美的调用这段代码了。shell函数的出现为我们完美的解决了这一设想。Shell函数5函数介绍函数(function)是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分函数和shell程序的区别:
Shell程序在子Shell中运行
而Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变量进行修改Shell函数6定义函数的语法格式:
函数由两部分组成:函数名和函数体
语法一:
语法二:
语法三:functionf_name{...函数体...}functionf_name(){...函数体...}f_name(){...函数体...}Shell函数7函数的定义方式:
1,可在交互式环境下直接定义函数,当前shell环境可调用
2,可将函数定义在脚本文件中作为它的一部分,只可自己调用
3,可写成单独的函数库文件中,任何脚本都可以调用函数的撤销方式:unset函数名Shell函数8函数的调用方式:
1,调用函数库中的函数时,首先得用source或.载入函数库文件,再指定要调用的函数名
注意:<点><空格><函数库文件名>文件名要带正确路径
2,命令行定义的、脚本自身定义的,直接指定要调用的函数名即可
函数名出现的地方,会被自动替换为函数代码
函数的生命周期:被调用时创建,返回时终止Shell函数9修改已定义的函数:
1,使用set命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数
2,用unset命令从shell中删除函数;改动完毕后,再重新载入此函数或函数库文件函数返回值函数有两种返回值:
1,函数的执行结果返回值:
(1)使用echo或printf命令进行输出
(2)函数体中调用命令的输出结果Shell函数10函数的退出状态码:
(1)return:默认取决于函数中执行的最后一条命令的退出状态码
(2)return#:自定义退出状态码,其格式为:
return0无错误返回
return1-255有错误返回Shell函数11Shell中函数的定义
LinuxShell可以用户定义函数,然后在Shell脚本中可以随便调用。1)可以带functionfun()定义,也可以直接fun()定义,不带任何参数。2)参数返回,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255),Shell函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果return其他数据,比如一个字符串,往往会得到错误提示:“numericargumentrequired”。[function]funname[()]{action;[returnint;]}函数是存在内存里的一组代码的命名的元素。函数创建于脚本运行环境之中,并且可以执行。函数的语法结构为:function{}创建函数不需要do或done这些关键字,只需要大括号来界定函数的作用范围。Shell函数12定义了一个函数并进行调用:
Shell实例:function.shShell函数13下面定义一个带有return语句的函数:Shell实例:function_return.sh#!/bin/bashfunWithReturn(){echo"这个函数会对输入的两个数字进行相加运算..."echo"输入第一个数字:"readaNumecho"输入第二个数字:"readanotherNumecho"两个数字分别为$aNum和$anotherNum!"return$(($aNum+$anotherNum))}funWithReturnecho"输入的两个数字之和为$?!"Shell函数14执行脚本输出:输入第一个数字:1输入第二个数字:2两个数字分别为1和2!输入的两个数字之和为3!
函数返回值在调用该函数后通过$?来获得。所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至Shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
注意:Shell函数15
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过$n的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...带参数的函数示例:Shell实例:function_param.sh#!/bin/bashfunWithParam(){echo"第一个参数为$1!"echo"第二个参数为$2!"echo"第十个参数为$10!"echo"第十个参数为${10}!"echo"第十一个参数为${11}!"echo"参数总数有$#个!"echo"作为一个字符串输出所有参数$*!"}funWithParam1234567893473Shell函数16输出结果:第一个参数为1!第二个参数为2!第十个参数为10!第十个参数为34!第十一个参数为73!参数总数有11个!作为一个字符串输出所有参数1234567893473!$10不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。注意:Shell函数17
特殊字符处理参数:参数处理说明$#传递到脚本的参数个数$*以一个单字符串显示所有向脚本传递的参数$$脚本运行的当前进程ID号$!后台运行的最后一个进程的ID号$@与$*相同,但是使用时加引号,并在引号中返回每个参数。$-显示Shell使用的当前选项,与set命令功能相同。$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。Shell函数182.Shell案例下面我们用自己编写个文件的行计数的脚本:我们先实现指定文件作为参数的的文件行数计数脚本,代码如下,#!/bin/bash#Simplelinecountexample,usingbash##LinuxsShell综合实训#Author:CETC55#Since:v1.0#Date:2017/03/23#Usage:./get_dir_file_linecount1.sh#-----------------------------#getfilelinecountbywccommandShell案例20count_lines(){localf=$1#thisisthereturnvalue,i.e.nonlocall=`wc-l$f|sed's/^\([0-9]*\).*$/\1/'`}if[$#-lt1]thenecho"Usage:$0file..."exit1fiecho"$0countsthelinesofcode"l=0n=0s=0while["$*"!=""]docount_lines$1echo"$1:$l"n=$[$n+1]s=$[$s+$l] shiftdoneecho"$nfilesintotal,with$slinesintotal"Shell案例21
其中计算行数封装了一个函数,改shell还要处理输入的参数。下面执行该脚本,执行结果如下:改变权限并运行:[root@controllershell_scripts]#chmoda+xget_dir_file_linecount1.sh[root@controllershell_scripts]#./get_dir_file_linecount1.shtetris.sh./get_dir_file_linecount1.shcountsthelinesofcodetetris.sh:12371filesintotal,with1237linesintotal[roo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 喷色机皮革工业用产品供应链分析
- 带兜帽的风雪大衣产业链招商引资的调研报告
- 可拆卸衣领产业链招商引资的调研报告
- 农村教育产业行业市场调研分析报告
- 手表修理行业市场调研分析报告
- 员工持股计划管理服务行业营销策略方案
- 福建省莆田第二十五中学2024-2025学年高一上学期期中考试生物试题(解析版)
- 废物磁选技术行业营销策略方案
- 为会议中心提供餐饮供应服务行业营销策略方案
- 科学研究用具有人工智能的人形机器人项目营销计划书
- 油漆检测标准
- DB32T 3695-2019 房屋面积测算技术规程
- 施工企业项目商务策划管理要点及实务
- 沈鼓集团LNG离心压缩机组汇报
- 塑料包装袋出厂检验报告单
- 超声引导腰丛阻滞
- 香港公司购销合同模板(标准版)
- 机电专业例会会议记录
- CPK计算表格EXCEL模板
- (完整版)食品加工厂可行性研究报告
- SQE工作手册范本
评论
0/150
提交评论