Contenu connexe Similaire à Using Shell & Mastering Shell Similaire à Using Shell & Mastering Shell (20) Using Shell & Mastering Shell12. 命令
• Shell关键字 alias别名
!
• 内建命令 function函数
!
• 外部命令
bash-3.2$ type if
if is a shell keyword
bash-3.2$ type type
type is a shell builtin
bash-3.2$ type grep
grep is /usr/bin/grep
bash-3.2$ type ll
ll is an alias for ls -l
bash-3.2$ type take
take is a shell function
13. 常⽤用命令
• 帮助:man, type, which
• ⽂文件:mkdir, cp, mv, rm, ln, touch, chmod, sudo, find
• ⽂文本:cat, sort, uniq, cut, tr, wc, diff, tail, head, less
• grep, awk, sed
• 系统:ps, top, kill, pkill, pgrep, uname
• ⺴⽹网络:wget, ssh, scp, curl
• http://ss64.com/bash/
15. • mkdir foo && cd $_
• find . -type f -name “*.log” -cmin -30
• cat webapp.log.20140115* | grep
‘module=place’ | grep -v ‘action=list’ | wc -l
• ps aux | grep ‘lighttpd’ | awk ‘{print $2}’ |
xargs kill -9
17. 条件测试
• test expression
• [ expression ]
• [[ expresioon ]] #bash扩展版,⽀支持正则表达式 =~,⽀支
持模式匹配 ==
• expression表达式分为⽂文件型、字符串型、整数型,逻辑
操作符
• 结合控制运算符 && 和 ||
bash-3.2$ test -f foo.txt
bash-3.2$ [ -f foo.txt ]
19. 参数扩展
• # 前提:如果foo定义了,但为空,则:
!
• ${foo-default} # 还使⽤用$foo(即为空)
• ${foo:-default} # 使⽤用default字符串,*常⽤用*
!
• ${foo=default} # 还使⽤用$foo(即为空)
• ${foo:=default} # 将$foo设置成default字符串,*常⽤用*
!
• ${foo+default} # 使⽤用default
• ${foo:+default} # 使⽤用$foo(即为空)
!
• ${foo?default} #还使⽤用$foo(即为空)
• ${foo:?default} # 使⽤用default,为作为标准错误输出的⼀一部分内容
20. `
• ls *.log #路径名扩展
• ls ~ #波浪线扩展
• $((1+1)) #算术扩展*
• echo {1..10}; cp foo{,.bak} #花括号扩展
• echo {$i:-1} #参数扩展*
• ls -l $(which cp) #命令扩展*
21. 字符串匹配处理
• ${var#pattern} # 最短头匹配截取
• ${var##pattern} # 最⼤大头匹配截取
• ${var%pattern} # 最短尾匹配截取
• ${var%%pattern} # 最⼤大尾匹配截取
!
• ${var:position} #从左往右看,匹配position(position是整数)位置之左的,留下之后的
• ${var:(-position)} #从右往左看,匹配position位置之左的,()是为了避免和${var-default}冲突
• ${var:position:length} # 匹配position位置之前的同时,显⽰示之后的⻓长度为length
!
• ${var/pattern/replacement} # 第⼀一次匹配的被替换,类似:sed 's/pattern/replacement/'
• ${var//pattern/replacement} # 全局的匹配被替换,类似:sed 's/pattern/replacement/g'
• ${var#/prefix/replacement} # prefix前缀替换
• ${var%/suffix/replacement} # suffix后缀替换
22. 特殊参数
• $#: 位置参数的数量
• $*: 所有位置参数的内容($1 $2 ...)
• $@: 所有位置参数的内容(“$1” “$2” ... )
• $?: 命令执⾏行后返回的状态
• $$: 当前进程的进程号
• $!: 后台运⾏行的最后⼀一个进程号
• $0: 当前执⾏行的进程名
• $1, $2, $3等: 位置参数
• $_: 之前执⾏行的命令的最后⼀一个参数
26. 正则表达式
• 基本的正则表达式(BREs,Basic Regular Expression)
• 扩展的正则表达式(EREs,Extended Regular Expression)
• Perl 的正则表达式(PREs,Perl Regular Expression)
• grep
• BREs
• -E EREs
• -P PREs
• sed
• BREs
• -r EREs
• awk
• EREs
27. 主要差异
字段 说明 BREs EREs PRCs
() 匹配表达式
不⽀支持(但可以
使⽤用(),如:
(dog)
() ()
?
匹配前⾯面的⼦子表达式 0
次或 1 次
不⽀支持(同?) ? ?
d 匹配从 0 到 ⼀一数字字符 不⽀支持 不⽀支持 d
s 匹配任何空⽩白字符, 不⽀支持 不⽀支持 s
30. set 命令
• set -u # 确保变量都被初始化
• set -e # 确保捕获所有⾮非0状态
• set -n # 预读⽽而不执⾏行(交互式时不⽣生效)
• set -x # 显⽰示详细执⾏行过程
• set -o pipefail # 结合-e,捕获管道间错误