grep在if语句中的返回值

grep在if语句中的返回值

if LANG=C grep -EL “^ONBOOT=[‘\”]?[nN][oO][‘\”]?” /etc/sysconfig/network-scripts/ifcfg-eth0 > /dev/null ; then
echo “ok”
fi

上面代码改编自CentOs的/etc/rc.d/init.d/network脚本中的一部分。起初我一直在考虑grep输出既是返回值,返回值既是grep执行成功于否的关键,这点误导了我,因为grep确实会返回字符串,但是这个返回值并不一定代表grep执行成功了。

如上grep -EL表示,没成功匹配模式字符串就输出文件名。我理解成了A!=B 结果是TRUE。但其实它还是在“匹配”字符串,也就是说还是在执行grep -E,只是匹配不成功输出文件名。也就是说匹配不成功,输出文件命,grep函数返回1(函数执行失败)

其实grep -EL意义是:函数执行匹配失败就输出文件名。

再返回看上面的if语句就知道,在grep匹配失败后不执行if语句块。和grep输出的内容完全没有关系,前面的LANG=C是设置以ANSI C方式匹配字符串,而后面的>/dev/null完全没有实际的作用,只是为了屏幕输出更干净,没有杂乱的信息。

Comments are closed.