bash脚本if语句

时间:2016-06-29 15:47:03

标签: bash shell

我制作了一个脚本来检查tnsping但if语句无法正常工作。以下是脚本:

ping=$(tnsping oracle1 |grep OK| awk -F" " '{print $1 }')

if [ -n $ping ]
then
   echo "OK"
else
   echo "NOT OK"
fi

如果对于不存在的oracle服务器执行更改oracle,我也会收到“OK”。

-n = STRING的长度大于零

2 个答案:

答案 0 :(得分:4)

$ping周围包裹双引号:

if [ -n "$ping" ]
then
   echo "OK"
else
   echo "NOT OK"
fi

或者当[为空时,它将进行单词拆分和通配并在'-n'']'$ping的以下参数中解析。这与:

相同
 if [ '-n' '-n' ']'

请参阅man test

  

-n STRING
  STRING的长度非零   的 STRING
  相当于-n STRING

   -z STRING
  STRING的长度为零

您可以省略对grep的调用并直接使用awk。由于默认的字段分隔符(-F)是可以省略的空格:

ping=$(tnsping oracle1 | awk '/OK/{print $1 }')

答案 1 :(得分:2)

$ping 变量awk都不是必需的,因为grep可以将退出代码返回给{{1} }:

if