Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Using Shell & Mastering Shell

566 visualizaciones

Publicado el

Shell编程入门分享

Publicado en: Software
  • Sé el primero en comentar

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

×