林甸| 普安| 冠县| 平鲁| 鲁甸| 中方| 乐都| 云安| 开远| 安徽| 纳溪| 宽城| 汝城| 红星| 佛冈| 南木林| 颍上| 威海| 格尔木| 禹城| 阿勒泰| 南票| 水富| 祁门| 翁源| 代县| 渭南| 鹤壁| 灵石| 平舆| 上海| 宁都| 涞水| 正安| 玛沁| 沧县| 襄樊| 大埔| 平原| 托克托| 平利| 澎湖| 河北| 垫江| 威宁| 德清| 西山| 桂东| 巨野| 拉孜| 潼南| 永丰| 德保| 西乡| 荆门| 抚州| 彭山| 弋阳| 高港| 昔阳| 盐池| 随州| 惠安| 江安| 城阳| 滦县| 永川| 固阳| 喀喇沁旗| 赣榆| 礼县| 河口| 长沙| 万全| 绩溪| 太仓| 巴里坤| 铁岭县| 嘉兴| 萝北| 禄劝| 甘洛| 海林| 崇明| 彭山| 安徽| 华池| 紫金| 唐山| 绥棱| 子长| 安龙| 新民| 宜兴| 祁东| 潢川| 沙河| 乌马河| 什邡| 武定| 田阳| 泗县| 勐海| 离石| 都昌| 沙县| 昌平| 绩溪| 山阴| 泰顺| 相城| 宁明| 怀柔| 佳县| 静乐| 湘潭县| 汾阳| 蓬莱| 宁强| 苏州| 遂川| 林口| 莘县| 开封市| 镇坪| 乳山| 浮梁| 麻江| 株洲市| 芜湖县| 台儿庄| 湖北| 多伦| 漳州| 宁南| 定边| 沁源| 河池| 旅顺口| 南和| 尉氏| 单县| 内乡| 新晃| 佳县| 白沙| 蒙阴| 馆陶| 海门| 禄劝| 深泽| 平舆| 聂荣| 隆德| 南县| 鼎湖| 松江| 滁州| 兰西| 青海| 三门| 青阳| 铅山| 黎川| 贵南| 成武| 金口河| 关岭| 南京| 青铜峡| 高阳| 甘孜| 沈丘| 安岳| 西林| 芜湖县| 绍兴市| 沙河| 大方| 龙井| 索县| 同心| 东辽| 颍上| 畹町| 宣化县| 万安| 胶州| 嵩明| 株洲县| 文县| 长武| 太谷| 曲水| 麟游| 古冶| 陈巴尔虎旗| 建宁| 伊宁县| 清苑| 项城| 政和| 昆明| 大足| 阿城| 新都| 五华| 梅县| 福清| 炉霍| 容城| 长沙县| 理塘| 麻山| 隆昌| 工布江达| 曲阳| 郎溪| 桂阳| 开化| 台州| 肥城| 卓资| 会宁| 景泰| 琼结| 承德县| 临漳| 靖远| 定襄| 集贤| 鄯善| 孝感| 凤庆| 安顺| 西固| 浦东新区| 抚顺市| 丹寨| 遵化| 离石| 太谷| 绩溪| 界首| 乌什| 石嘴山| 吉首| 新乡| 孝感| 丁青| 台儿庄| 建德| 漳平| 遵义市| 孝感| 中方| 平顺| 临猗| 佛山| 定远| 吕梁| 寻乌| 肃南| 辽中|

福彩票中奖号码:

2018-11-17 12:47 来源:大河网

  福彩票中奖号码:

  2016年11月4日早上8时许,葵潭站附近一名偷盗摩托车的窃贼,因被人发现慌乱地躲进了附近的草丛中。3月20日上午十三届全国人大一次会议闭幕后,国务院总理李克强在人民大会堂三楼金色大厅会见采访十三届全国人大一次会议的中外记者并回答记者提出的问题。

李克强:我要负责任地说,中国有能力防范、也不会出现系统性金融风险。中国品牌的崛起还离不开对年轻一代消费者需求的把握和引领,尤其在SUV车型和车联网功能方面,本土企业比跨国公司反应更快,也更有优势。

  线上线下和物流结合在一起,才会产生新零售。商务部等8部门于2016年2月出台了《关于汽车平行进口试点的若干意见》,试点工作进展明显。

  全面推行双随机一公开监管,加强综合行政执法改革,建立完善社会信用体系和部门协同监管机制。2017年,蒙草社会用工430万人次,供应链合作企业5000多家。

