Unix-脚本编程总结与应用实例(共75页).doc

上传人:飞****2 文档编号:14229831 上传时间:2022-05-03 格式:DOC 页数:75 大小:862KB
返回 下载 相关 举报
Unix-脚本编程总结与应用实例(共75页).doc_第1页
第1页 / 共75页
Unix-脚本编程总结与应用实例(共75页).doc_第2页
第2页 / 共75页
点击查看更多>>
资源描述

《Unix-脚本编程总结与应用实例(共75页).doc》由会员分享,可在线阅读,更多相关《Unix-脚本编程总结与应用实例(共75页).doc(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上Huawei Technologies Co. Ltd.华为技术有限公司Confidentiality level密级Total 75 pages共75页Unix 脚本编程总结与应用实例Prepared by 拟制陈刚Date日期2003-09-23Reviewed by 评审人Date日期yyyy-mm-ddApproved by批准Date日期yyyy-mm-ddAuthorized by签发Date日期yyyy-mm-ddHuawei Technologies Co., Ltd. 华为技术有限公司All rights reserved版权所有 侵权必究Revis

2、ion Record 修订记录Date日期Revision Version修订版本CR ID / Defect IDCR号Sec No. 修改章节Change Description修改描述Author作者2003-09-231.00initial 初稿完成陈刚356262003-10-251.011. 修正有关IP地址等一些错误,调整了章节顺序,扩充了内容。2. 增添了iTELLIN自动安装脚本的一些实例3. 加入大纲层次和页眉页脚陈刚35626yyyy-mm-dd1.02xxxx.x.x; y.y.yrevised xxx 修改XXX1. Xxx2. Xxx3. .Name作者名yyyy-

3、mm-dd2.00xxxx.x.x; y.y.yrevised xxx 修改XXX1. Xxx2. Xxx3. .Name作者名Distribution List 分发记录Copy No.Holders Name & Role 持有者和角色Issue Date 分发日期1yyyy-mm-dd2yyyy-mm-dd3yyyy-mm-dd4yyyy-mm-dd5yyyy-mm-ddCatalog 目 录Title 标 题:Unix 脚本编程总结与应用实例Keywords 关键词: unix,shell,正则表达式,匹配Abstract 摘 要:本文描述unix shell的各种应用实例。本文搜集整

4、理常用的shell应用实例,以例子详述unix shell部分命令的使用,着重于正则表达式以及grep、sed、awk等命令,涵盖业务开发中需要使用到的unix shell编程命令,供查阅或者自测使用,面向对象为已经具备脚本编程基础的开发人员。注:文中大部分表达式在sco-unix unixware 7下使用sh测试通过,有些规则或表达式不能通过测试或结果不正确,在本文档中使用红色波浪下划线将其标出,使用时应注意验证其在不同shell下的表现。本文不是命令手册,所以除部分命令如grep、sed、awk外,本文不详述讲述命令的各个参数,查看命令参数请使用man命令,本文着重于以实际例子讲述命令特

5、征。List of abbreviations 缩略语清单:abbreviations缩略语Description 描述命令格式一shell与Unix平台 Unix平台shellFreeBSD3.4/bin/shSGI IPIX6.5/sbin/shHUPX-11usr/bin/shUnixWare 7$SHELL或/bin/shSolaris 8 (固有的)/usr/bin/shSolaris 8 (标准的)/usr/bin/kshIBM AIX 4.3/usr/bin/shIBM AIX 4.3 (可信的)/usr/bin/tshLinux/bin/sh二shell基本知识脚本参数:she

6、ll脚本参数可以任意多,但只有前9各可以被访问,使用shift命令可以改变这个限制。参数从第一个开始,在第九个结束。$0 程序名字$n 第n个参数值,n=1.9 $* 所有命令行参数$所有命令行参数,如果它被包含在引号里,形如”$”,则每个参数也各自被引号包括$# 命令行参数个数 $ 当前进程的进程ID(PID)$! 最近后台进程的进程ID $? 最近使用命令的退出状态其他参数:$CDPATH 包含一系列目录名,cd命令对他们诸葛进行搜索来查找作为参数传递给它的目录;如果该变量未设置,cd命令搜索当前目录$EDITOR 程序(如e-mail程序)里使用的默认编辑器$ENVUNIX查找配置文件的

7、路径$HOME用户初次登录时的起始目录名$MAIL用户的系统邮箱文件的名称$MAILCHECK shell检查用户邮箱是否有新邮件并将结果通知用户的间隔时间(以秒为单位)$PATH包含用户的搜索路径的变量shell用来搜索外部命令或程序的目录$PPID父进程的进程ID$PS1系统第一个提示符,一般为$PS2 系统第二个提示符,一般为$PWD当前工作目录的名称$TERM用户的控制终端的类型.$LINENO所在的代码行,一般用来输出错误行号shift n将命令行参数往左移n位,但$0不变export变量名表将变量名表所列变量传递给子进程read 变量名表从标准输入读字符串,传给指定变量echo变量

8、名表将变量名表指定的变量显示到标准输出set显示设置变量env显示目前所有变量set命令可以重新设定参数表.如set hello wold命令会设定$*为字符串hello world,$n和$#也同时受影响。shift命令可以将所有参数左移一个单位,$*、$n、$#均受影响。数组(在sh中不支持,可以在ksh中使用):$#varlist数组元素个数$datalistindex数组元素$#datalistindex数组元素长度执行命令:1) command :直接执行命令command2) sh command:启动一个shell process执行命令command3) . command:在

9、本process中执行命令command4) exec command:本Script将会被所执行的命令所取代,当这个命令执行完毕之後,本Script也会随之结束。echo 命令使用的特殊字符b退格c显示新行,但是不把光标移到下一行f换页n换行(光标移到下一行)r回车t水平制表符v垂直制表符反斜杠ONASCII码为八进制数N的字符set命令: 把各位置参数的值依次设为”argument-list”里指定的参数,即重新设置$*,$,$1-$9如: set “hello” “world”则 $*和$都变成 hello world$1为hello$2为world三grep 命令搜索文本的匹配内容。格

