shell脚本基础知识-shell中的特殊符号
(1)* :代表零个或多个字符或数字。
test后⾯可以没有任何字符,也可以有多个字符,总之有或没有都能匹配出来。
(2)? :只代表⼀个任意的字符
不管是数字还是字母,只要是⼀个都能匹配出来。
(3)# :这个符号在linux中表⽰注释说明的意思,即”#”后⾯的内容linux会忽略掉。
在命令的开头或者中间插⼊”#” ,linux都会忽略掉”#”后⾯的内容。这个符号在shell脚本中⽤的很多。
(4)\ :脱意字符,将后⾯的特殊符号(例如”*” )还原为普通字符。
(5) | :管道符,它的作⽤在于将符号前⾯命令的结果丢给符号后⾯的命令。这⾥提到的后⾯的命令,并不是所有的命令都可以的,⼀般针对⽂档操作的命令⽐较常⽤,例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等,其中grep, sed, awk为正则表达式必须掌握的⼯具。
(6)$ :除了⽤于变量前⾯的标识符外,还有⼀个妙⽤,就是和’!’结合起来使⽤。
‘!$’表⽰上条命中中最后⼀个变量(也许称为变量不合适,总之就是上条命令中最后出现的那个东西)例如上边命令最后是那么在当前命令下输⼊!$则代表。
(7)grep :过滤⼀个或多个字符,将会在后续内容中详细介绍其⽤法。
(8)cut :截取某⼀个字段
语法:cut -d “分隔字符” [-cf] n 这⾥的n是数字
-d :后⾯跟分隔字符,分隔字符要⽤双引号括起来
-c :后⾯接的是第⼏个字符
-f :后⾯接的是第⼏个区块
-d 后⾯跟分隔字符,这⾥使⽤冒号作为分割字符,-f 1 就是截取第⼀段,-f和1之间的空格可有可⽆。
-c 后⾯可以是1个数字n,也可以是⼀个区间n1-n2,还可以是多个数字n1,n2,n3
(9) sort :⽤做排序
语法:sort [-t 分隔符] [-kn1,n2] [-nru] 这⾥的n1 < n2
-t 分隔符 :作⽤跟cut的-d⼀个意思
-n :使⽤纯数字排序
-r :反向排序
-u :去重复
-kn1,n2 :由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序
(10)wc :统计⽂档的⾏数、字符数、词数,常⽤的选项为:
-l :统计⾏数
-m :统计字符数
-w :统计词数
(11)uniq :去重复的⾏,我常⽤的选项只有⼀个:
-c :统计重复的⾏数,并把⾏数写在前⾯
有⼀点需要注意,在进⾏uniq之前,需要先⽤sort排序然后才能uniq。
(12)tee :后跟⽂件名,类似与重定向”>”,但是⽐重定向多了⼀个功能,在把⽂件写⼊后⾯所跟的⽂件中的同时,还显⽰在屏幕上。
(13)tr :替换字符,常⽤来处理⽂档中出现的特殊符号,如DOS⽂档中出现的^M符号。常⽤的选项
有两个:
-d :删除某个字符,-d 后⾯跟要删除的字符
-s :把重复的字符去掉
最常⽤的就是把⼩写变⼤写: tr ‘[a-z]’ ‘[A-Z]’
(14)split :切割⽂档,常⽤选项:
-b :依据⼤⼩来分割⽂档,单位为byte
格式如上例,后⾯的passwd为分割后⽂件名的前缀,分割后的⽂件名为test1aa, test1ab, test1ac …
-l :依据⾏数来分割⽂档
(15); :分号。平时我们都是在⼀⾏中敲⼀个命令,然后回车就运⾏了,那么想在⼀⾏中运⾏两个或两个以上的命令如何呢?则需要在命令之间加⼀个”;”了。
(16)~ :⽤户的家⽬录,如果是root则是 /root ,普通⽤户则是 /home/username
(17)& :如果想把⼀条命令放到后台执⾏的话,则需要加上这个符号。通常⽤于命令运⾏时间⾮常长的情况。使⽤jobs可以查看当前shell中后台执⾏的任务。⽤fg可以调到前台执⾏。这⾥的sleep命令就是休眠的意思,后⾯跟数字,单位为秒,常⽤于循环的shell脚本中。此时你按⼀下CTRL +z 使之暂停,然后再输⼊bg可以再次进⼊后台执⾏。
重定向过多是什么意思如果是多任务情况下,想要把任务调到前台执⾏的话,fg后⾯跟任务号,任务号可以使⽤jobs命令得到。
(18)>, >>, 2>, 2>> :前⾯讲过重定向符号> 以及>> 分别表⽰取代和追加的意思,然后还有两个符号就是这⾥的2> 和 2>> 分别表⽰错误重定向和错误追加重定向,当我们运⾏⼀个命令报错时,报错信息会输出到当前的屏幕,如果想重定向到⼀个⽂本⾥,则要⽤2>或者2>>。
(19)[ ] :中括号,中间为字符组合,代表中间字符中的任意⼀个
(20)&& 与 ||
在上⾯刚刚提到了分号,⽤于多条命令间的分隔符。另外还有两个可以⽤于多条命令中间的特殊符号,那就是 “&&”和”||”。下⾯笔者把这⼏种情况全列出:
1) command1 ; command2
2) command1 && command2
3) command1 || command2
使⽤”;”时,不管command1是否执⾏成功都会执⾏command2; 使⽤”&&”时,只有command1执⾏成功后,command2才会执⾏,否则command2不执⾏;使⽤”||”时,command1执⾏成功后command2 不执⾏,否则去执⾏command2,总之command1和command2总有⼀条命令会执⾏。