一是大力推进简政放权。

  自从2013年12月29日厦深高铁开通后,葵潭这个名不见经传的小镇因设立了葵潭中间站,而渐渐被人熟知。

  人保财险使用上述集分宝,在客户支付商业车险保费时直接抵扣一部分保费。近年来,蒙草在草原生态修复、荒漠化治理、土壤修复、矿山修复、城市废弃地修复等多个领域开展科学研究,并将种子繁育、加工以及生态包等产品应用于实际的生态修复中。

  根据一汽夏利1月31日公告显示,预计2017年实现归属于上市公司股东的净利润亏损约亿元-亿元。

  接下来,嘉兴的目标是,从过去的企业注册至开工建设最多跑一次,延续至竣工验收、复核验收最多跑一次,把业务链进一步拉长。从数据也可以看出,我国新能源汽车和智能化汽车发展速度正在成倍增长,成为汽车行业未来发展的主要方向。

  根据公开数据显示,海马汽车2017年累计销售14万辆,与其年初制定的年销30万辆的目标相差甚远。

  全球汽车厂商近期对电动车布局呈现加速之势,除了自身加大研发投入和生产,全球车企之间的合作日渐频繁。

  一家日本商社的钴采购负责人表示,中国政府正在推动普及纯电动汽车,今后中国的采购估计会增加。国家发改委透露,目前正在组织起草有关新能源和智能化汽车创新发展战略,也在制定路线图和时间表,希望通过制定战略明确未来一个时期我国汽车发展的战略方向,力争在全球新一轮产业变革中抢占制高点。

  

  福彩票中奖号码:

 
责编:
关闭

关闭

关闭

封号提示

内容

首页 Linux-应用基础教程--CH10-Shell脚本编程

Linux-应用基础教程--CH10-Shell脚本编程.pptx

Linux-应用基础教程--CH10-Shell脚本编程

烟雨梦兮 2018-11-17 评分 0 浏览量 0 0 0 0 暂无简介 简介 举报
而记者注意到,根据其此前发布的产销数据来看,2017年公司累计销售汽车万辆,与上年同期相比下降%。

简介:本文档为《Linux-应用基础教程--CH10-Shell脚本编程pptx》,可适用于IT/计算机领域,主题内容包含第章bash脚本编程主讲人:梁如军本章内容要点Shell脚本的编制、执行和调试Shell脚本的成分和编码规范Shell变量替换扩展、数值计算、输入输符等。