10、式:grep -option pattern filename选项:-c只输出匹配行的计数-i不区分大小写(只适用于单字符)-h查询多文件时不显示文件名-l查询多文件时只输出包含匹配字符的文件名-n显示匹配行及行号-s不显示不存在或无匹配文本的错误信息-v显示不包括匹配文本的所有行四sed查找和编辑文本。格式: (1) 直接键入命令sed -option command_line filename(2) 将sed命令插入脚本文件,然后调用sedsed -option -f program_file filename(3) 将sed命令插入脚本文件,并使脚本可执行sed program_file

11、 -option filename选项:n 不打印;sed不把编辑行写到标准输出,默认为打印所有行(编辑的和未编辑的)。p命令可以用来打印编辑行。c 下一个命令是编辑命令。在使用多项编辑时要加入该选项。f 如果正在调用sed脚本,要使用此选项。此选项sed脚本支持所有的sed命令。五awk命令awk 是一种程序语言,对于资料的处理具有很强的功能,对于文档里的资料做修改、比较、抽取等处理,awk 能够以很短的程序轻易地完成。如果使用C 语言写程序完成上述的操作不方便且很花费时间,所写的程序也会很大。awk 能够依照用户定义的格式来分解输入的资料也可以依照用户定义的格式来打印资料。awk 可用于在

12、对象文件中逐行读取记录,按照命令中定义的匹配模式寻找相关记录,然后对该记录进行操作动作。格式:(1)直接键入命令:awk -Fchar command_line filename(2)将awk命令插入脚本文件,然后调用awk:awk -f program_file filename前一种形式的-Fchar确定间隔符,command_line为操作动作,filename为对象文件。后一种形式的program_file是指用户按一定格式编制好的对对象文件的匹配与操作。六find命令通过文件名或其它特征查找文件。格式:find path-list predicate-list选项:-typetp文件

