脚本的调试
-n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
-v 一边读脚本,一边把执行过的脚本命令打印到标准错误输出
-x 可以在程序中设置调试某一段
grep 基本正则(+E可成扩展正则)
egrep 扩展正则
shell编程常用工具: grep 根据文件内容无过滤find 根据文件名文件类型awk 列处理工具sed 行处理工具xargs 将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。 find
不会打开文件里面的内容
命令的形式: find 路劲名 -option[-print -exec -ok...] 参数 pathname:查找的目录路径(/表示系统根目录,递归查找)-print:将匹配的文件输出到标准输出-exec: 对匹配的文件执行参数所给出的shell命令-ok: 和-exec作用相同,模式安全例如:
1. 找到当前目录下的所有普通文件,并将他们全部列出 find . -type f -exec ls -l {} ; 在/logs目录中查找更改时间在5日天以前的文件并删除 $ find logs -type f -mtime +5 -exec rm {} ; 2.用perm选项按照文件权限模式用perm选项,按文件权限模式来查找文件(八进制)
find . -perm 755 -print 3.忽略某个目录使用-prune,如果同时使用了-depth选项,那么-prune就会被find忽略
4. -nouser查找主账户已经被删除的文件,使用-nouser.
在home目录下查找所有的这类文件: find /home -nouser -print xargs将前一个命令的输出传递给下一个命令,作为参数,默认命令echo
只有一个进程,每次只获取一部分文件。
xargs与管道|的区别| 用来将前一个命令的标准输出传递到下一个命令的标准输入。
xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。
xargs与exec的区别 exec参数是一个一个传递的,传递一个参数执行一次命令;xargs一次将参数传给命令,可以使用-n控制参数个数exec文件名有空格等特殊字符也能处理;xargs不能处理特殊文件名,如果想处理特殊文件名需要特殊处理exec的缺点是
每处理一个文件/目录,都要启动一次命令,效率不好;格式麻烦,必须用{}做文件的代位符,必须用 ;作为命令的结束符,书写不便。而xargs不能操作文件名有空格的文件。所以如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的、 文件数目也不大,那么使用 xargs比较方便; 否则,就要用 exec了。 sed行处理工具
流编译器。把待处理文件的内容连同处理结果一起输出常用命令:
/pattern/p 打印匹配pattern的行/pattern/d 删除匹配pattern的行/pattern/s/pattern1/pattern2/ 查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2/pattern/s/pattern1/pattern2/g 查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2打印其中包含abc的行:
python@ubuntu:~/1004$ vi t10.shpython@ubuntu:~/1004$ sed '/456/p' t10.sh123abc456456删除:
python@ubuntu:~/1004$ sed /abc/d t10.sh123456删除第二行第三行:
python@ubuntu:~/1004$ sed '2,3d'除 t10.sh123匹配标签:
sed 's/<[^>]*>/ /g' t11.sh awk 列处理工具 $0 代表行$1,$2...列打印第二列:
python@ubuntu:~/1004$ awk '{print $2;}' t12.sh102030打印第二列大于10的:
python@ubuntu:~/1004$ awk '$2>10 {printf "%st%sn", $0, "aaa"}' t12.shp2 20aaap3 30aaa打印一共有多少行空格:
python@ubuntu:~/1004$ awk '/^ *$/ {x=x+1;} END {print x}' t12.sh5打印系统中的用户账号列表:
awk 'BEGIN {FS=":"} {print $1;}' /etc/passwd