liwya 发表于 2018-8-24 07:29:16

shell复习摘要(三)

SHELL复习摘要(三)
扩展性样式比对
  shell于egrep/awk正则表达式运算符比较
  ksh/bash            egrep/awk          含义
  *(exp)         exp*            存在0个或多个exp
  +(exp)          exp+             存在1个或多个exp
  ?(exp)         exp?             存在0个或1个exp
  @(exp1|exp2|…)      exp1|exp2|…            exp1或exp2
  !(exp)            (none)          所有不相符于exp的
  例如:
  @(dave|fred|bob)比对相符的有dave、fred、bob
  *(dave|fred|bob)意即存在0或多个dave等
  +(dave|fred|bob)相符于上述所有字符串,null除外
  ?(dave|fred|bob)相符于null字符串,dave等
  !(dave|fred|bob)相符于dave、fred、bob之外的任何字符串
  egrep和awk有两个正则表达式运算符在shell里没有等同物:
  行开否与行结束运算符^和$。
  单词的起始与单词的结束运算符\
括弧展开
  括弧展开式让输入更轻松的方法
  echo cpp-{args,l{e,o}x,parse}.c
  cpp-args.c cpp-lex.c cpp-lox.c cpp-parse.c
进程替换
  进程替换可以让用户开启多个进程数据流,再将它们喂给单一程序处理。
  例如:
  awk ‘…’ (grep “USER”|wc -l)>/dev/null
  进程替换只有在支持/dev/fd/n特殊文件的UNIX系统下可使用,为命名访问到已开启之文件描述代码。
各类扩展
  附加的波浪号展开:POSIX将~定义为$HOME与~user—user家目录。bash和ksh允许使用~+作为$PWD(当前工作目录)的缩写,使用~-作为$OLDPWD(前一个工作目录)的缩写。
  算术命令:POSIX定义$((…))标记作为算术展开,但不提供任何其他算术操作限制。不过两种shell都支持两种直接处理算术的标记,而非展开:
  let “x = 5+y”    let命令,需以引号框起
  ((x = 5+y))    未前置$,自动的用双括号引起来
  x=$((5+y))    类似,但=前后都不可置放任何空格
  有个不同之处,便是let与((…))都有离开状态:0为真(true)值,而1为伪(false)值。
  case语句的可选用圆括号比对:命令替换的$(…)语法已由POSIX标准化。case开启圆括号必须置于$(…)内。
  some command $(…
  case $var in
  ( foo|bar ) some other command ;;
  ( stuff|junk )    something else agin ;;
  esac
  …)
  使用
页: [1]
查看完整版本: shell复习摘要(三)