分类: LINUX
2015-11-18 14:02:50
数据处理类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 选择以哪个区间进行排序。