OS教学课件:2-Shell 编程_第1页
OS教学课件:2-Shell 编程_第2页
OS教学课件:2-Shell 编程_第3页
OS教学课件:2-Shell 编程_第4页
OS教学课件:2-Shell 编程_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux课堂Shell编程本次课程内容正则表达式Shell简介特殊变量Shell编程使用Crontab正则表达式正则表达式(regularexpression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征正则表达式基础最简单的,假设搜索包含cat的字符,也就是正则表达式是“cat”,如果大小写不敏感,那么句点,代表任意一字符,比如正则表达式是"c.t",那么将匹配cat,cut,ckt,c#t,c!t这些中括号,为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。比如正则表达式是t[aeio]n,那么只能匹配tan,ten,tin,ton这些或符号,比如t(a|e|i|o|oo)n,匹配tan,ten,tin,ton,toon这些匹配次数的符号思考:假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。正则表达式怎么写?否符号“^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。例如,图的正则表达式匹配所有单词,但以“X”字母开头的单词除外。其他符号圆括号和空白符号假设要从格式为“June26,1951”的生日日期中提取出月份部分,用来匹配该日期的正则表达式可以:/[a-zA-Z]\{3,}\s\d\{1,2},\s\d\{4}课堂练习测试一个email地址,校验其是否正确测试一个身份证号码测试一个手机号cut命令cut是以每一行为一个处理对象的,这种机制和sed是一样的。cut命令主要是接受三个定位方法:第一,字节(bytes),用选项-b第二,字符(characters),用选项-c第三,域(fields),用选项-fcut举例[rocrocket@rocrocketprogramming]$who|cut-b3[rocrocket@rocrocketprogramming]$who|cut-b3-5,8其他几个文本命令tee命令结果保存到某一文件并输出到屏幕tr命令把一个字符转换成另一个字符tr-c-d-s[“str1_translate_from”][“str2_translate_to”]<input-file

-c用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。

-d删除字符串1中所有输入字符。

-s删除所有连续重复出现字符序列,只保留第一个。

input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。awk命令它几乎可以完成

grep和sed所能完成的全部工作,同时,它还可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。awk用法:awk

[

-F

re]

[parameter...]

['prog']

[-f

progfile][in_file...]awk举例echo"a|b|c|d|e"|awk-F"|"'{print$1$3$5}‘awk-F":"'{print$1"\t\t"$4}'/etc/passwd|grep'1003'sed命令sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。Sed命令调用sed命令有两种形式:sed[options]'command'file(s)sed[options]-fscriptfilefile(s)#sed'1d'ab#删除第一行#sed'2,$d'ab#删除第二行到最后一行#sed-n'1,2p'ab#显示第一行到第二行#sed-n'/ruby/p'ab#查询包括关键字ruby所在所有行#sed'1adrinktea'ab#第一行后增加字符串"drinktea"

#sed'1cHi'ab#第一行代替为HiShell简介Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器),作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。分类:BourneShell,CShell,KornShell,BourneAgainShell(bash)Shell特殊变量变量 含义$0 脚本名字$1 位置参数#1$2-$9 位置参数#2-#9${10} 位置参数#10$# 位置参数的个数"$*" 所有的位置参数(作为单个字符串)*"$@" 所有的位置参数(每个都作为独立的字符串)${#*} 传递到脚本中的命令行参数的个数${#@} 传递到脚本中的命令行参数的个数$? 返回值$$ 脚本的进程ID(PID)$- 传递到脚本中的标志(使用set)$_ 之前命令的最后一个参数$! 运行在后台的最后一个作业的进程ID(PID)*必须被引用起来,否则默认为"$@".特殊变量$RANDOM产生一个随机整数,范围在0-32767产生指定范围内的随机数rnumber=$(((RANDOM%(max-min+divisibleBy))/divisibleBy*divisibleBy+min))/dev/null随机字符串如何获取随机字符串:/dev/urandom随机设备产生一连串字符/usr/bin/md5sumMD5转换/bin/cut字符串切割head-1/dev/urandom|md5sumecho$var1|cut-b起始位置-结束位置特殊字符#这是一行注释(#!/bin/sh例外);命令分割符.等同于source(bash的内建命令)""双引号,部分引用''单引号,全部引用:表示空命令,什么都不做变量赋值a=375;hello=$a;#注意,=两边不能有空格,如果有,代表啥意思?VARIABLE=value;脚本认为VARIABLE是一个变量并带了一个参数=valueVARIABLE=value;脚本认为value是一个命令,命令执行后的结果赋值给VARIABLEechohello#没有使用变量echo$hello#输出hello变量里面的值echo${hello}#同上变量赋值思考a=16+5;echo$a;结果是什么?let"a=1+2";echo$a;变量操作${var}$(cmd)$((exp))$echo$((3+2))5$echo$((3>2))1$echo$((25<3?2:3))3$echo$var$echo$((var=2+3))5$echo$var5$echo$((var++))5$echo$var6$Shell中的算术运算1、使用expr外部命令r=`expr4+5`;注意!'4''+''5'这三者之间要有空白echo$r;2、使用$(())r=$((4+5));echo$r;3、使用$[]r=$[4+5];echo$r;4、使用let命令letn=4+5;echo$n;注意:乘幂怎么做?比如2的三次方,2**3虽然Bashshell有四种算术运算方法,但并不是每一种都是跨平台的,建议使用exprread命令用法:read变量名比如reada;执行后,命令行等待输入状态,输入值后,该值赋给变量a试一下??reada;echo$a;字符操作表达式 含义${#string} $string的长度

${string:position} 在$string中,从位置$position开始提取子串${string:position:length} 在$string中,从位置$position开始提取长度为$length的子串

${string#substring} 从变量$string的开头,删除最短匹配$substring的子串${string##substring} 从变量$string的开头,删除最长匹配$substring的子串${string%substring} 从变量$string的结尾,删除最短匹配$substring的子串${string%%substring} 从变量$string的结尾,删除最长匹配$substring的子串

${string/substring/replacement} 使用$replacement,来代替第一个匹配的$substring${string//substring/replacement} 使用$replacement,代替所有匹配的$substring${string/#substring/replacement} 如果$string的前缀匹配$substring,那么就用$replacement来代替匹配到的$substring${string/%substring/replacement} 如果$string的后缀匹配$substring,那么就用$replacement来代替匹配到的$substring

exprmatch"$string"'$substring' 匹配$string开头的$substring*的长度expr"$string":'$substring' 匹配$string开头的$substring*的长度exprindex"$string"$substring 在$string中匹配到的$substring的第一个字符出现的位置exprsubstr$string$position$length 在$string中从位置$position开始提取长度为$length的子串exprmatch"$string"'/($substring/)' 从$string的开头位置提取$substring*expr"$string":'/($substring/)' 从$string的开头位置提取$substring*exprmatch"$string"'.*/($substring/)' 从$string的结尾提取$substring*expr"$string":'.*/($substring/)' 从$string的结尾提取$substring**$substring是一个正则表达式.课堂练习输入两个数字,完成这两个数字的加法,并输出结果。效果如图:选择结构if语法:ifCOMMANDS;then.....elifCOMMANDS;then......else.....fi举例:判断一个数字是否在[10,20]的范围#!/bin/shecho-n"Pleaseinputanumber";readnum1;if[$num1-ge10]&&[$num1-le20];thenecho"Yes";elseecho"No";fitest整数比较

-eq等于,如:if["$a"-eq"$b"]-ne不等于,如:if["$a"-ne"$b"]-gt大于,如:if["$a"-gt"$b"]-ge大于等于,如:if["$a"-ge"$b"]-lt小于,如:if["$a"-lt"$b"]-le小于等于,如:if["$a"-le"$b"]

大于(需要双括号),如:(("$a">"$b"))>=大于等于(需要双括号),如:(("$a">="$b"))test文件[-a文件]如果文件存在为真。[-d文件]为真如果文件存在而且是一个目录。[-e文件]为真如果文件存在。[-f文件]为真如果文件存在而且是一个普通文件。case语法case$numin1)echo"January";;双分号结束2)echo"Feburary";;5)echo"may"每个case可以有多条命令

echo"sdfd"echo"sdf";;但最后一条命令一定是双分号结束*)echo"notcorrectinput";;*)是其他值、default的意思esacfor循环#数字段形式foriin{1..10}doecho$idone#详细列出(字符且项数不多)forFilein12345doecho$Filedone#对存在的文件进行循环forshnamein`ls*.sh`doname=`echo"$shname"|awk-F.'{print$1}'`echo$namedone#查找循环(ls数据量太大的时候也可以用这种方法)forshnamein`find.-typef-name"*.sh"`doname=`echo"$shname"|awk-F/'{print$2}'`echo$namedone#((语法循环--有点像C语法,但记得双括号for((i=1;i<100;i++))doif((i%3==0))thenecho$icontinuefidone#seq形式起始从1开始foriin`seq100`doif((i%3==0))thenecho$icontinuefidonewhile循环#while循环注意为方括号[],且注意空格min=1max=100while[$min-le$max]doe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论