shell编程.doc
《shell编程.doc》由会员分享,可在线阅读,更多相关《shell编程.doc(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一部分s h e l l第1章文件安全与权限chown和chgrp: - R选项意味着对所有子目录下的文件也都进行同样的操作。- h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。1 软链接文件软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。 链接文件甚至可以链接不存在的文件,这就产生一般称之为断链的问题(或曰“现象),链接文件甚至可以循环链接自己。类似于编程语言中的递归。用ln -s 命令可以生成一个软连接2 硬链接文件info ln 命令告诉您,硬链接是已存在文件的另一个名字(A hard link is anot
2、her name for an existing file),这多少有些令人困惑。硬连接的命令是ln -d existfile newfile硬链接文件有两个限制1)、不允许给目录创建硬链接;2)、只有在同一文件系统中的文件之间才能创建链接。对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容第2章使用find和xargsfind pathname -options -print -exec -okpathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print find命令将
3、匹配的文件输出到标准输出。-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为 command ;,注意 和;之间的空格。-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。Find选项-name 按照文件名查找文件。-perm 按照文件权限来查找文件。-prune 使用这一选项可以使f i n d命令不在当前指定的目录中查找,如果同时使用了- d e p t h选项,那么- p r u n e选项将被f i n d命令忽略。-user 按照文件属主来查找文件。
4、-group 按照文件所属的组来查找文件。-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。Find命令还有- atime和-ctime选项,但它们都和-mtimne选项相似,所以我们在这里只介绍- m t i m e选项。-nogroup 查找无有效所属组的文件,即该文件所属的组在/ e t c / g r o u p s中不存在。-nouser 查找无有效属主的文件,即该文件的属主在/ e t c / p a s s w d中不存在。-newer file1 ! file2 查找更改时间比文件f i l e
5、 1新但比文件f i l e 2旧的文件。-type 查找某一类型的文件,诸如:b - 块设备文件。d - 目录。c - 字符设备文件。p - 管道文件。l - 符号链接文件。f - 普通文件。-size nc 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/ e t c / f s t a b中找到,该配置文件中包含了本系统中有关文件系统的信息。-mount 在查找文件时不跨越文件系统m o u n t点。-follow
6、如果f i n d命令遇到符号链接文件,就跟踪至链接所指向的文件。-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。2.1.13 使用exec或ok来执行shell命令exec选项后面跟随着所要执行的命令,然后是一对儿 ,一个空格和一个,最后是一个分号。为了使用e x e c选项,必须要同时使用p r i n t选项。如果验证一下f i n d命令,会发现该命令只输出从当前路径起的相对路径及文件名。find . -name ospf6d -print -exec ls -l ;2.2 xargsfind命令将所有匹配到的文件一起传递给e x e c执行。有些系统对能够传递给
7、e x e c的命令长度有限制F i n d命令把匹配到的文件传递给x a rg s命令,而x a rg s命令每次只获取一部分文件而不是全部,不像- e x e c选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。常见使用:find| xargs 命令如:find . -type f -print | xargs file第3章后台执行命令?应用较差第4章文件名置换* 匹配文件名中的任何字符串,包括空字符串。? 匹配文件名中的任何单个字符。. 匹配 中所包含的任何字符。!. 匹配 中非感叹号!之后的字符。使用 . . . 可以用来匹配方括号 中的任何字符。在这一方
8、法中,还可以使用一个横杠-来连接两个字母或数字,以此来表示一个范围。第5章shell输入与输出使用e c h o命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:echo stringe c h o命令有很多功能,其中最常用的是下面几个:c 不换行。f 进纸。t 跳格。n 换行。5.5 teetee命令作用可以用字母T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。它的一般形式为:tee -a files5.10 exece x e c命令可以用来替代当前s h e l l;换
9、句话说,并没有启动子s h e l l。使用这一命令时任何现有环境都将会被清除,并重新启动一个s h e l l。它的一般形式为:exec command如何使用文件描述符第6章命令执行顺序命令1 & 命令2这种命令执行方式相当地直接。& &左边的命令(命令1)返回真(即返回0,成功被执行)后,& &右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功& &那么执行这个命令”。使用| |的一般形式为:命令1 | 命令2| |的作用有一些不同。如果| |左边的命令(命令1)未执行成功,那么就执行| |右边的命令(命令2);或者换句话说,“如果这个命令执行失败了| 那么就执行这个命令
10、”。为了在当前s h e l l中执行一组命令,可以用命令分隔符隔开每一个命令,并把所有的命令用圆括号()括起来。它的一般形式为:(命令1;命令2;. . .)如果使用 来代替(),那么相应的命令将在子s h e l l而不是当前s h e l l中作为一个整体被执行,只有在 中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子s h e l l中执行,否则在当前s h e l l执行。它的一般形式为:命令1;命令2;. . . 第二部分文本过滤第7章正则表达式介绍 匹配数据集。 只匹配字母和数字。 匹配一定范围内的字符串集 匹配行首与行尾。7.2 在行首以匹配字符串或字符序列只允许在
11、一行的开始匹配字符或单词行首前4个字符为c o m p,匹配操作表示为: comp7.3 在行尾以$匹配字符串或字符可以说$与正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。假定要匹配以单词t r o u b l e结尾的所有行,操作为:t r o u b l e $7.5 使用屏蔽一个特殊字符的含义下列字符可以认为是特殊字符:$.”*0+?7.6 使用匹配一个范围或集合使用 匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开使用“ -”表示一个字符串范围,表明字符串范围从“ -”左边字符开始,到“ -”右边字符结束。假定要匹配任意一个数字,可以使用: 0 1 2 3
12、 4 5 6 7 8 9 然而,通过使用“-”符号可以简化操作: 0 - 9 7.7 使用匹配模式结果出现的次数匹配字母A出现两次,并以B结尾,操作如下:A 2 B匹配A至少4次,使用:A 4 , B如给出出现次数范围,例如A出现2次到4次之间:A 2 , 4 B第8章grep 家族 grep(参数)选项。 匹配g r e p的一般模式。 只匹配字母或数字,或两者混用。 匹配字符串范围。g r e p一般格式为:grep 选项基本正则表达式文件这里基本正则表达式可为字符串。一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串8.1.2 grep选项常用的g r e p选
13、项有:-c 只输出匹配行的计数。-i 不区分大小写(只适用于单字符)。-h 查询多文件时不显示文件名。-l 查询多文件时只输出包含匹配字符的文件名。-n 显示匹配行及行号。-s 不显示不存在或无匹配文本的错误信息。-v 显示不包含匹配文本的所有行。8.1.3 查询多个文件如果要在当前目录下所有. d o c文件中查找字符串“ s o r t”,方法如下:$ grep sort*.doc或在所有文件中查询单词“ sort it”$ grep sort it *8.1.7 精确匹配使用g r e p抽取精确匹配的一种更有效方式是在抽取字符串后加 。假定现在精确抽取4 8,方法如下grep 48 d
14、ata.f8.1.8 大小写敏感g r e p是大小写敏感的,如要查询大小写不敏感字符串,必须使用- i开关8.2.2 不匹配行首如果要抽出记录,使其行首不是4 8,可以在方括号中使用记号,表明查询在行首开始6grep 488.2.8 使用grep匹配“与”或者“或”模式g r e p命令加- E参数,这一扩展允许使用扩展模式匹配。Grep E 219|216 结合使用和$可查询空行8.3 类名第9章AWK 介绍9.1 调用awk 抽取域。 匹配正则表达式。 比较域。 向a w k传递参数。 基本的a w k行操作和脚本。有三种方式调用a w k,第一种是命令行方式Awk -F fieldse
15、parator command inputfiles此文件各域以冒号作为分隔符,则必须指明- F选项,如:Awk F: command inputfile第二种方法是将所有a w k命令插入一个文件,并使a w k程序可执行,然后用a w k命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。第三种方式是将所有的a w k命令插入一个单独文件Awk F awk-scriptfile inputfile9.2 awk脚本如果设置了- F选项,则a w k每次读一条记录或一行,并使用指定的分隔符分隔指定域,但如果未设置- F选项,a w k假定空格为域分隔符,并保持这个设置直到发现一新行。当新
16、行出现时,a w k命令获悉已读完整条记录,然后在下一个记录启动读命令,这个读进程将持续到文件尾或文件不再存在。9.2.1 模式和动作任何a w k语句都由模式和动作组成。在一个a w k脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。打印动作: awk print $1 awk.txt6. 打印报告头: awk BEGIN print name beltn- printf $1t$4n awk.txt7. 打印信息尾:awk BEGIN print name beltn- printf $1t$4n END pr
17、int that is the endn awk.txt9. awk 键盘输入如果没有指定文件则默认键盘输入9.2.3 awk中正则表达式及其操作正则表达式用斜线括起来,在文本文件中查询字符串G r e e n,使用/ G r e e n /可以查出单词G r e e n的出现情况。9.2.4 元字符+ 使用+匹配一个或多个字符。? 匹配模式出现频率。例如使用/X Y?Z/匹配X Y Z或Y Z。其余与grep和sed同9.2.5 条件操作符1. 匹配为使一域号匹配正则表达式,使用符号后紧跟正则表达式,也可以用i f语句。a w k中i f后面的条件用()括起来。awk if($1=48) p
18、rint $0 awk.txt式if($4/brown/) print 意即如果f i e l d - 4包含b r o w n,2. 精确匹配使用=,awk if($1=48) print $0 awk.txt7. 设置大小写awk /Ddec/ awk.txt9.2.6 awk内置变量A R G C 命令行参数个数A R G V 命令行参数排列E N V I R O N 支持队列中系统环境变量的使用FILENAME a w k浏览的文件名F N R 浏览文件的记录数F S 设置输入域分隔符,等价于命令行- F选项N F 浏览记录的域个数N R 已读的记录数O F S 输出域分隔符O R S
19、 输出记录分隔符R S 控制记录分隔符内置变量的输出貌似无法在BEGIN中执行9.2.8 awk操作符1. 设置输入域到域变量名一般的变量名设置方式为n a m e = $ n,这里n a m e为调用的域变量名, n为实际域号。3. 修改数值域取值当在a w k中修改任何域时,重要的一点是要记住实际输入文件是不可修改的,修改的只是保存在缓存里的a w k复本。awk $1=$1+1;print $0 awk.txt6. 创建新的输出域awk BEGINprint firsttlasttdiffnif($1$7) $8=$1-$7;print $1,$7,$8 awk.txt7. 增加列值aw
20、k total+=$1ENDprint the first segment sum istotal awk.txt9.2.9 内置的字符串函数1. gsub要在整个记录中替换一个字符串为另一个,使用正则表达式格式, /目标模式/,替换模式/。例如改变学生序号483到383:awk gsub(/483/,383) print $0 awk.txt9.2.10 字符串屏蔽序列9.2.12 printf修饰符输出同c中类似3. 向一行a w k命令传值4. awk脚本文件首行为!/bin/awk f, 其余与grep类似6. 向a w k脚本传值awk script_file var=value i
21、nput_file9.2.13 awk数组用split函数将元素划分进一个数组awk BEGIN print split(123#456#789,myarray,#)数组使用前,不必定义,也不必指定数组元素个数。经常使用循环来访问数组。下面是一种循环类型的基本结构:For (element in array ) print arrayelement第10章sed 用法介绍s e d是一个非交互性文本流编辑器。比起vi更有效10.1 sed怎样读取数据s e d从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定
22、位行号编辑它。重复此过程直到命令结束。10.2 调用sed使用s e d命令行格式为:sed 选项 s e d命令输入文件。使用s e d脚本文件,格式为:sed 选项 -f sed脚本文件输入文件要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为:s e d脚本文件选项 输入文件不管是使用s h e l l命令行方式或脚本文件方式,如果没有指定输入文件, s e d从标准输入中接受输入,一般是键盘或重定向结果。s e d选项如下:n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。c 下一命令是编辑命令。使用多项编辑时加入此
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- shell 编程
限制150内