shell脚本学习指南

1.将自己编写的脚本加入自己的bin目录,并加入$PATH的列表(shell能够自动找到脚本)

例如:查找某个用户xiaoming正使用的终端是什么?

cat > finduser  建立新文件
#!/bin/sh
#finduser----查看第一个参数所指定的用户是否登录
who | grep $1
^D
chmod +x finduser 设置执行权限
./finduser xiaoming
#将脚本放在自己的bin目录中
cd
mkdir bin
mv finduser bin
PATH=$PATH:$HOME/bin
finduser xiaoming  执行

2.执行跟踪

显示shell每个被执行到的命令,并在前面加上“+”

例如:

#建立文件

cat > nusers  

#! /bin/sh -

who | wc -l 

^D

#让文件拥有执行的权限

chmod +x nusers

#测试 ./nusers


#打开执行跟踪功能

sh -x nusers

或者脚本里用set -x 、set +x 来打开,关闭跟踪功能

例如:

cat > trace1.sh

#! /bin/sh

set -x 

#做某些事


set +x

#再做某些事

^D

3.查找替换

3.1

grep

egrep:功能更强大,但耗掉更多资源

fgrep:匹配固定字符串而不是正则表达式

例如:

who | grep -F austen 等价who | grep  austen 

选项:

-E 使用扩展正则表达式匹配 。 grep -E 等价于egrep

-F  使用固定字符串匹配

-i  匹配忽略大小写

-s  不显示错误信息

-f pat-file  从pat-file文件读取模式作匹配

3.2 正则表达式

  ^tmp$    仅仅匹配tmp

 [Tt]tmp   匹配Tmp,tmp 

tmp.tmp   配tmp,接任意一个字符,接tmp

tmp.*tmp   tmp与tmp间有>=0个字符

匹配注意:

1) 注意大小写。WORD匹配WORD,但不匹配word

2)特殊字符转义。\* 匹配* ,  \\ 匹配\,  [ ] 表示任意一个

例如 c[1234]t ,匹配c1t,c3t等

3)[0123456789] 等价于[0-9]

类似的:[abc...xyz]等价于[a-z]

二者混合:[0-9a-zA-Z]

4)[ab[.ch.]de]  匹配字符a、b、d或e,或者成对的ch,不匹配单独的c或h字符

5)表示所有英文字母的正确写法是[[:alpha:]],不是[:alpha:]。排序元素,等价字符集,必须放在

方括号表达式的方括号内认可。

6)区间表达式:

a\{5\}   重现5个a

q\{10,42\} 重现10到42个q

\{n\}    重现n次

\{n,\}    重现至少n次

\{n,m\}   重现n至m次

m,n必须在0-RE-DUP-MAX之间,一般在0-32767间

7)

特殊符号 代表意义
[:alnum:] 代表英文大小写字节及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字节,亦即 A-Z, a-z
[:blank:] 代表空白键与 [Tab] 按键两者
[:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已,亦即 0-9
[:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字节,亦即 a-z
[:print:] 代表任何可以被列印出来的字节
[:punct:] 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 代表大写字节,亦即 A-Z
[:space:] 任何会产生空白的字节,包括空白键, [Tab], CR 等等
[:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节

[[:upper:]] \{3\}      avcABCddddEDD

[[:upper:]] \{3\}$      avcABCddddEDD

^[[:alpha:]] \{3\}      avcABCdddd  开始的第1,2,3个字符

7)

?    >=0个正则表达式

+     >=1个正则表达式

*     >=0

少敲几个字:

ab+c匹配abec abccccc 不匹配ac

8)  (...)分组功能

(why)+   >=1个连续的why

[Tt]he ( CPU|computer) is    含有CPU或computer的句子

read | write+   一个read,或一个write后接任意个e字符(writee,writeeeee)

(read | write)+   重现多个read或write

9) ^abc|ddd$   以abc开头 或者以ddd结尾

^(abc|ddd)$ 找一个正是abc或ddd的字符串

3.3正则表达式的扩展

1)\<与\>   分别匹配单词的开头与结尾

\<chop   匹配 use chopsticks,不匹配a lambchop

chop\>  匹配上述的第二个字符串,不匹配第一个

但\<chop\>均不匹配

2)文本文件替换

grep---取出文本

sed----替换

P74

---------------------------------------------------------

未完待续

你可能感兴趣的:(shell脚本学习指南)