Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Using Shell
Mastering Shell
shengxuanwei
2014-01-15
想听到什么?
1. Shell基础
2. Shell应⽤用
3. Shell原理
没了,该怎么办?
1. 了解:有基础的认识,简单地模仿
2. 使⽤用:针对具体⼯工作,灵活地应⽤用
3. 掌握:从语法和原理⼊入⼿手,组合命令,形成
Shell脚本
《Linux命令⾏行⼤大全》
• 它会教你⼊入⻔门
• 了解各种类型的命令
《Shell脚本学习指南》
• 完整的Shell语法
• POSIX标准
《Advanced Bash-Scripting
Guide》
• 免费英⽂文电⼦子书
• 看名字⽐比较⾼高级
• 其实差不多
Shell三问
1. What
2. When
3. How
什么是Shell
• ⼀一个程序
• 解释性语⾔言
• 与Kernel交互
• bourne shell,bash,zsh
Shell应⽤用场景
• 环境部署
• 编程开发
• 线上观察
• 数据分析
• 系统管理
Shell特点
• Quick and dirty,糙快猛
• 做⼀一件事,并把他做好(Unix设计哲学)
• 搭积⽊木,从⼩小到⼤大,没有设计
Shell编程基础
• Unix/Linux
• Shell环境和语法
• 命令⾏行⼯工具
• 正则表达式,http://regex.alf.nu
• ⽂文本编辑器
命令
• Shell关键字 alias别名
!
• 内建命令 function函数
!
• 外部命令
bash-3.2$ type if	
if is a shell keyword
bash-3.2$ type type	
type is a...
常⽤用命令
• 帮助:man, type, which
• ⽂文件:mkdir, cp, mv, rm, ln, touch, chmod, sudo, find
• ⽂文本:cat, sort, uniq, cut, tr, wc, diff,...
readlines库
• history
• !!, !str, !num
• emacs mode
• C-r, C-p, C-a, C-e, C-u, C-k, C-l
• mkdir foo && cd $_
• find . -type f -name “*.log” -cmin -30
• cat webapp.log.20140115* | grep
‘module=place’ | grep -v ‘a...
管道与IO重定向
• 标准输⼊入(stdin)、输出(stdout)、错误(stderr)
• ⽂文件描述符, 0, 1, 2
• [n] < file
• [n] >[|] file、 [n] >> file
• &> file 、>& file 、&...
条件测试
• test expression
• [ expression ]
• [[ expresioon ]] #bash扩展版,⽀支持正则表达式 =~,⽀支
持模式匹配 ==
• expression表达式分为⽂文件型、字符串型、整数型...
变量和数组
• foo=bar #=两边不能有空格,访问时$foo
• foo=“bar 1” #值有空格等特殊字符时需要引
⽤用引⽤用
• lst[0]=1 #访问时${lst[0]}
• lst=(1 2 3 4) #访问时${lst[@]...
参数扩展
• # 前提:如果foo定义了,但为空,则:
!
• ${foo-default} # 还使⽤用$foo(即为空)
• ${foo:-default} # 使⽤用default字符串,*常⽤用*
!
• ${foo=default} ...
`
• ls *.log #路径名扩展
• ls ~ #波浪线扩展
• $((1+1)) #算术扩展*
• echo {1..10}; cp foo{,.bak} #花括号扩展
• echo {$i:-1} #参数扩展*
• ls -l $(w...
字符串匹配处理
• ${var#pattern}  # 最短头匹配截取
• ${var##pattern} # 最⼤大头匹配截取
• ${var%pattern} # 最短尾匹配截取
• ${var%%pattern} # 最⼤大尾匹配截取
!...
特殊参数
• $#: 位置参数的数量
• $*: 所有位置参数的内容($1 $2 ...)
• $@: 所有位置参数的内容(“$1” “$2” ... )
• $?: 命令执⾏行后返回的状态
• $$: 当前进程的进程号
• $!: 后台运⾏行...
环境变量
• export #设置新的环境变量
• env #显⽰示所有环境变量
• set #显⽰示所有本地定义的shell变量
• unset #清除环境变量
• $PATH, $PWD, $HOME, $SHELL
if, for, while
#!/bin/bash*
**
if*[*,d*'/home/work'*];*then'
****echo*“work*dir*exist”
else*
****echo*"work*dir*not*exist"...
function
• return值会作为退出值,默认是return $?
• 位置参数会被临时覆盖,$#,$@,$1
function foo {	
	 commands	
	 return	
}
foo() {	
	 commands	
	...
正则表达式
• 基本的正则表达式(BREs,Basic Regular Expression)
• 扩展的正则表达式(EREs,Extended Regular Expression)
• Perl 的正则表达式(PREs,Perl Regul...
主要差异
字段 说明 BREs EREs PRCs
() 匹配表达式
不⽀支持(但可以
使⽤用(),如:
(dog)
() ()
?
匹配前⾯面的⼦子表达式 0
次或 1 次
不⽀支持(同?) ? ?
d 匹配从 0 到 ⼀一数字字符 不⽀支持...
awk
• 输⼊入流处理,经常⽤用于统计分析
• pattern模式,action操作
• BEGIN,END模式
• awk –F “t” “{print $1}”
• awk –F “t” “{printf(“%dn”,$2)}END{}”
sed
• 逐⾏行处理输⼊入,并将结果发送到屏幕
• 定址
• 可以是数字、正则表达式、或⼆二者的结合
• 命令
• d,删除
• p,打印
• s,替换
• q,退出
set 命令
• set -u # 确保变量都被初始化
• set -e # 确保捕获所有⾮非0状态
• set -n # 预读⽽而不执⾏行(交互式时不⽣生效)
• set -x # 显⽰示详细执⾏行过程
• set -o pipefail #...
notice
• 命令执⾏行前按tab确认操作参数,尤其rm
• 修改配置⽂文件时,记得先备份,再修改
• 赋值等号两边没有空格
• 条件测试[ ]内两边有空格
• 双引号、单引号、转义
谢谢
Q & A
You’ve finished this document.
Download and read it offline.
Upcoming SlideShare
下一个读代码的人就是你
Next
Upcoming SlideShare
下一个读代码的人就是你
Next
Download to read offline and view in fullscreen.

Share

Using Shell & Mastering Shell

Download to read offline

Shell编程入门分享

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Using Shell & Mastering Shell

  1. 1. Using Shell Mastering Shell shengxuanwei 2014-01-15
  2. 2. 想听到什么? 1. Shell基础 2. Shell应⽤用 3. Shell原理
  3. 3. 没了,该怎么办? 1. 了解:有基础的认识,简单地模仿 2. 使⽤用:针对具体⼯工作,灵活地应⽤用 3. 掌握:从语法和原理⼊入⼿手,组合命令,形成 Shell脚本
  4. 4. 《Linux命令⾏行⼤大全》 • 它会教你⼊入⻔门 • 了解各种类型的命令
  5. 5. 《Shell脚本学习指南》 • 完整的Shell语法 • POSIX标准
  6. 6. 《Advanced Bash-Scripting Guide》 • 免费英⽂文电⼦子书 • 看名字⽐比较⾼高级 • 其实差不多
  7. 7. Shell三问 1. What 2. When 3. How
  8. 8. 什么是Shell • ⼀一个程序 • 解释性语⾔言 • 与Kernel交互 • bourne shell,bash,zsh
  9. 9. Shell应⽤用场景 • 环境部署 • 编程开发 • 线上观察 • 数据分析 • 系统管理
  10. 10. Shell特点 • Quick and dirty,糙快猛 • 做⼀一件事,并把他做好(Unix设计哲学) • 搭积⽊木,从⼩小到⼤大,没有设计
  11. 11. Shell编程基础 • Unix/Linux • Shell环境和语法 • 命令⾏行⼯工具 • 正则表达式,http://regex.alf.nu • ⽂文本编辑器
  12. 12. 命令 • 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. 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/
  14. 14. readlines库 • history • !!, !str, !num • emacs mode • C-r, C-p, C-a, C-e, C-u, C-k, C-l
  15. 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
  16. 16. 管道与IO重定向 • 标准输⼊入(stdin)、输出(stdout)、错误(stderr) • ⽂文件描述符, 0, 1, 2 • [n] < file • [n] >[|] file、 [n] >> file • &> file 、>& file 、&>> file • /dev/null
  17. 17. 条件测试 • test expression • [ expression ] • [[ expresioon ]] #bash扩展版,⽀支持正则表达式 =~,⽀支 持模式匹配 == • expression表达式分为⽂文件型、字符串型、整数型,逻辑 操作符 • 结合控制运算符 && 和 || bash-3.2$ test -f foo.txt bash-3.2$ [ -f foo.txt ]
  18. 18. 变量和数组 • foo=bar #=两边不能有空格,访问时$foo • foo=“bar 1” #值有空格等特殊字符时需要引 ⽤用引⽤用 • lst[0]=1 #访问时${lst[0]} • lst=(1 2 3 4) #访问时${lst[@]},数组⻓长度 ${#lst[@]
  19. 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. 20. ` • ls *.log #路径名扩展 • ls ~ #波浪线扩展 • $((1+1)) #算术扩展* • echo {1..10}; cp foo{,.bak} #花括号扩展 • echo {$i:-1} #参数扩展* • ls -l $(which cp) #命令扩展*
  21. 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. 22. 特殊参数 • $#: 位置参数的数量 • $*: 所有位置参数的内容($1 $2 ...) • $@: 所有位置参数的内容(“$1” “$2” ... ) • $?: 命令执⾏行后返回的状态 • $$: 当前进程的进程号 • $!: 后台运⾏行的最后⼀一个进程号 • $0: 当前执⾏行的进程名 • $1, $2, $3等: 位置参数 • $_: 之前执⾏行的命令的最后⼀一个参数
  23. 23. 环境变量 • export #设置新的环境变量 • env #显⽰示所有环境变量 • set #显⽰示所有本地定义的shell变量 • unset #清除环境变量 • $PATH, $PWD, $HOME, $SHELL
  24. 24. if, for, while #!/bin/bash* ** if*[*,d*'/home/work'*];*then' ****echo*“work*dir*exist” else* ****echo*"work*dir*not*exist"* ****mkdir*/home/work* fi' #!/bin/bash* #* * n=10* for*((*i=0;*i<$n;*i++*))*;*do* ********echo*$i* done! #!/bin/bash* * while**read**i**j**k*;***do* * ********echo**$i**$j**$k* * done*<*./txt! #!/bin/bash* #* * for*i*in*`seq*1w*10`*;*do* ********echo*$i* done!
  25. 25. function • return值会作为退出值,默认是return $? • 位置参数会被临时覆盖,$#,$@,$1 function foo { commands return } foo() { commands return }
  26. 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. 27. 主要差异 字段 说明 BREs EREs PRCs () 匹配表达式 不⽀支持(但可以 使⽤用(),如: (dog) () () ? 匹配前⾯面的⼦子表达式 0 次或 1 次 不⽀支持(同?) ? ? d 匹配从 0 到 ⼀一数字字符 不⽀支持 不⽀支持 d s 匹配任何空⽩白字符, 不⽀支持 不⽀支持 s
  28. 28. awk • 输⼊入流处理,经常⽤用于统计分析 • pattern模式,action操作 • BEGIN,END模式 • awk –F “t” “{print $1}” • awk –F “t” “{printf(“%dn”,$2)}END{}”
  29. 29. sed • 逐⾏行处理输⼊入,并将结果发送到屏幕 • 定址 • 可以是数字、正则表达式、或⼆二者的结合 • 命令 • d,删除 • p,打印 • s,替换 • q,退出
  30. 30. set 命令 • set -u # 确保变量都被初始化 • set -e # 确保捕获所有⾮非0状态 • set -n # 预读⽽而不执⾏行(交互式时不⽣生效) • set -x # 显⽰示详细执⾏行过程 • set -o pipefail # 结合-e,捕获管道间错误
  31. 31. notice • 命令执⾏行前按tab确认操作参数,尤其rm • 修改配置⽂文件时,记得先备份,再修改 • 赋值等号两边没有空格 • 条件测试[ ]内两边有空格 • 双引号、单引号、转义
  32. 32. 谢谢 Q & A
  • dragon515

    Mar. 11, 2015

Shell编程入门分享

Views

Total views

635

On Slideshare

0

From embeds

0

Number of embeds

3

Actions

Downloads

3

Shares

0

Comments

0

Likes

1

×