第章bash脚本编程主讲人:梁如军本章内容要点Shell脚本的编制、执行和调试Shell脚本的成分和编码规范Shell变量替换扩展、数值计算、输入输出变量分类位置参数变量和特殊参数变量条件测试(文件测试、字符串测试、整数测试)分支流程控制(if、case)循环流程控制(for、while、until、select)函数的定义和调用、返回值使用循环分析命令行参数年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)本章学习目标熟悉Shell脚本的编码规范掌握执行和调试方法掌握对变量进行整数运算和间接引用的方法理解位置参数变量和特殊参数变量的用途掌握条件测试的使用、、(())掌握各种流程控制语句的使用if、casefor、while、until、select、break、continue掌握函数的定义、调用和传递返回值的方法掌握命令行参数、位置参数的操作(shift、getopts)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)Shell编程基础年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)Shell脚本和Shell编程当命令不在命令行中执行而是从一个文件中执行时该文件就称为Shell脚本。Shell脚本是纯文本文件。Shell脚本通常以sh作为后缀名但不是必须。Shell脚本是以行为单位的在执行脚本的时候会分解成一行一行依次执行。Shell是一种功能强大的解释型编程语言通常用于完成特定的、较复杂的系统管理任务Shell脚本语言非常擅长处理文本类型的数据年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)Shell脚本的成分程序元素保留字、运算符、表达式变量、数组、输入输出控制结构(顺序、分支、循环、子程序调用)Shell功能【参见第、章内容】执行命令(内置命令、外部命令、自编程序)重定向、管道、命令替换、命令聚合通配符、注释符、……Shell环境年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)Shell脚本的建立与执行Shell脚本的建立使用文本编辑器编辑脚本文件$viscriptfile为脚本文件添加可执rname:"etcpasswd>devthen:elseecho"$usernameisnotauseronthissystem"exitfiuntilwho|grep"$username">devdoecho"$usernameisnotloggedon"sleepdoneshiftmsg=$*X"$msg"=="X"msg="Hello,$username"echo"$msg"|write$usernamewhileuntilfor循环举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:whileuntilforsumsh#使用当型循环求sum()((i=,s=))#i=s=while((i<))do((i,s=i))doneechosum()=$s#使用直到型循环求sum()((i=,s=))until((i==))do((i,s=i))doneechosum()=$s#使用C风格的for循环求sum()for((s=,i=i<=s=i,i))do:doneechosum()=$swhileuntilfor循环举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:whileinfiniteloopsshwhiletruedosleepecho"infiniteloopshitCTRLCtostop"done#!binbash##filename:untilinfiniteloopsshuntilfalsedosleepecho"infiniteloopshitCTRLCtostop"done#!binbash##filename:forinfiniteloopsshfor(())dosleepecho"infiniteloopshitCTRLCtostop"done  在循环体内使用带有条件判断的break语句可以实现“永真循环条件退出”。将循环结果通过管道传递给其他命令处理(done|)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:looptopipeshforiindoecho$idone|sortnawkF':''$>={print$}'etcpasswd|whileIFS=readrpersondoecho$persondone|sort后台执行循环(done)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:loopinbackgroundshforpersoninBrownJiffJohnStonedomails"Test"$person<"Hello$person"doneawkF':''$>={print$}'etcpasswd|whileIFS=readrpersondomails"Test"$person<<ENDHello$person,Thismessageisfrom$(hostnamef)$USER$(dateF)ENDdone循环与菜单一般地使用while循环配合case实现Bash提供了专门的select循环select循环主要用于创建菜单select是个无限循环通常要配合case语句处理不同的选单及退出select循环的退出按ctrlc退出循环在循环体内用break命令退出循环或用exit命令终止脚本年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)使用while循环实现菜单年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:whatlangdoyoulikewhileshwhiletruedoecho"======ScriptingLanguage======"echo")bash"echo")perl"echo")python"echo")ruby"echo")Idonotknow!(Quit)"read–p"Whatisyourpreferredscriptinglanguage"langcase$langin)echo"Youselectedbash")echo"Youselectedperl")echo"Youselectedpython")echo"Youselectedruby")exitesacdonehttp:bashcybercitibizdecisionmakingmenudrivenshellscript循环结构select语法按数值顺序排列的菜单项(listitem)会显示到标准错误菜单项的间隔符由环境变量IFS决定用于引导用户输入的提示信息存放在环境变量PS中用户输入的值会被存储在内置变量RELAY中用户直接输入回车将重新显示菜单与for循环类似省略inlist时等价于in“$*”年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)selectvariableinlistdo#循环开始的标志commands#循环变量每取一次值循环体就执行一遍done#循环结束的标志循环结构select举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:whatlangdoyoulikeselectshclearPS="Whatisyourpreferredscriptinglanguage"selectsinbashperlpythonrubyquitdocase$sinbash|perl|python|ruby)echo"Youselected$s"quit)exit*)echo"Youselectederror,retry…"esacdone循环结构select举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:whatosdoyoulikeselectshclearPS="WhatisyourpreferredOS"IFS='|'os="Linux|GnuHurd|FreeBSD|MacOSX"selectsin$osdocase$REPLYin|||)echo"Youselected$s"*)exitesacdone循环结构select举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:rootbinxtop##filename:whatcmddoyouwantselectshPS="Selectaprogramyouwanttoexecute:"TOPLIST="tophtopatopnettopjnettopiftopftopiotopmytopinnotopdnstopapachetop"clearselectprogin$TOPLISTquitdo$prog==quitexitrpmq$prog>dev$prog||echo"$progisnotinstalled"done)top)nettopRPMFPRGE)ftopEPEL)innotopEPEL)htopEPEL)jnettopEPEL)iotopEPEL)dnstopRPMFPRGE)atopEPEL)iftopEPEL)mytopEPEL)apachetopEPEL位置参数和命令行参数处理年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)http:wikibashhackersorgscriptingposparamshttp:wikibashhackersorghowtogetoptstutorialhttp:aplawrencecomUnixgetoptshtmlhttp:milochenwordpresscomfastunderstandhowtousebashgetopts参数处理概述在脚本中经常使用流程控制处理位置参数循环结构:while、for多分支结构:case在脚本中经常使用如下命令配合位置参数处理shiftgetopts年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)位置参数的遍历()年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:pptraversesh#Usage:pptraversesharguments#echo"Thenameofthisscriptis:`basename$`"echo"Theargumentsare:$*"echo"Thenumberofargumentsis:$#"foridoecho"$i"donenum=foridoecho"The${num}thargumentis:$i"((num))done位置参数的遍历()年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:pptraversesh#Thisscriptistotestcommandlinearguments#Usage:pptraversesharguments#echo"usingthefirstkindofmethod"num=while$numle$#do#evalpara=$$num#echo"The${num}thargumentis:$para"echo"The${num}thargumentis:${!num}"letnum=numdoneecho"usingthesecondkindofmethod"for((num=num<=$#num))doecho"The${num}thargumentis:${!num}"done位置参数的遍历()年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:pptraverseshiftwhilesh#Usage:pptraverseshiftwhilesharguments#echo"usingwhilelooptotraversepositionalparameter"#while"$"do#echo"$"#shift#donenum=while"$"doecho"The${num}thargumentis:$"letnum=numshiftdone位置参数的遍历()年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:pptraverseshiftuntilsh#Usage:pptraverseshiftuntilsharguments#echo"usinguntillooptotraversepositionalparameter"#untilz"$"do#echo"$"#shift#donenum=untilz"$"doecho"The${num}thargumentis:$"((num))shiftdone位置参数的遍历()年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:pptraverseshiftforsh#Usage:pptraverseshiftforsharguments#echo"usingforlooptotraversepositionalparameter"#for(())do#n"$"echo"$"||break#shift#donefor((num=num))don"$"echo"The${num}thargumentis:$"||breakshiftdone位置参数处理举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:renif$#ltthencat<<HELPFUNCTION:RenamesanumberoffilesusingsedregularexpressionsUSAGE:$'<regexp>''<replacement>'<files>EXAMPLE:Renameall*HTMfilesto*html:$'HTM$''html'*HTMHELPexitfiOLD="$"NEW="$"shiftshift#$*containsnowallthefilesforfilein$*doiff"$file"thennewfile=`echo"$file"|sed"s${OLD}${NEW}g"`iff"$newfile"thenecho"ERROR:$newfileexistsalready"elseecho"Renaming$fileto$newfile"mv"$file""$newfile"fifidone选项和参数z是个选项(option)以减号开始的单字符c也是个选项etcmybackupconf是该选项的附加参数(additionalargument)r和v也是选项且不带附加参数footxt和mydir是脚本的处理对象他们是不与任何选项相关的参数在POSIX标准中称其为“操作对象数”(operands)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)mybackupzcetcmybackupconfrvfootxtmydir处理选项和参数按照Linux的命令行书写规范如下命令行也可以写成如下的等价形式用户使用自己的代码分析这些选项将变得十分困难Shell的内置命令getopts可以识别所有常见的选项格式为用户处理选项和参数提供了方便年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)mybackupzcetcmybackupconfrvfootxtmydirmybackupzrcetcmybackupconfvfootxtmydirmybackupzvcetcmybackupconfrfootxtmydirmybackupvrcetcmybackupconfzfootxtmydirmybackupvzcetcmybackupconfrfootxtmydirmybackupzrvcetcmybackupconffootxtmydirmybackupzrvcetcmybackupconffootxtmydir内置命令getoptsOPTSTRING是由若干有效的选项标识符组成的选项字符串若某选项标识符后有冒号则表示此选项有附加参数若整个字符串前有冒号将使用“安静”的错误模式VARNAME:每次匹配成功的选项保存在变量中ARGS:参数列表省略时为”$”年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)getoptsOPTSTRINGVARNAMEARGSgetoptsc:zrvoptgetopts:c:zrvoptgetopts的执行过程通常需要以循环的方式执行多次getopts来解析位置参数中的选项以及可能存在的选项附加参数每次调用getopts将会处理参数列表中的“下一个”选项将选项存储在VARNAME变量中将此选项对应的附加参数存储在环境变量OPTARG中对环境变量OPTIND进行自增操作使$OPTIND总是指向原始参数列表中“下一个”要处理的元素位置若$VARNAME与$OPTSTRING的所有选项均不匹配则做“invalidoption”的错误设置若某选项的参数不存在则做“requiredargumentnotfound”的错误设置年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)OPTERR:默认OPTERR=。如果OPTERR=,shell将禁用“错误提示输出”即使选项字符串的开头不是冒号。getopts的错误报告模式冗余(Verbose)模式(OPTSTRING不以:开头)“invalidoption”VARNAME=“”unsetOPTARG“requiredargumentnotfound”VARNAME=“”unsetOPTARG并输出错误信息安静(Silent)模式(OPTSTRING以:开头)“invalidoption”VARNAME=“”OPTARG=‘无效的选项字符’“requiredargumentnotfound”VARNAME=“:”OPTARG=‘与参数对应的选项字符’年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)while循环与getopts处理getopts返回假时终止while循环当getopts遭遇到第一个非选项参数时终止解析当getopts遭遇到“”参数时终止解析年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)whilegetoptsOPTSTRINGVARNAMEdocase$VARNAMEin…)……………)…………:)…………)…………esacdonegetopts的注意事项getopts不能解析GNUstyle长参数(myoption)getopts从不改变原始位置参数若希望移动位置参数需手工执行shiftgetopts会自动对变量OPTIND做自增处理OPTIDX的初始值为若要重新解析命令行参数需将OPTIDX的值置为getopts遭遇到第一个非选项参数时终止解析终止解析后执行命令shift((OPTIND))可以使”$”只包含“操作对象数”(operands)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)getopts举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:ppparsegetoptsshwhilegetopts"abc:def:ghi"flagdoecho"$flag"$OPTIND$OPTARGdoneecho"Resetting"OPTIND=whilegetopts"bc:def:ghi"flagdoecho"$flag"$OPTIND$OPTARGdone$ppparsegetoptsshabcfoof"foobar"h–gde$ppparsegetoptsshabf"foobar"hgde–c$ppparsegetoptsshabf“foobar”h–cgdegetopts举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:ppparsegetoptsshwhilegetopts":abc:def:ghi"flagdoecho"$flag"$OPTIND$OPTARGdoneecho"Resetting"OPTIND=whilegetopts":bc:def:ghi"flagdoecho"$flag"$OPTIND$OPTARGdone$ppparsegetoptsshabcfoof"foobar"hgde$ppparsegetoptsshabf"foobar"hgde–c$ppparsegetoptsshabf“foobar”h–cgdegetopts举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:mybackupgetoptsshwhilegetopts:zc:x:rvoptdocase$optinc)ConfFile=$OPTARGx)ExcludeFile=$OPTARGz)Compress=truer)Recursive=truev)Verbose=true:)echo"$:Mustsupplyanargumentto$OPTARG">exit)echo"Invalidoption$OPTARGignored">esacdoneshift$((OPTIND))echo$echo"$"getopts举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:mybackupgetoptsshwhilegetopts:zc:x:rvoptdocase$optinc)if$OPTARG=*then((OPTIND))continuefiConfFile=$OPTARGx)ExcludeFile=$OPTARGz)Compress=truer)Recursive=truev)Verbose=true:)echo"$:Mustsupplyanargumentto$OPTARG">exit)echo"Invalidoption$OPTARGignored">esacdoneshift((OPTIND))echo$echo"$"函数年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)Shell函数简介为了避免大型脚本变得复杂、晦涩而使用函数将大型脚本代码分割成小块将这些被命名的代码块称为函数一个函数就是一个子程序用于完成特定的任务如:添加一个用户、判断用户是否为管理员等函数定义之后可以被使用它的主程序调用调用函数的方法与执行Shell命令无异可以在Shell脚本中调用(函数需先定义而后调用)在命令行上直接调用(定义函数的文件需先加载)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)Shell的函数在其他语言中也被称为:过程(procedure)方法(method)subroutine(子程序)routine(例行程序)合理使用Shell函数简化程序代码实现代码重用实现一次定义多次调用。如:isrootuser()函数可以由不同的shell脚本重复使用。实现结构化编程使脚本内容更加简洁增强程序的易读性提高执行效率将常用的功能定义为多个函数并将其保存在一个文件中类似其他语言的“模块”文件在~bashrc或命令行上使用source命令调用这个文件此文件中定义的多个函数一次性地调入内存从而加快运行速度年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)函数的定义和调用函数定义函数调用只需输入函数名即可调用函数函数必须在调用之前定义年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)function函数名{commands}函数名(){commands}函数名函数名参数参数函数的存储和显示函数的存储函数和调用它的主程序保存在同一个文件中函数的定义必须出现在调用之前函数和调用它的主程序保存在不同的文件中保存函数的文件必须先使用source命令执行之后才能调用其中的函数函数的显示显示当前Shell可见的所有函数名$declareF显示当前Shell可见的所有(指定)的函数定义$declaref$declaref<functionName>年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)函数的定义和调用举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:allinonebackupselectsh###UserdefineFunction(UDF)###sqlbak(){echo"Runningmysqldumptool"}syncbak(){echo"Runningrsynctool"}gitbak(){echo"Runninggistoretool"}tarbak(){echo"Runningtartool"}###Mainscriptstartshere###PS="Pleasechooseabackuptools:"selectsinmysqldumprsyncgistoretarquitdocase$REPLYin)sqlbak)syncbak)gitbak)tarbak)exitesacdone函数的定义和调用举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:rootbinmybackupfunctionssh###UserdefineFunction(UDF)###sqlbak(){echo"Runningmysqldumptool"}syncbak(){echo"Runningrsynctool"}gitbak(){echo"Runninggistoretool"}tarbak(){echo"Runningtartool"}#!binbash##filename:allinonebackupselectsourcefuncshsourcerootbinmybackupfunctionssh###Mainscriptstartshere###PS="Pleasechooseabackuptools:"selectsinmysqldumprsyncgistoretarquitdocase$REPLYin|mMysqldump)sqlbak|rRsync)syncbak|gGistore)gitbak|tTar)tarbak)exitesacdone函数与变量参数(Arguments)调用函数时使用位置参数的形式为函数传递参数函数内的$${n}、$*和$表示其接收的参数函数调用结束后位置参数$${n}、$*和$将被重置为调用函数之前的值在主程序和函数中$始终代表脚本名变量(Variables)函数内使用local声明的变量是局部(Local)变量局部变量的作用域是当前函数以及其调用的所有函数函数内未使用local声明的变量是全局(Global)变量即主程序和函数中的同名变量是一个变量(地址一致)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)函数与位置参数举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:ppandfunctionshecho"===Printpositionalparametersinmain:"echo"$:$*"pp(){echo'fPrint$*parametersinfun:'echo"$:$*"}pp(){echo'fPrint$*parametersinfun:'echo"$:$*"ppstndthththththththecho'fPrint$*parametersinfun:'echo"$:$*"}ppecho"===Printpositionalparametersinmain:"echo"$:$*"ppIIIIIIIVVVIVIIVIIIIXppandfunctionshabcdefghi函数与位置参数举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:functionmaxsh#UserdefineFunction(UDF)usage(){echo"ListtheMAXofthepositiveintegersincommandline"echo"Usage:`basename$`<num><num><num>"exit}max(){z$||z$usagelargest=forido((i>largest))largest=$idone}###Mainscriptstartshere###max"$"echo"Thelargestofthenumbersis$largest"functionmaxsh由于largest变量在函数max内没有使用local声明所以它是全局的函数的结束与返回值当函数的最后一条命令执行结束函数即结束函数的返回值就是最后一条命令的退出码其返回值被保存在系统变量$中可以使用return或exit显式地结束函数returnNreturn将结束函数的执行可以使用N指定函数返回值exitNexit将中断当前函数及当前Shell的执行可以使用N指定返回值年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)http:maillinuxiepipermaililugMarchhtmlhttp:wwwlinuxjournalcomcontentreturnvaluesbashfunctions函数的结束与返回值举例年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:functionmaxsh#UserdefineFunction(UDF)max(){ifz$||z$thenecho"Needparameterstothefunction"exitfi$eq${echo"Thetwonumbersareequal"exit}(($>$))return$||return$}###Mainscriptstartshere###readp"Pleaseinputtwointegernumbers:"nnecho"n=$n,n=$n“max$n$nreturnval=$echo"Thelargerofthetwonumbersis$returnval"函数返回值(续)使用全局变量引用函数的值不利于结构化编程使用return或exit只能返回整数值使用标准输出实现函数的返回值是一种通用的方法既能返回整数又能返回字符串函数结束前使用echo命令将结果显示到标准输出调用函数时使用如下的格式将函数的输出结果存到变量RES中之后便可使用变量$RES的值(或输出、或执行测试、或进一步处理等)RES=$(functionName)echo$RES年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)对比RES=$(ls)echo$RES命令能出现的地方函数调用也能出现使用标准输出返回函数值年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash##filename:functiontouppersh#UserdefineFunction(UDF)toupper(){localstr="$"localoutputoutput=$(tr'az''AZ'<<<"${str}")echo$output}###Mainscriptstartshere###toupper"ThisIsaTEST"res=$(toupper"$")echo"$res"res=$(toupper"$")$res=="YES"echo"Continue"||echo"Stop"functiontouppershYESwearefunctiontouppershNowearenot系统INIT启动脚本的结构etcrcdinitd*年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#execsourcefunctionlibraryetcrcdinitdfunctionsstart(){}stop(){}restart(){stopstart}…………case"$"instart)startstop)stoprestart|reload)restart…………esac阅读etcinitd目录下的启动脚本熟悉Shell编程Shell脚本举例使用lftp命令从远程镜像YUM仓库到本地目录用法手动执行mirroryumreposshcentosepelrpmforgeremi例如:mirroryumreposshcentosepel安排cron任务etccrondmirroryumreposcron***rootrootbinmirroryumreposshcentos***rootrootbinmirroryumreposshepel***rootrootbinmirroryumreposshrpmforgeremi年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)#!binbash#ScriptName:rootbinmirroryumrepossh#usage(){echo"Usage:$centosepelrpmforgeremi"exit}#$#equsageLIST=""while$#gtdocase$incentos)LIST="$LISTCENTOS"shiftrpmforge)LIST="$LISTRPMFORGE"shiftepel)LIST="$LISTEPEL"shiftremi)LIST="$LISTREMI"shift*)usageesacdone#lockfile="varlocksubsysmirroryumreposwithlftp"f$lockfileexit||touch$lockfile#version=arch=iexcludes='"(x)|(SRPMS)|(ppc)|(isos)|(olds)"'#CENTOSURL="http:mirrorscomcentos$version"EPELURL="http:mirrorssohucomfedoraepel$version$arch"RPMFORGEURL="http:mirrorssohucomdagredhatel$versionen$archrpmforge"REMIURL="http:remimirrordedipowercomenterprise$version"#CENTOSMIRRORDIR="varftpyumdistrcentos$version"EPELMIRRORDIR="varftpyumreposepel$version$arch"RPMFORGEMIRRORDIR="varftpyumreposrpmforgeredhatel$versionen$archdag"REMIMIRRORDIR="varftpyumreposremienterprise$version"#!e$CENTOSMIRRORDIRmkdirp$CENTOSMIRRORDIR!e$EPELMIRRORDIRmkdirp$EPELMIRRORDIR!e$RPMFORGEMIRRORDIRmkdirp$RPMFORGEMIRRORDIR!e$REMIMIRRORDIRmkdirp$REMIMIRRORDIR#cdvarftpyumreposrpmforgeredhatel$versionen$arch!Lrpmforgelnsdagrpmforge#forxin$LISTdopath=${x}MIRRORDIRurl=${x}URLcd${!path}lftpe"setmirror:excluderegex$excludesmirrorPdeleteonlynewerverboseexit"${!url}$eqecho"Mirrored${x}repositoriesuccessfully">>tmpmirroreddonemails“YUMRepositorieMirrorLOG$(dateF)"root<tmpmirroredrmrf$lockfiletmpmirroredShell脚本举例显示系统信息sysinfoshsysinfoselectsh熟悉如下Shell语句和常用命令变量和数组的使用常用的信息显示命令管道和过滤器(grep、cut、sort、sed、awk)数值计算流程控制(if、case、for、select)年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)进一步学习http:bootinfoscriptsfnet#!binsh##filename:sysinfoselectshLANG=C#UserdefineFunction(UDF)echoline(){c=$(expr(${#}))if$#==thenfor((i=i<$ci))doechon"="doneechon"$"for((i=i<$ci))doechon"="doneelsefor((i=i<i))doechon"="donefiecho""}hello(){echo"Hello,$(whoami)<$(hostname)>!"echo"Nowtimeis$(date)"}ldavg(){echo"`uptime`"}general(){cpu=`catproccpuinfo|grep"modelname"|cutd":"f|uniq`cpucount=`catproccpuinfo|grep"physicalid"|sort|uniq|wcl`ProcessorCOUNT=`catproccpuinfo|grep"processor"|uniq|wcl`RAM=`catprocmeminfo|grepMemTotal|awkF:'{print$}'|awkF'{print$""$}'`SWAP=`catprocmeminfo|grepSwapTotal|awkF:'{print$}'|awkF'{print$""$}'`OS=`catetcredhatrelease`kernel=`unamesr`echo"CPU:$cpu"echo"CPUCount:$cpucount"echo"ProcessorCOUNT:$ProcessorCOUNT"echo"OS:$OS"echo"kernel:$kernel"echo"RAM:$RAM"echo"SWAP:$SWAP"}maxcproc(){$==''lines=pseo"C:p:z:a"|headpseo"C:p:z:a"|grepv"^CPU"|sortnr|head$lines}maxmproc(){$==''lines=pseo"C:p:z:a"|headpseo"C:p:z:a"|grepv"^CPU"|sortknr|head$lines}disk(){if"$(lsdprocidehd*>dev)"thenforDEVin`lsdprocidehd*|sed's*'`doMODEL=`catprocide$DEVmodel`ifeprocide$DEVcapacitythenSIZE=`catprocide$DEVcapacity`SIZE=`expr$SIZE`elseifesysblock$DEVsizethenSIZE=`catsysblock$DEVsize`SIZE=`expr$SIZE`elseSIZE='(unknown)'fifiecho"IDE:dev$DEV$MODEL$SIZEGB"donefiif"$(lsdsysblocksd*>dev)"thenforDEVin`lsdsysblocksd*|sed's*'`doMODEL=`catsysblock$DEVdevicemodel`SIZE=`catsysblock$DEVsize`SIZE=`expr$SIZE`echo"SCSISASSATA:dev$DEV$MODEL$SIZEGB"donefi}filesystem(){echo"`dfhxtmpfs|grepv^n`"}mpstat(){mpstat}vmstat(){vmstat}iostat(){iostatd}net(){forDEVin`sbinifconfiga|grep'^w'|awk'!lo{print$}'`doIP=`sbinifconfig$DEV|awkF:'inet{print$}'|awk'{print$}'`echoe"$DEVt:$IP"done}###Mainscriptstarshere###cleardeclareacmdinfoinfo=("Hello""UptimeandLoadaverage""Generalinfomation""Diskinfomation""Filesysteminfomation""MaxCPUusageProcesses,Currently""MaxMEMusageProcesses,Currently""Reportprocessorsrelatedstatistics""Reportvirtualmemorystatistics""Reportinputoutputstatistics""Networkinterfaceinfomation""Quit")cmd=(helloldavggeneraldiskfilesystemmaxcprocmaxmprocmpstatvmstatiostatnet)PS="Pleasechoose:"selectsin"${info}"do$s=="Quit"exitcase$REPLYin||||||||||)echolineecholine"${info$REPLY}"echoline${cmd$REPLY}echoline*)echo"Chooseerror,retry"esacdone本章思考题Shell脚本的成分?通常在何种情况下使用函数?试比较各种括号在条件测试中的异同?(())试比较各种括号的作用${}$()$$(())什么是位置参数?shift命令的功能?循环控制语句break和continue的功能?年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)本章实验学会使用变量替换扩展。学会使用Shell提供的各种流程控制语句。录入、运行并调试本章的例程。年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)进一步学习BashReferenceManualhttp:wwwgnuorgsoftwarebashmanualusrsharedocbash*bashrefhtmlBashscriptexamplesusrsharedocbash*scripts**usrsharedocbash*functions*usrsharedocbash*loadables*年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)进一步学习http:tldporgLDPBashBeginnersGuidehtmlhttp:tldporgLDPabshtmlhttp:wwwlinuxsirorgmaindocabsabscnhtmindexhtmlhttp:linuxconfigorgBashscriptingTutorialhttp:wwwlinuxdocorgHOWTOBashProgIntroHOWTOhtmlhttp:bashcybercitibizguidehttp:wikibashhackersorghttp:wwwthegeekstuffcomtagbashtutorialhttp:serverfaultcomquestionstaggedbashhttp:stackoverflowcomquestionstaggedbashhttp:wwwlinuxjournalcomtagbashhttp:wwwsoftpanoramaorgScriptingshellsshtml年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA)http:wwwthegeekstuffcommakevimasyourbashideusingbashsupportplugin与BASH相关的项目http:bashishsourceforgenethttp:bashdbsourceforgenethttp:wwwbackupmanagerorghttp:nanobloggersourceforgenethttp:sourceforgenetprojectsvimhelperhttp:sourceforgenetprojectsthylacine年月日梁如军(linuxbookscom)CreativeCommonsLicense(BYNCSA

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +1积分

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

资料评分:

/174
¥30.0 购买

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部

举报
资料

放城镇 龙河 查哈阳乡 石狮市振狮医院 芦台镇建国村建国里
来凤县 冯村西里 乌桕坝乡 轨锦龙站 下架山镇