首页 shell脚本入门

shell脚本入门

举报
开通vip

shell脚本入门prl、shll、python之shll脚本入门2014072315:357046人阅读评论(0)收藏举报shll是操作linux的基本,是必须学的。学shll就是学linux命令。prl有强大的正则表达式支持,对于文本处理非常强悍,玩linux不得不学。python作用一种面向对象的,能作为linux脚本的语言,学好之后能帮你很好地完成工作。shll翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。shll可以通过其条件语句和循环语句等,把一系列li...

shell脚本入门
prl、shll、python之shll脚本入门2014072315:357046人阅读评论(0)收藏举报shll是操作linux的基本,是必须学的。学shll就是学linux命令。prl有强大的正则表达式支持,对于文本处理非常强悍,玩linux不得不学。python作用一种面向对象的,能作为linux脚本的语言,学好之后能帮你很好地完成工作。shll翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。shll可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序,shllscript,来实现一些较为复杂的功能。总括,shll是linux命令集的概称,是属于命令行的人机界面shll脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shll脚本的世界吧。到现在为止,你明白什么是shll脚本吗?如果明白最好了,不明白也没有关系,相信随着学习的深入你就会越来越了解到底什么是shll脚本。首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shll中,所以叫shll脚本。说白了,shll脚本就是一些命令的集合。举个例子,我想实现这样的操作:1)进入到tmp目录;2)列出当前目录中所有的文件名;3)把所有当前的文件拷贝到root目录下;4)删除当前目录下所有的文件。简单的4步在shll窗口中需要你敲4次命令,按4次车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shll脚本了,只是这个shll脚本有它特殊的格式。Shll脚本能帮助我们很方便的去管理服务器,因为我们可以指定一个任务 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 定时去执行某一个shll脚本实现我们想要需求。这对于linux系统管理员来说是一件非常值得自豪的事情。现在的139邮箱很好用,发邮件的同时还可以发一条邮件通知的短信给用户,利用这点,我们就可以在我们的linux服务器上部署监控的shll脚本,比如网卡流量有异常了或者服务器wb服务器停止了就可以发一封邮件给管理员,同时发送给管理员一个报警短信这样可以让我们及时的知道服务器出问题了。有一个问题需要约定一下,凡是自定义的脚本建议放到usrlocalsbin目录下,这样做的目的是,一来可以更好的管理文档;二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护。【shll脚本的基本结构以及如何执行】Shll脚本通常都是以.sh为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shll脚本了。tst.sh中第一行一定是“!binbash”它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shll脚本就不能被执行。’’表示注释,在前面讲过的。后面跟一些该脚本的相关注释 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 以及作者和创建日期或者版本等等。当然这些注释并非必须的,如果你懒的很,可以省略掉,但是笔者不建议省略。因为随着你工作时间的增加,你写的shll脚本也会越来越多,如果有一天你头查看你写的某个脚本时,很有可能忘记该脚本是用来干什么的以及什么时候写的。所以写上注释是有必要的。另外系统管理员并非你一个,如果是其他管理员查看你的脚本,他看不懂岂不是很郁闷。该脚本再往下面则为要运行的命令了。Shll脚本的执行很简单,直接”shfilnam“即可,另外你还可以这样执行默认我们用im编辑的文档是不带有执行权限的,所以需要加一个执行权限,那样就可以直接使用’.filnam’执行这个脚本了。另外使用sh命令去执行一个shll脚本的时候是可以加x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。该shll脚本中用到了’dat’这个命令,它的作用就是用来打印当前系统的时间。其实在shll脚本中dat使用率非常高。有几个选项笔者常常在shll脚本中用到:%Y表示年,%m表示月,%d表示日期,%H表示小时,%M表示分钟,%S表示秒注意%y和%Y的区别。d选项也是经常要用到的,它可以打印n天前或者n天后的日期,当然也可以打印n个月年前或者后的日期。另外星期几也是常用的【shll脚本中的变量】在shll脚本中使用变量显得我们的脚本更加专业更像是一门语言,开个玩笑,变量的作用当然不是为了专业。如果你写了一个长达1000行的shll脚本,并且脚本中出现了某一个命令或者路径几百次。突然你觉得路径不对想换一下,那岂不是要更改几百次?你固然可以使用批量替换的命令,但是也是很麻烦,并且脚本显得臃肿了很多。变量的作用就是用来解决这个问题的。在tst2.sh中使用到了反引号,你是否还记得它的作用?’d’和’d1’在脚本中作为变量出现,定义变量的格式为“变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号,这跟前面讲的在shll中自定义变量是一致的。下面看看脚本执行结果吧。下面我们用shll计算两个数的和。数学计算要用’[]’括起来并且外头要带一个’$’。脚本结果为:Shll脚本还可以和用户交互。这就用到了rad命令了,它可以从 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 输入获得变量的值,后跟变量名。”radx”表示x变量的值需要用户通过键盘输入得到。脚本执行过程如下:我们不妨加上x选项再来看看这个执行过程:在tst4.sh中还有更加简洁的方式。radp选项类似cho的作用。执行如下:你有没有用过这样的命令”tcinit.diptablsrstart“前面的tcinit.diptabls文件其实就是一个shll脚本,为什么后面可以跟一个”rstart”?这里就涉及到了shll脚本的预设变量。实际上,shll脚本在执行的时候后边是可以跟变量的,而且还可以跟多个。不妨笔者写一个脚本,你就会明白了。执行过程如下:在脚本中,你会不会奇怪,哪里来的$1和$2,这其实就是shll脚本的预设变量,其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2,当然一个shll脚本的预设变量是没有限制的,这你明白了吧。另外还有一个$0,不过它代表的是脚本本身的名字。不妨把脚本修改一下。执行结果想必你也猜到了吧。【shll脚本中的逻辑判断】如果你学过C或者其他语言,相信你不会对if陌生,在shll脚本中我们同样可以使用if逻辑判断。在shll中if判断的基本语法为:1)不带lsif判断语句;thncommandfi在if1.sh中出现了((a<60))这样的形式,这是shll脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式,即可。执行结果为:2)带有lsif判断语句;thncommandlscommandfi执行结果为:3)带有lifif判断语句一;thncommandlif判断语句二;thncommandlscommandfi这里的表示“并且”的意思,当然你也可以使用||表示“或者”,执行结果:以上只是简单的介绍了if语句的结构。在判断数值大小除了可以用”(())”的形式外,还可以使用”[]”。但是就不能使用>,<,=这样的符号了,要使用lt小于),gt大于),l小于等于),g大于等于),q等于),n不等于)。再看看if中使用和||的情况。shll脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项::判断文件或目录是否存在d:判断是不是目录,并是否存在f:判断是否是普通文件,并存在r:判断文档是否有读权限w:判断是否有写权限x:判断是否可执行使用if判断时,具体格式为:if[filnam];thn在shll脚本中,除了用if来判断逻辑外,还有一种常用的方式,那就是cas了。具体格式为:cas变量inalu1)command;;alu2)command;;alu3)command;;)command;;sac上面的结构中,不限制alu的个数,则代表除了上面的alu外的其他值。下面笔者写一个判断输入数值是奇数或者偶数的脚本。$a的值或为1或为0,执行结果为:也可以看一下执行过程:cas脚本常用于编写系统服务的启动脚本,例如tcinit.diptabls中就用到了,你不妨去查看一下。【shll脚本中的循环】Shll脚本中也算是一门简易的编程语言了,当然循环是不能缺少的。常用到的循环有for循环和whil循环。下面就分别介绍一下两种循环的结构。脚本中的sq15表示从1到5的一个序列。你可以直接运行这个命令试下。脚本执行结果为:通过这个脚本就可以看到for循环的基本结构:for变量名in循环的条件;docommanddon循环的条件那一部分也可以写成这样的形式,中间用空格隔开即可。你也可以试试,foriinls;docho$i;don和foriincattst.txt;docho$i;don再来看看这个whil循环,基本格式为:whil条件;docommanddon脚本的执行结果为:另外你可以把循环条件忽略掉,笔者常常这样写监控脚本。whil:;docommanddon【shll脚本中的函数】如果你学过开发,肯定知道函数的作用。如果你是刚刚接触到这个概念的话,也没有关系,其实很好理解的。函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样就节省了时间还节省了空间。fun.sh中的sum()为自定义的函数,在shll脚本中要用function函数名(){command}这样的格式去定义函数。上个脚本执行过程如下:有一点笔者要提醒你一下,在shll脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。Shll脚本大体上就介绍这么多了,笔者所举的例子都是最基础的,所以即使你把所有例子完全掌握也不代表你的shll脚本编写能力有多么好。所以剩下的日子里你尽量要多练习,多写脚本,你写的脚本越多,你的能力就越强。希望你能够找专门介绍shll脚本的书籍深入的去研究一下它。随后笔者将给你留几个shll脚本的练习题,你最好不要偷懒。1.编写shll脚本,计算1100的和;2.编写shll脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;3.编写shll脚本,把root目录下的所有目录只需要一级)拷贝到tmp目录下;4.编写shll脚本,批量建立用户usr00,usr01,,usr100并且所有用户同属于usrs组;5.编写shll脚本,截取文件tst.log中包含关键词’abc’的行中的第一列假设分隔符为”:”),然后把截取的数字排序假设第一列为数字),然后打印出重复次数超过10次的列;6.编写shll脚本,判断输入的IP是否正确IP的规则是,n1.n2.n3.n4,其中1<n1<255,0<n2<255,0<n3<255,0<n4<255)。以下为练习题答案:1.!binbashsum=0foriinsq1100;dosum=$[$i+$sum]doncho$sum2.!binbashn=0whil[$nlt1];doradpPlasinputanumbr,itmustgratrthan1:ndonsum=0foriinsq1$n;dosum=$[$i+$sum]doncho$sum3.!binbashforfinlsroot;doif[d$f];thncpr$ftmpfidon4.!binbashgroupaddusrsforiinsq09;dousraddgusrsusr0$idonforjinsq10100;dousraddgusrsusr$jdon5.!binbashawkF':''$0abc{print$1}'tst.log>tmpn.txtsortnn.txt|uniqc|sortn>tmpn2.txtawk'$1>10{print$2}'tmpn2.txt6.!binbashchckip(){ifcho$1|grpq'[09]{1,3}\.[09]{1,3}\.[09]{1,3}\.[09]{1,3}$';thna=cho$1|awkF.'{print$1}'b=cho$1|awkF.'{print$2}'c=cho$1|awkF.'{print$3}'d=cho$1|awkF.'{print$4}'fornin$a$b$c$d;doif[$ng255]||[$nl0];thnchothnumbrofthIPshouldlssthan255andgratthan0rturn2fidonlschoThIPyouinputissomthingwrong,thformatislik192.168.100.1rturn1fi}rs=1whil[$rsgt0];doradpPlasinputthip:ipchckip$iprs=cho$?donchoThIPisright!Shll脚本编程总结及速查 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 Shll是一种编程语言,它像其它编程语言如:C,Jaa,Python等一样也有变量函数运算符if语句循环控制但在开始之前,我想先理清Shll语言与Shll之间的关系.Shll与Shll语言上面说了Shll是一种编程语言但你可能也听说过:shbashcshzsh它们也叫Shll,实际上这里所说的Shll是一种应用程序,它负责解释执行你编写的Shll脚本,Mac默认就自带了shbashcshzshtcshksh,你可以这样查看cattcshlls不同的shll的用法基本相同,但有些shll提供了一些新特性,比如我现在在用的就是zsh,更多zsh的内容可以去看这篇文章。程序员高效开发利器:编程水杯第一个Shll脚本!binshchohlloshll!依国际惯例这里以在终端里打印一句hlloshll!开始,第一行的!是一个约定标记,它告诉脚本这段脚本需要什么解释器来执行.第二行的cho命令则负责向屏幕上输出一句话.如何运行运行shll程序有3种方法:1.chmod+x使文件具有可执行权限,直接运行2.直接调用解释器,将脚本文件作为参数传入(比如bashhi.sh)3.使用sourc(也可用.代替)执行文件通常情况下,最方便的方式就是方式1,通过方式1执行你需要在脚本第一行写好这段脚本由哪个解释器来解释,而通过方式2来执行则没有这个限制,写了也没用.除此之外方式1与方式2执行命令就没有区别了,但方式3执行的方式与前两种都不同:使用sourc执行shll脚本时,不会创建子进程,而是在父进程中直接执行!这里不作更多解释,感兴趣的同学可以去参考LinuxShll编程从入门到精通这本书的第一章的相关部分.变量和其它语言一样Shll中也有变量,而且更简单,但有一些比较特殊的地方.1.Shll中的变量只有字符串这一种类型2.Shll中变量名与变量值没有长度限制3.Shll的变量也允许比较操作和整数操作,只要变量中的字符串为数字定义变量ariablnam=ghui需要注意:=两边不能加空格,当赋值语句包含空格时请加引号(单引号双引号均可)比如:ariablnam=ghui'sblogShll中的变量可以分为两种类型:1.局部变量(定义变量时在前面加local修饰符)2.全局变量(定义变量时不加任何修饰符)与其它语言一样局部变量的可见范围是代码块或函数内,全局变量在全局范围内可见.看个简单的例子:!binshnum=111全局变量func1(){localnum=222局部变量cho$num}chobfor$numfunc1choaftr$num输出:bfor111222aftr111使用变量使用一个定义过的变量,只要在变量名前面加$即可,如:nam=ghuicho$namcho${nam}{}为了帮助解释器识别变量边界,非必须在使用变量时还有一个地方需要注意,请看下面的例子:!binshstr='abc'cho1print$strcho'2print$str'输出:1printabc2print$str即:被双引号括起来的变量会发生变量替换,单引号不会注释Shll中注释使用,而且它不支持多行注释.常用的字符串操作字符串拼接nam=shllsayHi=hllo,$nam!sayHi2=hllo,${nam}!cho$sayHi$sayHi2注意:上面说的单双引号引起的变量替换问题获得字符串长度string=abcdcho${string}输出:4截取字符串str=hlloshllcho${str:2}输出:lloshllcho${string:1:3}输出:ll更多关于字符串的操作可以看这个ifls流程控制基本语法结构:ifconditionthn dosomthinglifconditionthn dosomthinglifconditionthn dosomthingls dosomthingfi其中,lif语句和ls语句非必须的.看个例子:!binsha=1if[$1=$a]thn choyouinput1lif[$1=2]thn choyouinput2ls donothing choyouinput$1fi很简单,不过这里有两个地方需要注意,如果某个条件下的执行体为空,则你就不能写这个条件即下面这样会报错:ifconditionthn donothinglifconditionthn donothingorls donothing另外,[]两边一定要加空格,下面这样都会报错:if[$a=$b]orif[$a=$b]orif[$a=$b]只有这样if[$a=$b]才是对的.注意:实际上这里的[]是tst命令的一种形式,[是系统的一个内置命令,存在路径是bin[,它是调用tst命令的标识,右中括号是关闭条件判断的标识,因此下面的两个测试语句是等效的:iftst2>3thn fi和if[2>3]thn fi除[]之外,shll语言中还有几种其它括号,比如:单小括号双小括号双中括号,不同的括号有不同的用法,更多关于shll中,括号的用法可以看看这个switch流程控制当条件较多时,可以选择使用switch语句,shll中的switch语句的写法和其它语言还是有些不同的,基本结构如下:casxprssionin pattrn1) dosomthing;; pattrn2) dosomthing;; pattrn2) dosomthing;; sac看个例子:!binshinput=$1cas$inputin1|0)str=一or零;;2)str=二;;3)str=三;;)str=$input;;saccho$str这个例子会根据你执行此脚本时传入的参数不同在屏幕上输出不同的值,其中第一个cas1|0代表逻辑或.NOTE:1.;;相当于其它语言中的brak2.每个pattrn之后记得加)3.最后记得加sac(即反的cas)for循环基本结构:fornam[inlist]do don其中,[]括起来的inlist,为可选部分,如果省略inlist则默认为in$@,即你执行此命令时传入的参数列表.看个例子:forfilin.txtdo opn$fildon遍历当前目录下的所有txt文件,并依次打开.whil循环基本结构:whilconditiondo dosomthingdon看个例子:!binshi=0whil((i<5));do ((i++)) choi=$idon输出:i=1i=2i=3i=4i=5NOTE:你可能需要去了解一下(())的用法until循环基本结构untilconditiondo dosomthingdon看个例子:!binshi=5until((i==0))do ((i)) choi=$idon输出:i=4i=3i=2i=1i=0跳出循环shll中也支持brak跳出循环,continu跳出本次循环.用法与C,Jaa中相同函数要定义一个函数,可以使用下面两种形式:functionfuncnam(){ dosomthing}或者funcnam(){ dosomthing}看个例子!binshad.sh计算sumadd(){ ltsum=$1+$2 rturn$sum}add$1$2chosum=$?输入ad12输出sum=3其中,$?在shll中保存的是上一条命令的返值NOTE:1.函数必须先定义后使用2.如果在函数中使用xit会退出脚本,如果想退到原本函数调用的地方,则可使用rturn向脚本传递参数先shll脚本传递参数,非常简单,只需要在你执行命令的后面跟上即可,看个例子:!binshtst.shcho$paramtrs;cho$@;cho$0cho$1输入:tst.sh1122输出:2paramtrs1122tst.sh11后记之所以要写这篇博客,有以下几个原因:1.想总结一下shll编程中的关键 知识点 高中化学知识点免费下载体育概论知识点下载名人传知识点免费下载线性代数知识点汇总下载高中化学知识点免费下载 ,方便日后查看.2.想通过shll优化一下我的hxo写作及博客管理流程,目前相关脚本已完成,待我下一篇博客分享给大家,如果你也是在用Hxo写博客,相信对你会很有用,尽请期待!已经发布3.可以看的出这里总结的都是最关键的知识点,还有很多这里并没有说.是因为我觉得刚开始学习一个东西没必要太计较一些细节琐碎的东西,掌握好大致知识框架,然后在大家编写具体的脚本时,遇到具体问题,再去googl寻找即可.
本文档为【shell脚本入门】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_847814
暂无简介~
格式:doc
大小:391KB
软件:Word
页数:27
分类:互联网
上传时间:2017-01-16
浏览量:34