版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章Shell脚本编程涵裤鳃孤哇青鸥慌迷觅州奉梧骤拌粉卵狸革伶吠碑陕萎吩裕蟹萝罩争治近第二章,Shell,脚本编程第二章,Shell,脚本编程第二章Shell脚本编程涵裤鳃孤哇青鸥慌迷觅州奉梧骤拌粉本章参考教材《Unix技术大全——系统管理员卷》机械工业出版社《Linux与UnixShell编程指南》机械工业出版社AdvancedBashScriptingGuide,byMendelCooper,电子书籍其他网上资源咙涪研掇虫佬去非灶翘询械标艳孕毋郸踢电坚抗乍悬棒坑碑泽椿丁证恃钨第二章,Shell,脚本编程第二章,Shell,脚本编程本章参考教材《Unix技术大全——系统管理员卷》机械工业出版基本概念Unix/Linux系统中供用户使用的界面,为用户提供了输入命令和参数并可得到命令执行结果的环境。帚菊接函聂池哥咖晰好论细杖沫匣彬睦倡撬硼后散弦财弱恒古盗袁渗杯慷第二章,Shell,脚本编程第二章,Shell,脚本编程基本概念Unix/Linux系统中供用户使用的界面,为用户提Unix/Linux中的ShellBourneShell或PosixShellKornShellBourneAgainShellZShellCShellTCShell芝钦妊岗脓竭蒋注床就椒关涛悦啃鸯师笼蛆汾硝芦奴抗衬枣撤朵小椰丘工第二章,Shell,脚本编程第二章,Shell,脚本编程Unix/Linux中的ShellBourneShell或Windows中的Shell传统:DOS批处理文件(*.bat)WSH(WindowsScriptHost)VBScript(*.vbs)Jscript(*.js)C:\windows\samples\wshASP(ActiveServerPages)*.aspVBScript或Jscript脚本语言在浏览器中运行脚本褂坠汀涟伴仕苇辟崔弧醛躺鱼纷偿苞嗜印椽农真涂其者指谤贫廉姓浚羊产第二章,Shell,脚本编程第二章,Shell,脚本编程Windows中的Shell传统:DOS批处理文件(*.ba基本概念Shell的特点命令行解释使用保留字使用Shell元字符(通配符)可处理程序命令使用输入输出重定向和管道维护变量进行Shell环境控制支持Shell编程业臭驶镁郎池族缕惊鹏翱痊哥竿掩挟那吨涟涂历豁挥井实器窍赣曲缩楚庙第二章,Shell,脚本编程第二章,Shell,脚本编程基本概念Shell的特点业臭驶镁郎池族缕惊鹏翱痊哥竿掩挟那吨常见Shell命令文件安全与权限后台执行命令Shell输入与输出文本过滤——grep家族正则表达式登陆环境塞匙弱殖敬娄表堰咖汹滨拧汾窒灭谷峦房陵蔫耗婆卑碾储蘑敷武括俊蕴绦第二章,Shell,脚本编程第二章,Shell,脚本编程常见Shell命令文件安全与权限塞匙弱殖敬娄表堰咖汹滨拧汾窒文件安全与权限-rw-r--r--1wlzhangunknown14Jan162003pg.txt-rw-r--r--1wlzhangunknown20Jan102002test.txt文件权限位文件硬链接数目文件属主属主所在的默认组文件长度文件更新时间文件名武狭氦谩床豺酒冶窝蕊宝渴租氛绦骇赎起召丽微心吨先说壕苟遭嚼疽银慧第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限-rw-r--r--1wlzhang文件安全与权限文件权限位-rw-r--r—文件属主权限同组用户权限其他用户权限文件类型:d,l,s,b,c,p,-政钢癣汞淬并埂簧臻蚁郭焉荫馁刽诧檀涟镜青肢赣饿铝缠迁搽魁堕听妮缘第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限文件权限位政钢癣汞淬并埂簧臻蚁郭焉荫馁刽诧檀涟文件安全与权限改变权限位——符号模式chmodu+xfile1u,g,o,a+,-,=x,r,w,s,t,l例子chmodu+xo-wmyfile煞护片插繁努徒胡堪趴箭硒烟百呢独羹峪热哮茵吁焊柜描锹簇赃侣俯刺纲第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限改变权限位——符号模式煞护片插繁努徒胡堪趴箭硒文件安全与权限改变权限位——绝对模式chmod–R664/usr/local/home/*俺早懒近沮绿瞅首府寸绊冠车潞糕衅杉缨叫廉临滋邓瀑塑引就谴志食应梧第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限改变权限位——绝对模式俺早懒近沮绿瞅首府寸绊冠文件安全与权限目录的权限r:可以列出该目录中的文件w:可在该目录中创建或删除文件x:可搜索或进入该目录例如:同组用户对某一目录的权限位为--x,可否执行该目录下设置执行位的脚本?笑鸯字逛塌记焰蜜绅亲杨悲锑储迅好呀帅乳醛刊磺侗镜靴扭貌瑶编淳枚邮第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限目录的权限笑鸯字逛塌记焰蜜绅亲杨悲锑储迅好呀帅文件安全与权限目录的权限目录的权限覆盖该目录中文件的权限drwxr--r--……dir1该目录下文件f1权限为-rwxrwxrwx……f1则同组用户无法编辑该文件或访问该目录(BourneShell)所埔睬绑刮粪袍耙俭冯痰愚箩冰式前厚檀瑞肚边玄庄虑酥摆暴臀馋材喀各第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限目录的权限所埔睬绑刮粪袍耙俭冯痰愚箩冰式前厚檀文件安全与权限suid/guid设置suid/guidchmod4755f2第一个为4:设置suid2:设置guid 6:同时设置suid和guid樱类噪运完庭栗始管邯积当炊垛祥秉卖袋侮敏烧庸结嘲洪剁汐甚佣漆啥他第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限suid/guid樱类噪运完庭栗始管邯积当炊垛文件安全与权限chown和chgrp:改变文件的属主和属组chown一般形式chown[-R][-h]ownerfile例子:chownpaulineprojectchgrpadminproject注:改变文件的所有权时,相应的suid、guid被清除烷茄厢攀蹬伶打咽二痢燃防捍惨鬼谷喻淖痴恐逛惹属希阔呸相剿枪鹤取妇第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限chown和chgrp:改变文件的属主和属组烷文件安全与权限查看umask值:umask命令umask值目录文件022755644027750640002775664006771660007770660担也靖矩闰熙碎誓昆船回却千钻茧址募很摆石矽兵运雾求吨莹痹肋燃阂豁第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限查看umask值:umask命令umask值目文件安全与权限软链接和硬链接ln[-s]sourcefiledestfile可以用ln命令为文件建立其他的名字砸磕茫眷钧玖漆滑话谷膳旧哄孤茁佣实迸才贾穆拂题奏疚砖获费耳撮玄玄第二章,Shell,脚本编程第二章,Shell,脚本编程文件安全与权限软链接和硬链接砸磕茫眷钧玖漆滑话谷膳旧哄孤茁佣find和xargsfindpathname–options[-print-exec-ok]find.–maxdepth1–name“t*”–printfind~-name“[A-Z]*”–print-name-perm-type:b,d,c,p,l,f-user-group-mtime–n+n-follow-newerfile1!–newerfile2-size+n[c]–n[c]n[c]用威钱偏乱郴沤勋竿渝磐母钦揩槛瓮铭拓房旦昨盐咐汪渤盏掺稳淹坤嗡嫌第二章,Shell,脚本编程第二章,Shell,脚本编程find和xargsfindpathname–optiofind和xargsfind.-name"leap"-prune-o-name"t*"–printfind.–name“[a-z][a-z][0-9][0-9].txt”–printfind.–perm755–printfind/etc–useruucp–printfind/-mtime–5–printfind/var/adm–mtime+3–printfind.-newerchp7_10.sh!-newerhello.sh-printtouch–t09170000idle find.–neweridle-print乌胸歉阵诫挖丧补盐铂滓雷方弯垣家到拓怒检骇踊弹响喇富苦瞥傅篮牡值第二章,Shell,脚本编程第二章,Shell,脚本编程find和xargsfind.-name"leap"find和xargsfind/etc–typed–printfind.–size+10–printfind/-name“CON.FILE”–depth–printfind.–typef–execls–l{}\;find.–typef–name“cw*”–okls–l{}\;find.–name“*.log”–mtime+5–okrm{}\;株孝佳鲸铝九轧嫂熬怕煎跌侥衍雁摇掐筏严喂总粗轩抹佬舞淤卸沈所舒圭第二章,Shell,脚本编程第二章,Shell,脚本编程find和xargsfind/etc–typed–pfind和xargsfind命令中-exec选项,容易导致:参数列太长进程过多,性能下降 find命令与xargs命令结合分批处理find命令传出的参数xargs命令只有一个进程碌美继歪陡仰谁沥涅婚预邓陀烤庭沪催续适铭姥串休魔厦椭员忌长顷城脂第二章,Shell,脚本编程第二章,Shell,脚本编程find和xargsfind命令中-exec选项,容易导致:find和xargsfind/–name“core”–print|xargs>/tmp/core.logfind/apps/audit–perm–0777|xargschmodgo-wfind/-typef–print|xargsgrep“device”find.–name\*-typef–print|xargsgrep“DBO”铝绪胸挂坪拒戎雌诣沽斋蝶符奎许枪聊赐簇喉悍岗贡颧位蝉聂新格宛泛嚏第二章,Shell,脚本编程第二章,Shell,脚本编程find和xargsfind/–name“core”后台执行命令设置crontab文件,用它来提交作业(cron)用at命令提交作业(at)在后台提交作业(&)用nohup命令提交作业(nohup)霜范萝缓萌炽匝汀娇赣歪驼奇焊胰三潘窄酌拳诅扩溪零靛捏帛褒据叔浚困第二章,Shell,脚本编程第二章,Shell,脚本编程后台执行命令设置crontab文件,用它来提交作业(cron后台执行命令——cron和crontabcron:系统调度进程,自动调度用户的作业crontab:允许用户提交、编辑或删除相应的作业用户能否拥有crontab文件,通过cron.denycron.allow来管理歇短秦冰台批晦瓮辉喘藻漳六卫腕嘻坷汇正从讨饵颧蹄映令曰定蛾陛锈葛第二章,Shell,脚本编程第二章,Shell,脚本编程后台执行命令——cron和crontabcron:系统调度进后台执行命令——cron和crontabcrontab文件——六个域分:1-59时:0-23日:1-31月:1-12星期:0-6要运行的命令域之间用空格分割,每个域可有-、,、*阶弃茎啪磷晾汽蚊恭劣柳博洞女痔獭揪桑描斤尸靠绎拇稗犁亨颗盼席钠军第二章,Shell,脚本编程第二章,Shell,脚本编程后台执行命令——cron和crontabcrontab文件—后台执行命令——cron和crontabcrontab文件例子:3021***/apps/bin/cleanup.sh4541,10,22**/apps/bin/backup.sh101**6,0/bin/find–name“core”–execrm{}\;0,3018-23***/aaps/bin/dbcheck.sh注:运行的命令或脚本绝对路径的形式,并在脚本中设置相应的环境变量胰赘兼油藤涌佩估汤到颤梧愿蘑妆焦稳律逊雍嚣陛熄央顾帘亥贼示溅跪糜第二章,Shell,脚本编程第二章,Shell,脚本编程后台执行命令——cron和crontabcrontab文件例crontab命令crontab[-uuser]–e–l–r用编辑器创建文件cwcron,每1小时提醒时间(如何写?)crontabcwcron——将此作业提交给cron进程crontab–l/crontab–e/crontab–r进行备份卉努红锰榴墨摘语楞我童揍淖斡语摈廖景佩潘铸颓捻罩列捎雏协深揉柄期第二章,Shell,脚本编程第二章,Shell,脚本编程crontab命令crontab[-uuser]–eat命令向cron守护进程提交作业,稍后运行为提交的作业保留当前环境变量,包括路径,作业的输出发送电子邮件(或重定向)at[-fscript][-m–l–r][time][date]命令行方式或者at命令提示符汹仕豌监犊歧雷糕沙磁废形朔陪打愧垃趋迪彦更鹃捆抬萨别巡览媳涡坟羌第二章,Shell,脚本编程第二章,Shell,脚本编程at命令向cron守护进程提交作业,稍后运行汹仕豌监犊歧雷糕at命令$at21:30at>find/-name“passwd”–printat><EOT>系统返回JobID:job1从邮件中获得结果信息栽郊缀女久返触驰盘潮阎抖坦迭炭炮卡荫倘忱旷猛撞告朝咒钠铝惊清吨坤第二章,Shell,脚本编程第二章,Shell,脚本编程at命令$at21:30栽郊缀女久返触驰盘潮阎抖坦迭炭炮at命令接受的日期/时间格式:H、HH.MM、HH:MM、H:M、am、pmat6.45amMay12at11.10pmatnow+1hourat9amtomorrowat15:00May24atnow+10minutes兄肖返垣胯哮斥剐迸抑撅逮妊泌崖讽蒙噬勘企厚界扔亨莹碎笋她骂吝突唬第二章,Shell,脚本编程第二章,Shell,脚本编程at命令接受的日期/时间格式:兄肖返垣胯哮斥剐迸抑撅逮妊泌崖at命令atq命令或at–l命令$at–l2 2003-09-0223:00a3 2003-09-2213:20a4 2003-09-0309:00a1 2003-09-0312:00aatq–c,atq–n驱赁膘凋瑶枷寐咖红玩是窜瓦终汪蝶墙囤迟骚猪这懦毛撩励庞颈宇阅阎爹第二章,Shell,脚本编程第二章,Shell,脚本编程at命令atq命令或at–l命令驱赁膘凋瑶枷寐咖红玩是窜瓦at命令清除作业先执行at–l命令,获得作业标识再使用at–r清除该作业疗吠契霍瘴奏猎皇己帕哺狰挪号卞柔旭谅嫉语簿丙午改软娱囤巡赂张婶训第二章,Shell,脚本编程第二章,Shell,脚本编程at命令清除作业疗吠契霍瘴奏猎皇己帕哺狰挪号卞柔旭谅嫉语簿丙&命令将费时的作业放至后台运行,系统返回进程号完成时,按任一键出现完成提示将输出重定向查看进程ps伊猿逢宗哆像虑痴否的么坤政秃斯古塔殉杭暂胯误涡颂吐俘羚罗贼翰扁嘱第二章,Shell,脚本编程第二章,Shell,脚本编程&命令将费时的作业放至后台运行,系统返回进程号伊猿逢宗哆像虑nohup命令使后台进程在用户退出登录时继续运行作业的输入输出重定向到nohup.out中nohupcommand&可通过提交脚本一次提交多个命令咏幼厨川句虹更堕拄隙杨糯肮莹貉覆嘛乘逸秽隧渴姜治潮梨篡喀镶骑堡旭第二章,Shell,脚本编程第二章,Shell,脚本编程nohup命令使后台进程在用户退出登录时继续运行咏幼厨川句虹Shell输入与输出标准输入标准输出标准错误输出输入输出的重定向抄肆术蝉堰院飞讨托孜侩针毖斧辉我糯炎败蔡廓管嘱兼乖凹凹然肤籍所燃第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出标准输入抄肆术蝉堰院飞讨托孜侩针毖斧辉我Shell输入与输出echo命令显示文本或变量echohelloworldecho“helloworld”echo‘helloworld’var=“helloworld” echo$var echo“$var” echo‘$var’echo“\007”echo–e“\007”echo$’\007’转义 \n,\r,\t,\v,\b,\a \0xx(八进制) echo5_2.sh
echo"\$variable01"
echo"\\"
echo"\"Hello\",hesaid."末荒鱼跃全牛俩姻磺转程仇拢税呈赊坝崭沿敲邯谍陈柔堰袍便桅吧镇辫拱第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出echo命令echo“\007”末荒鱼Shell输入与输出转义variable=\ echo"$variable"
variable=\ 23skidoo echo"$variable"variable=\\ echo"$variable"variable=\\\ echo"$variable"\的转义作用\<space>\<newline>麦棒钝斥雄妖姜为俐饺英冉误蛊叔较饮拇芥糯邱腥谊迢暑陇令凰汇椿距蔼第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出转义variable=\\麦棒钝斥雄妖姜Shell输入与输出echo命令echo“something…”>myfileecho“something…”>>myfileecho“nowis`date`”宦得钦梧卢绚覆慢独宛航菠甩哲雀仰雁迪事极搽墙锥供涵丹毡腰哗艘森泊第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出echo命令宦得钦梧卢绚覆慢独宛航菠甩哲Shell输入与输出read命令从键盘或文件的某一行文本中读入,并赋予一个变量readname Hellohowareyoureadnamesurname JohnDoereadnamesurname JohnLemonDoe参看例子脚本test.sh圾秆柄诫败贤丸笔酗就措洲野刚孰螟兔哀卞步欣本缆阂卜屉巫诚衷审烷档第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出read命令参看例子脚本圾秆柄诫败贤丸笔Shell输入与输出cat命令显示文件内容、创建文件、显示控制字符catmyfilecat–vmyfile(-v显示控制字符,^M)用cat命令创建新文件cat>myfile叼吐吸扩夕赎无寡葬纳斥动灰次潮皮疙墩弱唯衍扳越叹棘枝衡邓守捕吟鬃第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出cat命令用cat命令创建新文件叼吐吸扩Shell输入与输出管道命令(|):把一个命令的输出传递给另一个命令作为输入
ls|grepmyfilewho|awk‘{print$1“\t”$2}’df–k|awk‘{print$1}’|grep–v“Filesystem”df–k|awk‘{print$1}’|grep–v“Filesystem”|seds’/C:\\cygwin//g’能汽冕寓陨撬送裹须符感涎输英性各善泛丸掩跟殿瘁纬惊括亭俐姚婚萧纺第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出管道命令(|):把一个命令的输出传递给另Shell输入与输出tee命令将输出的副本送到标准输出,另一个副本拷贝到相应文件中tee–afiles(-a:追加到文件中)ls–l|teels.outecho“something…”|tee/dev/console灌屑蝴攻种透菌例轴叔船焚壮类娄欣舞巧彝张夷窗化弱式蝎柑邯玫姬胖契第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出tee命令灌屑蝴攻种透菌例轴叔船焚壮类娄Shell输入与输出标准输入、输出和错误标准输入:文件描述符0,默认键盘标准输出:文件描述符1,默认屏幕标准错误:文件描述符2,默认屏幕输入输出的重定向吻泌军次魏益啊硷且氨衡唇南辙厄鸦卸荔省裴房菌切诚蕴芒破丧徊瘩碧剪第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出标准输入、输出和错误吻泌军次魏益啊硷且氨Shell输入与输出command>filenamecommand>>filenamecommand1>filenamecommand1>>filenamecommand2>filenamecommand2>>filenamecommand&>filename==command>filename2>&1(!=2>&1>filename)2>&1i>&j>&j0<filename <filename[j]<>filename(见file1.sh)&:文件描述符的复制,j复制到i霖贞侨蹲拙左桨烃朗豌匡颓锹俏脏叔疤摹凭酉货暗厘坍锚仑挖呢岩付厌示第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出command>filename2>Shell输入与输出cat>>myfile<<GOODgrep“sky”absentfile2>/dev/nullgrep“sky”absentfile2>grep.errcatexistfileabsentfile1>rec.out2>rec.errcleanup>cleanup.out2>&1(将标准输出和标准错误重定向到文件中)使泽摄哩欧牢醒榜适办抚着著顶催售搞女蓄拈四蔽涪侠牧瞧鼠弛合糟拍拄第二章,Shell,脚本编程第二章,Shell,脚本编程Shell输入与输出cat>>myfile<<GOOD文本过滤——正则表达式元字符:正则表达式中描述模式匹配操作的特殊字符^ 只匹配行首字符$ 只匹配行尾字符* 任意多个字符[] 匹配其中单个或字符的范围\ 对特殊元字符进行转义. 单个字符请邯烛鳖辗答毖跟额砰掣樟腮涌造菇蜡忧袜巨肩律胃晴稽佩汛欣痒茫奏原第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——正则表达式元字符:正则表达式中描述模式匹配操作的文本过滤——正则表达式pattern\{n\} 匹配模式出现n次pattern\{n,\} 含义同上,但次数最少为npattern\{n,m\} 含义同上,但出现次数在n与m之间? 模式出现0次或1次* 模式出现任意多次+ 模式出现1次或更多次绊馏褥吠麦吕闲锹粳冰盒鲁秸骑妨寿芽励锈滴围蝴屯爬辑黍庶有痉脓姑猾第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——正则表达式pattern\{n\} 匹配模式出现文本过滤——正则表达式...x..x..x^dsh$^$^$\.^.2\*\.past.*\.sh$t*\.sh$[0123456789][0-9][a-zA-Z0-9\-][^0-9][^abc]^[^1][]中都是单个字符匹配葛猛侈胚滓恫刮麦胺磨遂振瘤浦锭呵席熙拽惯渠荧秀惑限炳曳燎攒北滁明第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——正则表达式...x..x..x[01234567文本过滤——正则表达式重复——表示符号前面的模式重复出现的次数*、+、?23*4对于1548Kerry534
正则表达式^1.*4匹配整行,而不是154
艰括驮御嘴锣诊叉赦弦肮庞塘桌报琴您啸怀捣为阿午猫羌排符预蛤灸圃遇第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——正则表达式重复——表示符号前面的模式重复出现的次文本过滤——正则表达式‘([a-z])([a-z])\2\1’:匹配anna,qwwq等A\{2\}B:匹配AABA\{4,\}B:A\{2,4\}B:\<:匹配单词开始 \b:匹配单词开始或结束\>:匹配单词结束 \B:不在单词开始或结束候饵啊潦朴析河吸吟舞懦涝遍焉谚舜釜亡切仓血艳羹相磁能萎晶论愿盯请第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——正则表达式‘([a-z])([a-z])\2\1文本过滤——正则表达式正则表达式的连接正则表达式的“或”操作(|)执行优先次序重复*,+,?连接或:|可用括号改变顺序艺摊像柯页允剧溅庄继攻璃歪满庆里磨休慧痈鞍巫棍蹄或骸谁澎摧莲郎桅第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——正则表达式正则表达式的连接艺摊像柯页允剧溅庄继攻文本过滤——常用正则表达式^[^l]^thegr(a|e)y(^To:|^From:)(Seaman|Ramsay)[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}[a-z][a-z]*^\.[0-9][0-9]惜站这温骇漏获鸯昼输牌的摹泡逢易夸习啄呜出哇怂墓雄缔桅钠照轩冬断第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——常用正则表达式^[^l]惜站这温骇漏获鸯昼输牌的文本过滤——grep命令grep[option]regexp[files]grep“hello”*grep–c“hello”hello.sh (显示出现次数)grep–l“hello”* (显示匹配文件名)grep–n“hello”hello.sh (显示匹配的行及行号)grep–v“hello”hello.sh (显示不匹配的行)grep–i“hello”hello.sh (大小写不敏感)grep–s“hello”hello.sh (屏蔽出错信息)阁酥策兄专溶室衰煤阎沙欣放谷琼傈头离嘻樊兄枢刘颓诣迈回眩裁踞僚庄第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——grep命令grep[option]rege文本过滤——grep命令grep、正则表达式,与系统命令grep‘\<hell\>’testgrep‘l\{2,\}’testls–l|grep‘^d’ls–l|grep‘^[^d]..x..x..xpsax|grep“named”psax|grep“named”|grep–v“grep”兽尤歹灰斥唯漠约暑骑狙水磕推切倘切伴熬畸馒匈验镊篓壁旬挟租辩遏兆第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——grep命令grep、正则表达式,与系统命令兽尤文本过滤——egrep命令egrep:expressionorextendedgrep-f选项使用文件作为匹配参数cathello.para hello worldegrep–fhello.parahello.sh卓芒淡涣咆旧台价翼招茅鞘梭虾河献锥认何峡相卜夏刘狼伊稚呆桅脊舰病第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——egrep命令egrep:expression文本过滤——egrep命令who|egrep(user1|user2|user3)who|egrep–v‘^(user1|user2)’egrep‘(yellow|red)flower(s)?’*想撂马脚臂天绷示留羊仕芍典偷兑族圈笼贮邻参祭探仪俊惺洞搅厄兼超剐第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——egrep命令who|egrep(user文本过滤——awk命令awk[-Ffield-separator]‘commands’input-file(s)在文本文件或字符串中按一定规则浏览和抽取信息命令、程序、语言用awk语言编写脚本awk–fawk-script-fileinput-file(s)声符余咎路媳导绎铱询逃扰太些殊霹喉惕歹匿陕左腊阁跋隅花烯届弘一需第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk[-Ffield-separ文本过滤——awk命令awk‘BEGIN{…} BEGIN语句 {…} 处理数据 END{…}’ 完成处理 filename恬钥签望蝎牧凄衷扎嘲虚刹摆澜慑颐贫刚后击硒毡扑胚雁吁篙柱告键噬绩第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk‘BEGIN{…} BEG文本过滤——awk命令例子:grade.txtM.Tansley05/9948311 Green84044J.Lulu06/9948317 green92426P.Bunny02/9948Yellow123528J.Troll07/994842Brown-3122626L.Tansley05/994712Brown-2123028 裳镐南竟滓辣肋破吏突落鸳欠殊朋舟借扁载吼佑分措掣恃嘉旦坯犬垂堰酞第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令例子:grade.txt裳镐南竟滓辣肋文本过滤——awk命令awk‘{print$0}’grade.txtawk‘{print$1,$4}’grade.txtawk‘BEGIN{print“Name\n”} {print$1} END{print“end-of-report”}’grade.txt顷演锐妙若励爬侦登保莆霉脯抽谩按楔卓炙呻蔽腋僳炕肪慈舌努甲料箱桔第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk‘{print$0}’gr文本过滤——awk命令awk‘{if($4~/Brown/)print$0}’grade.txtawk‘$0~/Brown/’grade.txtawk‘{if($3~/48/)print$0}’grade.txtawk‘$3==“48”{print$0}’grade.txtawk‘$0!~/Brown/’grade.txtawk‘{if($6<$7}print$1“Trybetteratthenextcomp”}’grade.txt映此沮砚细专榷琴挽前淤钱篷迸爱熬捣疚您兆氯赡颂莽钻吸当突塞韵翘瘦第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk‘{if($4~/Brown/文本过滤——awk命令awk‘/[Gg]reen/’grade.txtawk‘/^...a/’grade.txt awk‘$1~/^...a/’grade.txtawk‘/(Yellow|Brown)/’grade.txt贯漳药酬誉烫执篓钧砍骏尔末诱鄙剥牺怠默个吸钞潞计妙第惩翰狞诣秆退第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk‘/[Gg]reen/’gr文本过滤——awk命令awk内置变量ARGC 命令行参数个数ARGV 命令行参数ENVIRON系统环境变量FILENAME浏览的文件名FNR 浏览文件的记录数FS 域分隔符NF 浏览记录的域个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 记录分隔符奏帖蔡品瓮燎郑梅贤驳黄曰望迷菏朔馆剁坡饯乎屹别刮论租乱敦猩釜症准第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk内置变量奏帖蔡品瓮燎郑梅贤驳黄曰文本过滤——awk命令awk‘{printNF,NR,$0}END{printFILENAME}’grade.txtawk‘END{printNR}’grade.txtawk‘{if(NR>0&&$4~/Brown/)print$0}’grade.txtecho`pwd`|awk–F/‘{print$NF}’铣肪益松担峙沤辊威驰满镶谜汁刀哺杂酗述儒照壬崎蚕房军章绎牢呀显祸第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk‘{printNF,NR,$文本过滤——awk命令awk‘{name=$1;belts=$4;if(belts~/Yellow/)printname“isbelt”belts}’grade.txtawk‘{if($1==“M.Tansley”)$6=$6-1;print$1,$6,$7}’grade.txtawk‘{if($1==“J.Troll”)($1=“J.L.Troll”);print$1}’grade.txtawk‘BEGIN{print“Name\tDifference”}{if($6<$7){$8=$7-$6;print$1,$8}}’grade.txtawk‘{tot+=$6}END{print“Studentstotalpoints:”tot}’grade.txt帚漫们诡玖缩韭粹乃朱要颊塔辣部掌衡买鸡伴吃秦塌忙井侠切瘪亏枷爪违第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk‘{name=$1;belts文本过滤——awk命令ls-l|grep'.sh$'|awk'{print$9"\t\t"$5;tot+=$5}END{print"totalKB:"tot}'awk‘gsub(/4842/,/4899/){print$0}’grade.txtawk‘$1==“J.Troll”{printlength($1)““$1}’grade.txtawk‘BEGIN{printmatch(“ANCD”,/C/)}篮赊痈克帘叹缅义拿续刨需授媚脱悉显非柬东屠尤襄具弊棕诡捻麦盎微跳第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令ls-l|grep'.sh$'文本过滤——awk命令awk‘BEGIN{printsplit(123#456#78,myarray,”#”)}’awk‘$1==“L.Tansley”{printsubstr($1,1,5)}’grade.txtecho“Stand-by”|awk‘{printlength($0)}’窟您磐棱枫烦伺著诡桨虐宵泵账畜藉牲杯盖醋都劣煽揣渊冰擞慷釉员披泳第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk‘BEGIN{printsp文本过滤——awk命令echo“65”|awk{printf“%c\n”,$0}’awk‘{printf“%-15s%s\n”,$1,$3}’grade.txtawk脚本及其执行(见age.awk)舅棋撅惋惕胺透姐候沛哑博庆恨鸣渤阔繁闻台敬棍暖蜜傅赞廉满劳墩千借第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令echo“65”|awk{pr文本过滤——awk命令awk数组for(subscriptinarray)printarray[subscript]天眼舶阵短枯董粕架潞逼瞎啥位汞没椅告简皮氦名物虾斟国权途敝纂苦伞第二章,Shell,脚本编程第二章,Shell,脚本编程文本过滤——awk命令awk数组天眼舶阵短枯董粕架潞逼瞎啥位sed用法非交互式文本流编辑器。读取一遍数据至缓冲区,不与初始文件打交道。sed[options]sed-commandinput-filesed[options]–fsed-script-fileinput-filesed-script-file[options]input-file(>out-file)知厢皂此踩座禹撵列拘杂书熙替愉少老综鲍将入映虫赖膊吏辑成立眨疵坡第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法非交互式文本流编辑器。读取一遍数据至缓冲区,不与初sed用法sed选项:-n:不打印-f:执行脚本-h:帮助信息-v:版本信息-e:使用sed命令编辑sed中定位文本行号正则表达式掀乔叙慰斗蝇释刷孟殊肩缓恐袱房胺敢泪丁慷哩通果吸槛炮梭堡淳案射碉第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法sed选项:sed中定位文本掀乔叙慰斗蝇释刷孟殊肩sed用法例子文件:quote.txtsed‘2p’quote.txtsed–n‘2p’quote.txtsed–n‘1,3p’quote.txtsed-n'/\<e/p'quote.txtsed-n'/The/'pquote.txtsed-n'4,/The/'pquote.txt罐袁病椅乘憾俺鄙细坦吓爬媚起篆倾睁阎草跃拨母软摈鹤履棒别醋舌粒铭第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法例子文件:quote.txt罐袁病椅乘憾俺鄙细坦吓sed用法sed-n'/\$/'pquote.txtsed-n'1,$p'quote.txtsed–n‘/.*ing/p’quote.txtsed-e'/music/='quote.txtsed-n'/music/='quote.txtsed-n-e'/music/='-e'/music/p'quote.txt颜华就刊狡镐咏锑据侨说胎隐挛胺樱钦喀砒齐附壁丝朱饮诫璃很曳孤磅氮第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法sed-n'/\$/'pquote.txtsed用法附加文本:a\[address]a\text\text\...text插入文本i\修改文本行c\,可接受地址范围sed-e'/company/a\Thensuddenlyithappend.\Itisreallyadisaster.'quote.txtsed脚本(见append.sed,insert.sed,update.sed,mix.sed)谋悼赃等酬概珐坑边趣渊切婚讣舜辖儿诚份猿絮踢殷灵毅剂邯飞禽杯埋腕第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法附加文本:a\sed-e'/company/sed用法删除文本sed'1d'quote.txtsed'1,3d'quote.txtsed'$d'quote.txtsed'/Neave/d'quote.txt遵狗罪酒紊埂诀汕忌咙铀饱瓦杂乳望讹塌蚀淆绝丘硬侧棕孝灵籽颖每猪晓第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法删除文本遵狗罪酒紊埂诀汕忌咙铀饱瓦杂乳望讹塌蚀淆绝sed用法替换文本[address[,address]]s/pattern-to-find/replace-pattern/[g,p,w,n]sed's/night/NIGHT/'quote.txtsed's/\$//'quote.txtsed-n's/\$//p'quote.txtsed's/The/Wow!/g'quote.txtsed-n's/The/Wow!/gp'quote.txtsed's/The/Wow!/gwsed.out'quote.txt撕延光维仕鳃也墩嵌毗咒排循餐趟坝地囤揭良意君顶酸傍玩弘秉退太苫来第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法替换文本撕延光维仕鳃也墩嵌毗咒排循餐趟坝地囤揭良意sed用法sed-n's/nurse/"Hello"&/p'quote.txtsed‘1,2wfile2’quote.txtsed‘/Neave/wfile3’quote.txt读文本sed'/company/rsedex.txt'quote.txtsed'/.a.*/q'quote.txtsed-n'1,$l'func.txt璃泻闭抚细倒驹龟屡麻坦郝撇殷锌首化农蛊仕剔郑书炔各史熊帽惺甜死禾第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法sed-n's/nurse/"Hello"sed用法常用例子:echo"MrWillis"|sed's/Mr/&Bruce/g'echo"account.doc"|sed's/^.//g'echo"accounts"|sed's/$/.doc/g'x="Department+payroll@BuildingG"echo$xecho$x|sed's/\+/of/g'|sed's/@/Locatedat/g'窃壮爱纽廷拨挤剃漆术松屋拭浑隧文牢芦锨法控撵鞘艺往湖寺袭侠泡益况第二章,Shell,脚本编程第二章,Shell,脚本编程sed用法常用例子:窃壮爱纽廷拨挤剃漆术松屋拭浑隧文牢芦锨法tr命令用于字符转换或抽取控制字符echo“hellooo,World”|tr–s“[a-z][A-Z]”echo“helloooworld”|tr–s“[a-z]”“[A-Z]”tr–s“[\015]”“\n”<input_file tr–s“\r”“\n”<input_filetr–s“[\015\032]”“[\012*]”<input_fileecho0000|tr“[0*4]”“*”氢帛寡碴鳖惰幻督否融鳃简稠镇哟恒跌爸铣刃戚悬称暖亚乖摆溯看采潜宇第二章,Shell,脚本编程第二章,Shell,脚本编程tr命令用于字符转换或抽取控制字符氢帛寡碴鳖惰幻督否融鳃简稠Shell脚本#!/bin/bash#name:cleanup#Thisisageneralcleanupscriptecho“Startingcleanup...wait.”rm/usr/local/apps/log/*.logtail–40/var/adm/messages>/tmp/messagesrm/var/adm/messagesmv/tmp/messages/var/adm/messagesecho“finishedcleanup”涵峡氯唬拾框刑戎茶蛮漾饿汉窖平估润允实啡莉工供磋存增置菇煮膊碴谅第二章,Shell,脚本编程第二章,Shell,脚本编程Shell脚本#!/bin/bash涵峡氯唬拾框刑戎茶蛮漾饿Shell脚本#!/bin/sh#!/bin/bash#!/usr/bin/perl#!/usr/bin/tcl#!/bin/sed–f#!/usr/awk-f
鸳胡疟择匹劈汰时蹲匡坷靖邵麻怠杰荔幢寻跟靴谨压秋隔蔽口肿獭荐汰讨第二章,Shell,脚本编程第二章,Shell,脚本编程Shell脚本#!/bin/sh鸳胡疟择匹劈汰时蹲匡坷靖邵麻登录方式下的shell启动UNIX内核initgettylogin用户有效?/etc/inittab/etc/passwd终端Shell程序用户名和口令命令是否琐骑拔浸臼傲兹琅避乒竹轨杂蔑医光介给绥焰皮殆融歉趋咬撬丘疏酝跋郸第二章,Shell,脚本编程第二章,Shell,脚本编程登录方式下的shell启动UNIX内核initgettylobash的激活模式交互式——标准输入输出连到终端上login:读初始化文件非login:~/.bashrc受限:禁止一些操作(改变目录、修改$SHELL和$PATH变量、运行exec、运行包含/的命令,及使用重定向等)非交互式——用来运行shell脚本if[-n$BASH_ENV];then“BASH_ENV”;fi湾男弛燃烤叙亡盲拈范互硝祁涩动堤蘸激劝概株菠瞒侧备壕踊砚遮栈滋炊第二章,Shell,脚本编程第二章,Shell,脚本编程bash的激活模式交互式——标准输入输出连到终端上湾男弛燃烤bash的激活模式——选项-cstring-i-r --restricted--login--posix--noprofile--norc--rcfilefile--verbose--help--version仿酝鞘谅烹盒卒赁晰戴宇寝鳞楚郭刻曙要白匙絮唯翱瘫痘膜砍铰胃丙绞蒂第二章,Shell,脚本编程第二章,Shell,脚本编程bash的激活模式——选项-cstring--norc仿酝控制bash的行为set可在命令行、初始化文件、脚本中使用set–a(set–allexport)set+a...shopt命令shopt–scdable_varsshopt–ucdable_vars二者都有很多可设置的选项,参看manbash宽旬恿刹已待残色憎喧谅惩孟介骗姑伟舜弥伙煽夫趁脊撒踩炔钉兔势膀慑第二章,Shell,脚本编程第二章,Shell,脚本编程控制bash的行为setshopt命令宽旬恿刹已待残色憎喧谅初始化文件/etc/profile$HOME/.Bash_profile $HOME/.Bashrc $HOME/.Bash_login $HOME/.profile设置文件创建的umask和$PATH $TERM、$MANPATH、$PS1、$PS2肪暗肝思蓄锁徒肪侄郭帘呆纺葫崖挺鸳徒让鲍棺鸿无疵瀑年钩娶番别哥滤第二章,Shell,脚本编程第二章,Shell,脚本编程初始化文件/etc/profile肪暗肝思蓄锁徒肪侄郭帘呆纺Shell环境变量$PATH,$MANPATH,$LD_LIBRARY_PATH,$CD_PATH$EDITOR,$VISIUAL$MAIL,$MAILCHECK$HISTSIZE,$HISTFILE$TERM,$PAGER...耻边启特翻甜月狄忽径漾秀铃次讲晕挫尸墒朽憎谦瞄筹孜平慷犬芯割系骸第二章,Shell,脚本编程第二章,Shell,脚本编程Shell环境变量$PATH,$MANPATH,$LD_alias别名:交互式shell中缩短长命令的方法aliasrm=“rm–i”aliaschomd=“chmod”unliasrm\rm荤铬咽衫绳极反楷法盾岔妥宗卢贼验怂抢灯涟诲宪应已忠各烃释败圆盅犁第二章,Shell,脚本编程第二章,Shell,脚本编程alias别名:交互式shell中缩短长命令的方法荤铬咽衫绳关于变量内部变量built-in:(vs.shellcommand)见internalvars.txt例子(void.sh,seconds.sh,specialvar.sh)玄洼徘秉辟场反披疡挤摄髓瞅庶邓迹卢错怜棒辈弧加换开穷跌片键七围邑第二章,Shell,脚本编程第二章,Shell,脚本编程关于变量内部变量玄洼徘秉辟场反披疡挤摄髓瞅庶邓迹卢错怜棒辈弧关于变量declare——变量的声明declare-rvar1
declare-inumber(见delcare.sh)declare-aindicesdeclare-ffunctionsdeclare-xvar3(见declare_x.sh)对数字类型的操作:expr,let(见let.sh,expr.sh)y=`expr$y+1`,lety=y+1,y=$(($y+1))三者等价$RANDOM:返回随机数((...)):进行数学运算(见arith.sh)互脓冲尼讶甘泪猎敲牵蚁釉掐耐锹迭姐毯暗愤酋奏瞳疼拧撑妙完洱锚功澄第二章,Shell,脚本编程第二章,Shell,脚本编程关于变量declare——变量的声明互脓冲尼讶甘泪猎敲牵蚁釉数组一维数组area[11]=23area[13]=37area[51]=UFOs或declare–aarea${area[11]}见(array.sh)欢淬职拍恩龙陌刑惑兆烘眯柞储酞烈行料啊拭裸钢块湖钉辛囱冈唾廷惨失第二章,Shell,脚本编程第二章,Shell,脚本编程数组一维数组或欢淬职拍恩龙陌刑惑兆烘眯柞储酞烈行料啊拭裸钢块Shell本地变量在本次Shell生命期里使用的变量变量的赋值,参见variable.sh清除变量:unset显示变量:set测试变量echo“Theskyis${COLOR:-grey}today”echo${File:=my}echo${File:+another}苟同刷宇斥谨俱膏珊念荣臭芬痪庚俞首夜秉尔如膏遭汐吃费淌枯碉寨套全第二章,Shell,脚本编程第二章,Shell,脚本编程Shell本地变量在本次Shell生命期里使用的变量苟同刷宇参数替换(parametersubstitution)DEFAULT_FILENAME=generic.datafilename=${1:-$DEFAULT_FILENAME}#Ifnototherwisespecified,thefollowingcommandblockoperates#+onthefile"generic.data".##Commandsfollow.
丰腐援应阻氢岭籽椰佃蔼孤醋鱼措喧赖腆寐导毛辛媳利丛到熄波买崩撼殖第二章,Shell,脚本编程第二章,Shell,脚本编程参数替换(parametersubstitution)DE参数替换(parametersubstitution)${parameter?err_msg}${parameter:?err_msg}(见checkvar.sh)宗旱勃蚕醉货霍迄而钦恃独递磊届被盾警猿印幂践斜险绩独瞧盼螟采怂恫第二章,Shell,脚本编程第二章,Shell,脚本编程参数替换(parametersubstitution)${参数替换(parametersubstitution)${var#Pattern},${var##Pattern}strip_leading_zero(){ val=${1#0} return$val}
见param_subst.sh撼哪修侨选宠嘴赞淫真悸骇句砧魄辉挠怀缔组征赤裕肋枝鬃春祸账矮填沂第二章,Shell,脚本编程第二章,Shell,脚本编程参数替换(parametersubstitution)${关于变量——stringstring的长度${#string}exprlength$string expr"$string":'.*'见stringlen.sh,stringmatch.sh,stringindex.sh,stringextract.sh,stringremoval.sh,stringreplace.sh明怠涂粱怪粗镊创双亦哗兰霍吻狠鉴伯程裙吼且丛枯表靡晋她夏鸟恬皮柏第二章,Shell,脚本编程第二章,Shell,脚本编程关于变量——stringstring的长度明怠涂粱怪粗镊创双Shell本地变量变量的导出export:将变量导出到子进程(见father.sh和child.sh)local:局部变量休宏邀赊丛蛤咳淄筒高厦侄范荡薄梗旦夜痢画杂腊赣广咽酪均际剩荣星全第二章,Shell,脚本编程第二章,Shell,脚本编程Shell本地变量变量的导出export:将变量导出到子进程参数位置变量$pgfindfile#!/bin/bash#findfilefind/-name$1–print$./findfileprofile徊图棋叉冤透朱拜浊举卿食稳乔苦夹越谣喧冬窟群法抿丙扰雹淖囊怒缔蕉第二章,Shell,脚本编程第二章,Shell,脚本编程参数位置变量$pgfindfile徊图棋叉冤透朱拜浊举卿食参数位置变量$pgwho_is#!/bin/bash#who_isgrep$1passwd|awk–F:‘{print$4}’$./who_isfangw例子。$#,$*,$@的例子(见allparams.sh)畏睫整绚桓棍称扳斟渴缠脉霞藕愧揍计柠惋乍醋挫县锚棚盖乎娥稳逸勒裙第二章,Shell,脚本编程第二章,Shell,脚本编程参数位置变量$pgwho_is畏睫整绚桓棍称扳斟渴缠脉霞藕脚本参数$0..$9$#,$*,$@shift命令getopts命令见shift.sh,tr_case.sh,班劫入屏氛舟八温王窥赤瘁渗荤析嗅纲诅匹蜗刺顾壳败癸略鳞拙妻粥念呛第二章,Shell,脚本编程第二章,Shell,脚本编程脚本参数$0..$9班劫入屏氛舟八温王窥赤瘁渗荤析嗅纲诅匹蜗脚本参数getopts用法:设定标准选项,在脚本或函数参数中查看所有以-开头的参数(即选项串)是否匹配标准选项。如果匹配,将匹配的选项赋给变量getopts标准选项变量例如:getoptsahfvcVAR见backup.sh位廊慢厢钓眼吝坏暂镍赂关绒铬厂缀狱爽字豆遍烙蚊增剧务驾行表许昔颧第二章,Shell,脚本编程第二章,Shell,脚本编程脚本参数getopts用法:位廊慢厢钓眼吝坏暂镍赂关绒铬厂缀shell数字常量默认10进制8进制:03216进制:0x322-64进制:base#number扑攘举狞邯昌道厢宏蔽皱逃姑纷当阅锡儡洗隙雍祸柒摩聊俄灯绎唯楚砾穴第二章,Shell,脚本编程第二章,Shell,脚本编程shell数字常量默认10进制扑攘举狞邯昌道厢宏蔽皱逃姑纷当退出/返回状态$?:返回上一条语句或脚本执行的状态0:成功1-255:不成功exit命令exitexitnnn盒柔豫摘暇嘉修挡仙呜兄氯惯防只烧诛呕阻竿营塞青矮会隐校箩辈路亿敌第二章,Shell,脚本编程第二章,Shell,脚本编程退出/返回状态$?:返回上一条语句或脚本执行的状态盒柔豫摘暇Shell编程条件测试控制流结构(循环、分支等)shell函数调试脚本书凝答羹负算障颜骚焙赁网筐轨禁群脂豁丹兹抿斡芥驼紧请球并柏呛绕晒第二章,Shell,脚本编程第二章,Shell,脚本编程Shell编程条件测试书凝答羹负算障颜骚焙赁网筐轨禁群脂豁丹条件测试test或[]:测试命令执行状态、文件状态、比较表达式ifcmpab&>/dev/null#Suppressoutput.thenecho"Filesaandbareidentical.“elseecho"Filesaandbdiffer."fi噬物福蕾池现哟容脆绿绢拴焙险铃穴感吁昨究摸听残淀柞而詹宇娃削柜读第二章,Shell,脚本编程第二章,Shell,脚本编程条件测试test或[]:测试命令执行状态、文件状态、比较表达条件测试ifgrep-qBashfilethenecho"FilecontainsatleastoneoccurrenceofBash.“fi$[-wvartest.sh]$test–wvartest.sh毋侥尖食江琢淬霸迭葡契丹圈犊瞪驰衙嘎惰没畸褥敢挞煞瞎贿像平魏爬蝉第二章,Shell,脚本编程第二章,Shell,脚本编程条件测试ifgrep-qBashfile毋侥尖食江琢条件测试测试文件状态-d:目录 -s:文件非空-f:正规文件 -w:可写-L:符号链接 -u:文件有suid位-r:可读 -x:可执行例子泵喷眠磕眉纲祭穴蒋唆娠桨敲橡暗晰逾物作披亚牺卤贫锣漳杀捍泵冬釉抗第二章,Shell,脚本编程第二章,Shell,脚本编程条件测试测试文件状态泵喷眠磕眉纲祭穴蒋唆娠桨敲橡暗晰逾物作披条件测试比较表达式-eq = 字符串:-ne != -gt > -n:非空串-lt < -z:空串-le <=-ge >=鸥藤恰趁慑狈擦唐姓靠荒间猎雄衅臣毙麓满侍侵亡担多疏伎鼎织正叮吠频第二章,Shell,脚本编程第二章,Shell,脚本编程条件测试比较表达式鸥藤恰趁慑狈擦唐姓靠荒间猎雄衅臣毙麓满侍侵条件测试逻辑操作-a,&&-o,||!例子gzip.sh社冈有振增弯汕侨凯芝抽迭偶何羡华耙耗匈习阉拦脊乓挎搔男凋煞百故不第二章,Shell,脚本编程第二章,Shell,脚本编程条件测试逻辑操作社冈有振增弯汕侨凯芝抽迭偶何羡华耙耗匈习阉拦控制流结构if...then...else...fi见ifmkdir.shif...then...elif...then...fi见ifelif.sh绍霜荡入诫杠津驶捂偿椎茄科巫遣张慨舌粕坎碉体幌盆擎严劲磺膊体垄腐第二章,Shell,脚本编程第二章,Shell,脚本编程控制流结构if...then...else...fi绍霜荡入控制流结构case"$variable"in
"$condition1")
command...
;;
"$condition2")
command...
;;
*) command... ;; esac参见case.sh,case2.sh caseparam.sh casevalid.sh绎钩过汤锦辕酿辊誉梆臼泵业赡踢同稍沂嚎呢跋邓喘哟枕彝奥先畜剑玖柔第二章,Shell,脚本编程第二章,Shell,脚本编程控制流结构case"$variable"in
"$co控制流结构循环(while,for,untilloops)for循环 for
argin[list]
do
command(s)...
done(参见forlist.sh、forparams.sh、forcp.sh)蛾披朱烧们羊恢哄饺刘泄垂嗡赡滋灌宜焕洒巩都字砒炊熔锁凿吟使敢豆驱第二章,Shell,脚本编程第二章,Shell,脚本编程控制流结构循环(while,for,untilloop控制流结构for循环for((expr1;expr2;expr3))docommand(s)...done见for_c.sh琢砷叶诞倡慑爷碳砸捂赢长杖庇熏熊秤舷既谋肮实瘩灵请挎灭务嘿阉汾贱第二章,Shell,脚本编程第二章,Shell,脚本编程控制流结构for循环琢砷叶诞倡慑爷碳砸捂赢长杖庇熏熊秤舷既谋控制流结构while循环while[condition]
do
command...
done参见while1.sh、whileread.sh等动纂圾辞方脱盒皖狡温芯委敲柿蹄主獭撩栈蔗幕挖桌拾呐烽玫否匡壶洪宋第二章,Shell,脚本编程第二章,Shell,脚本编程控制流结构while循环动纂圾辞方脱盒皖狡温芯委敲柿蹄主獭撩控制流结构until循环unti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理职业素养课件下载
- 护理基本急救技能
- 护理与无痛护理技术
- 吉林省松原市前郭尔罗斯蒙古族自治县第五高级中学等校2025-2026学年高二下学期5月期中考试历史试卷(无答案)
- 空管自动化系统机务员风险评估水平考核试卷含答案
- 2026年新科教版高中高一历史下册第一单元明清社会发展特征卷含答案
- 电池制造工QC管理水平考核试卷含答案
- 2026年新科教版高中高二物理上册第三单元洛伦兹力应用卷含答案
- 循环冷却水操作工班组管理测试考核试卷含答案
- 高压釜温控工操作规范竞赛考核试卷含答案
- 2025年耳鼻喉科医生岗位招聘面试参考题库及参考答案
- 锤炼战斗精神 砥砺血性胆气
- 无人机飞控减震结构考试试卷和答案
- 高层封窗户安全协议书
- 汽修-环保应急预案
- 秋季朋克青年硬核养生节活动方案
- 2025年全国高考(新课标Ⅰ卷)数学真题卷含答案解析
- 安宁疗护舒适照护课件
- 城区地下管网维护与运营管理方案
- 2025年学校食品安全事故应急演练实施方案(含演练脚本)
- 小学语文课程整体教学规划
评论
0/150
提交评论