/dev/null" />

awk和grep退出状态问题

您所在的位置:网站首页 怎么退出grep awk和grep退出状态问题

awk和grep退出状态问题

2023-08-16 03:07| 来源: 网络整理| 查看: 265

    这段时间在工作上需要用到shell脚本,简单看了下,在if中使用了awk和grep,如下:

 

#!/bin/sh # TestIf.sh # if循环 # grep返回状态测试 if echo "hello world" | grep "hi" > /dev/null 2>&1 then echo "hi in string!" else echo "hi out string!" fi # awk返回状态测试 if echo "hello world" | awk '$1 == "hi"' > /dev/null 2>&1 then echo "hi in string!" else echo "hi out string!" fi

 

运行如下:

        hi out string!         hi in string!

 

猜想应该是返回状态导致不能达到预期的结果,于是做了如下测试:

 

#!/bin/sh # ReturnValue.sh # 返回状态测试 # 测试awk返回状态 echo "hello world" | awk '$1 == "hello" {print $1}' echo "$?" echo "hello world" | awk '$1 == "oo" {print $1}' echo "$?" # 测试grep返回状态 echo "hello world" | grep "hello" echo "$?" echo "hello world" | grep "oo" echo "$?" # 自定义返回状态 echo "hello world" | awk '$1 == "hello" {print $1} {exit 45}' echo "$?"

 

运行如下:

hello 0 0 hello world 0 1 hello 45

证明果然是退出状态导致。

 

    在Linux状态中,每当命令执行完成后,系统都会返回一个退出状态。该退出状态用一个整数值表示,用于判断命令运行的正确与否。若退出状态为0,表示命令运行成功;而退出状态值不为0时,则表示命令运行失败。最后一次执行命令的退出状态值被保存在内置变量“$?”中,所以,可以通过echo语句测试命令是否运行成功。

man grep时发现这样一段: Normally, exit status is 0 if selected lines are found and 1 otherwise.原来在使用grep时,找到匹配的任意一行,退出状态为0,否则为1.然而awk则不是如此。经过查阅资料,作如下小结:

简单地说:grep是一个小工具,在命令行的返回值表示查找是否成功;awk/perl甚至sed都应该称作脚本语言,返回值表示脚本执行的结果。像第二段代码中最后一个例子一样,可以随便定义awk的返回值,你可以返回任意整数值,但最好还是要遵循unix环境下的习惯,0表示正常,非0表示出错。

参考 http://bbs.chinaunix.net/thread-1430016-3-1.html

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3