13、类型为tp:b块特别文件c字符设备特别文件d目录文件f普通文件p管道文件(FIFO)ssocketI符号链接文件-user uname文件属于用户uname。-group gname文件属于组gname。-sizen文件是n块大小(每块512字节),若n后跟一个c,单位为字节。-atimen在n天内已访问过此文件。-mtime n在n天内已修改过此文件-ctimen在n天内文件被修改、属性(拥有者、组、链接数等)被修改。-execcommand ; 执行命令-print打印当前路径名-newerfile修改时间比file文件晚七test命令命令格式test expression express

14、ion中包含一个以上的判断准则以作为test评诂的标准。两准则间用-a代 表逻辑AND 运算,-o代表逻辑OR运算,而在准则前放置一! 代表NOT 运算。如 果没有括号,则优先权则为! -a -o 。和expr命令相同,相使用左右括 号时,必须在其前面加上 。以下是有关准则的叙述(符合叙述时传回真,否则传回伪):string string不为空白字串 -n string string的长度大於0-z string string的长度等於0string1=string2 string1等於string2 string1!=string2 string1不等於string2 int1 -gt in

15、t2 int1大於int2 int1 -ge int2 int1大於等於int2int1 -eq int2 int1等於int2int1 -ne int2 int1不等於int2 int1 -le int2 int1小於等於int2int1 -lt int2 int1小於int2-r filename 档案可读取 -w filename 档案可写入 -x filename 档案可执行-f filename 档案为一般档-d filename 档案为目录 -s filename 档案为非空的一般档 test -r $filename -a -s $filename八expr命令命令格式 expr

16、 expressionexpression是由字串以及运算子所组成,每个字串或是运算子之间必须用空白隔开 。下表是运算子的种类及功能,而优先顺序则以先後次序排列,可以利用小括号来改变运算的优先次序。其运算结果则输出至标准输出上。: 字串比较。比较的方式是以两字串的第一个字母开始,而以第二个字串的 字母结束。如果相同时,则输出第二个字串的字母个数,如果不同时则传 回0 。|OR运算,如果它非null或者非0,返回第一个表达式,否则返回第二个表达式&AND运算,如果非null或非0,返回第一个表达式,否则返回0=、=、!=整数比较运算符+、-、*、/、%整数算术运算符,其中%求余数。当expres

17、sion中含有*, (, ) 等符号时,必须在其前面加上 ,以免被 Shell 解释成其它意义。 expr 2 * ( 3 + 4 ) 其输出为14 九流程控制语法1. if-then-elif-else-fi语句 if expressionthenelif expressionthenthen-command-list. . .elseelse-command-listfiif-then-fi语句的语义if-then-else-fi语句的语义if-then-elif-else-fi语句的语义4. for语句 for variable in argument-list do command-l

18、ist done for语句的语义for var do commands done 例如for argdoecho $vardone调用 varlist.sh 111 222 3333输出: 111 222 3336. while语句while expressiondo command-list done while语句的语义7. until 语句 until expressiondo command-list done until语句的语义8. break及continue 这两者是用於for, while, until 等循环控制下。break 会跳至done后方执行 ,而continue

19、会跳至done执行,继续执行循环。9. case 语句 case test-string inpat1) command-list1; pat2) command-list2; . . .patN)command-listN;*);esac case语句的语义而pat 除了可以指定一些确定的字串,也可以指定字串的集合,如下* 任意字串 ? 任意字元 abc a, b, 或c三字元其中之一 a-n 从a到n的任一字元| 多重选择,如A|a 十shell脚本调试1.启动调试启动调试Shell脚本的基本语法为: $/bin/sh option script arg1 arg2 . argN这里显式声

