bash脚本给出(一元运算符预期)

时间:2018-02-21 08:46:26

标签: bash

#!/bin/bash
ssh root@192.xx.xx.xx netstat | grep 6200 > log

cnt=`grep -c 'EST' log`

if [ $cnt -eq 6 ]; then        
   echo working
fi

的结果
[root@xxx]# grep -c 'EST' log
6
[root@xxx]# 

2 个答案:

答案 0 :(得分:0)

我已经测试了你的脚本,如果你加倍qoote cnt它就有效,它的工作原理如下:

#!/bin/bash

ssh root@X.X.X.X netstat | grep 6200 > log

cnt=$(sudo grep -c 'EST' log)

if [ "$cnt" -eq 6 ]; 
    then
         echo working
fi

我建议您在此link

中检查您的shell脚本

答案 1 :(得分:0)

cnt 变量为空时发生此错误。 if表达式的计算结果为 [-eq 6]

您可以在命令行上测试:

user@host:~$ [ -eq 6 ]    
-bash: [: -eq: unary operator expected

此外,通过将 set -x 添加到脚本的顶部,您可以调试它的解释方式。

#!/bin/bash

set -x

if [ $cnt -eq 6 ]; then        
   echo working
fi
./test.sh
+ '[' -eq 6 ']'
./test.sh: line 5: [: -eq: unary operator expected

用双引号“$ cnt”包装$ cnt按照建议修复它,因为当空“$ cnt”计算为空字符串“”时。