IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    shell处理技巧

    陈子 (rao.chenlin@gmail.com)发表于 2009-11-03 00:00:00
    love 0

    脚本经常用的上,但老是记不住的一些东西:

    一、逻辑运算

    eq 相等
    ne、neq 不相等
    gt 大于
    lt 小于
    gte、ge 大于等于
    lte、le 小于等于
    not 非
    mod 求模
    is [not] div by 是否能被某数整除
    is [not] even 是否为偶数
    is [not] odd 是否为奇数
    -a  存在则为真
    -b  存在且是一个块特殊文件则为真
    -c  存在且是一个字特殊文件则为真
    -d  存在且是一个目录则为真
    -e  存在则为真
    -f  存在且是一个普通文件则为真
    -g  存在且已经设置了SGID则为真
    -h  存在且是一个符号连接则为真
    -k  存在且已经设置了粘制位则为真
    -p  存在且是一个名字管道(F如果O)则为真
    -r  存在且是可读的则为真
    -s  存在且大小不为0则为真
    -t  打开且指向一个终端则为真
    -u  存在且设置了SUID则为真
    -w  存在且是可写的则为真
    -x  存在且是可执行的则为真
    -O  存在且属有效用户ID则为真
    -G  存在且属有效用户组则为真
    -L  存在且是一个符号连接则为真
    -N  存在 and has been mod如果ied since it was last
    read则为真
    -S  存在且是一个套接字则为真
    

    二、特殊变量

    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的进程ID号
    $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
    $- 显示shell使用的当前选项,与set命令功能相同
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
    $((...)) 对括号内的表达式求值
    

    三、打印格式

    free -m awk ‘/Mem/{printf “%.0fn”,$1*0.9}’

    自动取整数: %代表任意长度,0表示保留.后0位数字

    四、翻转文件

    sed ‘1!G;h;$!d’ file
    sed -n ‘1!G;h;$p’ file

    sed的man说法如下:
    h
    H        Copy/append
    pattern space to hold space.
    g
    G        Copy/append
    hold space to pattern space.
    这两个space,我的理解就是hold是厂房(原料和成品都放这,汗~),pattern是流水线。
    如果是正常的sed,应该是所有的原料一起上流水线处理,然后统一成品输出。所以顺序不变;但上面这个命令,每处理一行就清空一次流水线,最后成品就成倒序了。
    还有一个x,用来互换两个space的文本。

    五、正则表达式

    pattern{n}:只用来匹配前面pattern出现的次数.n为次数。如a{2}匹配aa.
    pattern{n,}:含义同上,但次数最少为n.如a{2,}匹配aa,aaa,aaaa,.....
    pattern{n,m}:含义同上,但次数在n和m之间。如a{2,4}匹配aa,aaa,aaaa三个
    [0123456789]或[0-9] :假定要匹配任意一个数字
    [a-z] :任意小写字母
    [A-Za-z] :任意大小写字母
    [S,s] :匹配大小写S
    [0-9]{3}.[0-9]{3}.[0-9]{3}.[0-9]{3} :匹配IP地址 [0-9]{3}三个0-9组成的字符串;. :匹配点(注意这里点是特殊的字符,所以要用""来屏蔽其含义)
    用于grep和awk的类名(其他能不能我还不知道)
    [[:upper:]]   表示[A-Z]
    [[:alnum:]]   表示[0-9a-zA-Z]
    [[:lower:]]   表示[a-z]
    [[:space:]]   表示空格或者tab键
    [[:digit:]]   表示[0-9]
    [[:alpha:]]   表示[a-zA-Z]
    


沪ICP备19023445号-2号
友情链接