20、明了要执行脚本的Shell为/bin/sh,script是脚本的名字,arg1到argN是脚本的参数, option为调试选项,如下所示: -n读所有的命令,但不执行它们 -v在读时显示所有的行-x在执行时显示所有命令和它们的参数。该选项常称为shell 跟踪选项或改变脚本的第一行,象下面那样在该行声明一个调试选项:#!/bin/sh option2.使用set命令在每个调用激活调试模式中,调试模式的缺省行为对脚本中从第一行到最后一行都有效。有时我们只需要调试特定的函数或脚本的一部分,这时调试整个脚本就有些多余。通过使用set命令,我们可以在shell脚本的任何地方启动或取消调试,其基本语法为

21、:set -|+ option这里的option选项与上面的相同。set x 回显set v 详细如#!/bin/ksh -xv3.语法检查在处理任何Shell脚本时,应在准备执行它之前检查脚本的语法,这使我们能改正许多问题。要启动语法检查可使用-n选项,如对于上面的buggy.sh脚本,象下面那样检查语法:$/bin/sh -n ./buggy.sh实例讲解一模式匹配1ls显示所有以hosts.开头的文件lslhosts.* 2ls显示包含x,y,z字符的所有文件lsd*x-z*二正则表达式1grep匹配/etc/services文件中以ftp字符串开头的哪些文本行grepftp/etc/s

22、ervices2grep匹配以system文本结尾的行。grepsystem$file3grep匹配仅包含一个#字符的行。grep#$file4grep匹配以或者abc开头的行grepfile5grep匹配以Ftp或者ftp开头的行grepFftpfile6grep匹配F或者f以外的字符grepFffile7grep匹配除大写字符以外的字符grepA-Zfile8grep匹配以ftp或telnet开头的文本行grepftp|telnetfile9grep匹配以ftp开头,后跟0个或多个-agent的文本行grepftp(-agent)?/etc/services或grepftp(-agent)

23、*/etc/services注:a)在sco unix下,上面的单括号前要加转义符b)在sun os 5.8下,不论加不加单括号均不支持。10grep匹配以ftp开头,后跟1个或多个-agent的文本行grepftp(-agent)+/etc/services说明同上。11grep匹配带有数字6,后跟至少3个0的文本行(使用-E启用边界特性)grep-E603,/etc/services12grep匹配含有(abc)的文本grep(abc)file13常用正则表达式举例正则表达式匹配功能the以the开头行SsignalL匹配单词signal,signaL,Signal,SignaLSsign

24、alL.同上,但加一个句点mayMAYUSER$只包含USER的行tty$以tty结尾的行.带句点的行d.x.x.x对用户、用户组及其它用户组成员有可执行权限的目录l排除关联目录的目录列表.*00之前或之后加任意字符000*000或更多个iI大写或小写IiInN大写或小写I或n$空行.*$匹配行中任意字符$包括6各字符的行a-zA-Z任意单字符a-za-z*至少两个小写字母0-9$非数字或美元表示0-9A-Za-z非数字或字母1231到3中的一个数字Ddevice单词Device或deviceDe.ce前两个字母为De,后跟两个任意字符,最后为ce.$仅有一个字符的行.0-90-9以一个句点和

25、两个数字开始的行“Device”单词DeviceDeVvice.单词Device.或DeVice.0-92-0-92-0-94日期格式dd-mm-yyyy1-90-91,2.0-91,3.0-91,3.0-91,3IP地址格式nnn.nnn.nnn.nnn.*$匹配任意行14grep精确匹配:在抽取字符串后加。grep “48” file15grep消除大小写:加入-i选项grep -I “sept” file16特殊字符:$ . “ * | + ?如果要查询这些字符,需要在前面加转义字符。17grep判断变量含有HOST字符串if 1 -eq echo $VarName | grep -c

26、HOST ; then18grep判断变量含有xxx字符串if 1 -eq echo $VarName | grep -c .* ; then19grep匹配后缀为c,h,j,s,cpp,hpp的文件EXT_ALL=chjsEXT_PP=chEXT_NO_PP=jsls $1 | grep .$EXT_ALLp0,2$ | grep -v .$ EXT_NO_PPp1,2$ | grep -v .$ EXT_PPp1$20使用grep在文件中查找变量grep echo $user /etc/passwd | cut f5 d:21正则表达式语法来自msdn,仅供参考。Here are some

