我正在尝试编写一个简单的小脚本来查询3g连接,如果连接断开,则启动重新连接。
我的问题是检查命令的输出 - 两个看似相等的字符串不被评估为相等。我确定这里有一个noob错误!
#!/bin/bash
echo "Checking connection"
a="Not connected."
b=$(./sakis3g status --console)
if [[ "$a"!="$b" ]]; then
echo "Strings not equal:"
echo "$a"
echo "$b"
else
echo "Strings equal!!"
fi
运行时的输出:
user@mypc:~$ ./test_3g.sh
Checking connection
Strings not equal:
Not connected.
Not connected.
运行./test_3g.sh | cat -A
时:
user@mypc:~$ ./test_3g.sh | cat -A
Checking connection$
Strings not equal:$
Not connected.$
Not connected.$
答案 0 :(得分:26)
你必须在运营商周围加上空格:
if [[ "$a" != "$b" ]]; then ...
如果没有空格,您最终会得到一个字符串,相当于"$a!=$b"
。如果该字符串非空,则只测试一个字符串返回true ...
答案 1 :(得分:5)
使用case/esac
。如果你不必弄乱if/else
的细微差别
case "$a" in
"$b" ) echo "ok";;
*) echo "not ok";;
esac
答案 2 :(得分:0)
可能sakis3g程序打印消息到stderr而不是stdout。在这种情况下,您将消息与空字符串进行比较。尝试将stderr重定向到stdout:
b=$(./sakis3g status --console 2>&1)