Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48389
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-31 09:37
文章分类

全部博文(17)

文章存档

2016年(3)

2015年(14)

我的朋友

分类: LINUX

2015-11-18 14:02:50

1. PIPESTATUS
    

数据处理类shell脚本中可能会多次用到 “cat xxx|awk yyy”类似的管道命令,判断返回值时不能仅仅用$?来判断返回值,最好使用PIPESTATUS获取管道中所有命令的返回码

好处:第一条命令失败后就能提前发现问题,避免问题被遗漏或置后发现。

用法:PIPESTATUS 是一个数组,第一条命令的返回码存储在${PIPESTATUS[0]}

1、PIPESTATUS 是一个数组,第一条命令的返回码存储在${PIPESTATUS[0]},以此类推,上例中执行完管道中所有的命令后,PIPESTATUS数组第一个元素值为1,第二个元素值为0

2、如果前一条命令不是一个管道,而是一个单独的命令,命令的返回码存储为${PIPESTATUS[0]},此时${PIPESTATUS[0]}同$?值相同(事实上,PIPESTATUS最后一个元素的值总是与$?的值相同)

3、每执行一条命令,切记PIPESTATUS都会更新其值为上一条命令的返回码,

      cat /testfilename|cat
      if [ ${PIPESTATUS[0]} -ne 0 ]; then echo ${PIPESTATUS[@]}; fi

      上例中执行完管道后,${PIPESTATUS[0]}值为1,${PIPESTATUS[1]}值为0

      但是上面的脚本执行完成后,输出为0,这是因为if 分支的测试命令值为真,然后 PIPESTATUS[0]的值此时被置为0。应当在命令执行完成后立即在同一个测试命令中对所有值进行测试,例如 

      if [ ${PIPESTATUS[0]} -eq 1 -a ${PIPESTATUS[1]} -eq 0 ] ; then echo something; fi

或者先将$PIPESTATUS数组保存下来,以后再处理,例如

      ret=${PIPESTATUS[@]};
2. tar

tar xzvf abc.tar.gz -C tmp

上面的命令将abc.tar.gz这个压缩包解压到当前目录下的tmp目录下,而不是当前目录下,这就是-C选项的作用。

3.sort

sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式:
  sort [-bcfMnrtk][源文件][-o 输出文件] 
补充说明:sort可针对文本文件的内容,以行为单位来排序。

参  数:
  -b   忽略每行前面开始出的空格字符。
  -c   检查文件是否已经按照顺序排序。
  -f   排序时,忽略大小写字母。
  -M   将前面3个字母依照月份的缩写进行排序。
  -n   依照数值的大小排序。
  -o<输出文件>   将排序后的结果存入指定的文件。
  -r   以相反的顺序来排序。
  -t<分隔字符>   指定排序时所用的栏位分隔字符。
  -k  选择以哪个区间进行排序。

sort -n -k 2 -t ‘:’ facebook.txt


阅读(981) | 评论(0) | 转发(0) |
0

上一篇:Linux Mount Command

下一篇:shell重定向

给主人留下些什么吧!~~