$ cat compare.sh
#!/bin/bash
status=$(/tmp/vpn/vpn1.exp | grep '10.31.90.101'|awk '{print $NF}'|uniq)
echo "$status"
if [[ "$status" == "A" ]];then
echo 'A'
else
echo 'not A'
fi
$ /tmp/vpn/vpn1.exp | grep '10.31.90.101'|awk '{print $NF}'|uniq
A
$ ./compare.sh
A
not A
为什么 /tmp/vpn/vpn1.exp | grep '10.31.90.101'|awk '{print $NF}'|uniq
输出是个 A , 但在 if [[ "$status" == "A" ]]比较确失败了?代码直接执行了 else 部分
bash的语法和书写格式都要分外注意, 特别是空格,分隔号等,该加的要加,不该加的就不能加
从这点来说bash的语法设计是糟糕的。
回到你的问题本身来说, 可能是status这个变量,其值是A[space], 只是说因为print出来那个空格看不到显现不出来而已。
你可以用echo "||$status||"来替换echo "$status", 这样就能看到space了。
如果是这样的情况, 那if判断出来的的确是false, 应该显示为not A
sh -x your_script.sh 试一下