27、 examples of regular expressions:ExpressionMatches/s*$/Match a blank line./d2-d5/Validate an ID number consisting of 2 digits, a hyphen, and an additional 5 digits./*)?sS*/Match an HTML tag.The following table contains the complete list of metacharacters and their behavior in the context of regular

28、expressions:CharacterDescriptionMarks the next character as a special character, a literal, a backreference, or an octal escape. For example, n matches the character n. n matches a newline character. The sequence matches and ( matches (.Matches the position at the beginning of the input string. If t

29、he RegExp objects Multiline property is set, also matches the position following n or r.$Matches the position at the end of the input string. If the RegExp objects Multiline property is set, $ also matches the position preceding n or r.*Matches the preceding character or subexpression zero or more t

30、imes. For example, zo* matches z and zoo. * is equivalent to 0,.+Matches the preceding character or subexpression one or more times. For example, zo+ matches zo and zoo, but not z. + is equivalent to 1,.?Matches the preceding character or subexpression zero or one time. For example, do(es)? matches

31、the do in do or does. ? is equivalent to 0,1nn is a nonnegative integer. Matches exactly n times. For example, o2 does not match the o in Bob, but matches the two os in food.n,n is a nonnegative integer. Matches at least n times. For example, o2, does not match the o in Bob and matches all the os in

32、 foooood. o1, is equivalent to o+. o0, is equivalent to o*.n,mM and n are nonnegative integers, where n = m. Matches at least n and at most m times. For example, o1,3 matches the first three os in fooooood. o0,1 is equivalent to o?. Note that you cannot put a space between the comma and the numbers.

33、?When this character immediately follows any of the other quantifiers (*, +, ?, n, n, n,m), the matching pattern is non-greedy. A non-greedy pattern matches as little of the searched string as possible, whereas the default greedy pattern matches as much of the searched string as possible. For exampl

34、e, in the string oooo, o+? matches a single o, while o+ matches all os.Matches any single character except n. To match any character including the n, use a pattern such as sS.(pattern)A subexpression that matches pattern and captures the match. The captured match can be retrieved from the resulting

35、Matches collection using the $0$9 properties. To match parentheses characters ( ), use ( or ).(?:pattern)A subexpression that matches pattern but does not capture the match, that is, it is a non-capturing match that is not stored for possible later use. This is useful for combining parts of a patter

36、n with the or character (|). For example, industr(?:y|ies) is a more economical expression than industry|industries.(?=pattern)A subexpression that performs a positive lookahead search, which matches the string at any point where a string matching pattern begins. This is a non-capturing match, that

37、is, the match is not captured for possible later use. For example Windows (?=95|98|NT|2000) matches Windows in Windows 2000 but not Windows in Windows 3.1. Lookaheads do not consume characters, that is, after a match occurs, the search for the next match begins immediately following the last match,

38、not after the characters that comprised the lookahead.(?!pattern)A subexpression that performs a negative lookahead search, which matches the search string at any point where a string not matching pattern begins. This is a non-capturing match, that is, the match is not captured for possible later us

39、e. For example Windows (?!95|98|NT|2000) matches Windows in Windows 3.1 but does not match Windows in Windows 2000. Lookaheads do not consume characters, that is, after a match occurs, the search for the next match begins immediately following the last match, not after the characters that comprised

40、the lookahead.x|yMatches either x or y. For example, z|food matches z or food. (z|f)ood matches zood or food. xyzA character set. Matches any one of the enclosed characters. For example, abc matches the a in plain. xyzA negative character set. Matches any character not enclosed. For example, abc matches the p in plain. a-zA range of characters. Matches any character in the specified range. For example, a-z matches any lowercase alphabetic character in the range a through z. a-zA negative range characte

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