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
---------------------------------------------------------
未完待续