2016-03-04 348 views
1

我一直在努力想弄清楚如何将存储在变量中的命令的输出与Shell脚本中的另一个变量(也是字符串)的内容进行比较。 我知道它看起来像一个基本的RTFM案件,但我已经做了,我真的没有解决这个问题。如何将命令输出与Shell脚本中的字符串进行比较

所以,我有代码如下,涉及到Android(我使用的ADB工具),并与意见,以帮助理解:

# Using the ` char to execute the command and return the result as a string 
# To store it in the variable 
RES=`adb shell dumpsys power | grep "Display Power"` 

# Store the string in the variable 
EXPECTED='Display Power: state=OFF' 

#Simple checks, both returning "Display Power: state=OFF" (without quotes) in the console 
echo "$RES" 
echo "$EXPECTED" 


# Compare if the values of the variables, both strings, are equal 
# If so, perform action 
if [ "$EXPECTED" = "$RES" ] 
    then 
     echo "inside" 
     adb shell input keyevent 26 
    fi 

的情况是,在弦如果比较从未像平等一样。

我认为这个错误是第一次赋值给变量RES,因为我可能没有正确理解'字符的意思,它返回的不是它看起来是什么。

我敢肯定,你们可以帮助我这里的基本情况。

非常感谢您的帮助

+0

检查保存的stdout的确切内容。例如,有没有(还)在您的预期字符串中的尾随换行符? – mpez0

+0

你能告诉我们你的“简单检查”中两个'echo'命令的结果吗?更好...'echo'> $ {RES} <“'和'echo”> $ {EXPECTED} <“' – mauro

回答

1

你的字符串comparsion似乎是确定,它应该工作。可能问题在于字符串实际上是不同的。您可以检查(在空白或某种类似额外的标签或任何控制字符IE)通过使用类似的详细区别:

echo -n "$RES" | hd 
echo -n "$EXPECTED" | hd 

这会给你$预期以下:

00000000 44 69 73 70 6c 61 79 20 50 6f 77 65 72 3a 20 73 |Display Power: s| 
00000010 74 61 74 65 3d 4f 46 46       |tate=OFF| 

用$ RES进行十六进制转储进行彻底比较。

+1

这样做我得到了以下结果: 对于用'grep'提取的值: '0000000 44 69 73 70 6C 61 79 20 50 6F 77 65 72 20 3A 73' '0000010 74 61 74 65 3D 46 4F 46 0D 0a' '000001a' 对于字符串手动引入: ' 0000000 44 69 73 70 6c 61 79 20 50 6f 77 65 72 3a 20 73' '0000010 74 61 74 65 3d 4f 46 46 0a' '0000019' 我们可以看到,我们有一个额外的回车,也是最后一个字符在两个输出中都不同。 所以,字符串比较工作,但字符串中的实际字符是不同的。我会进一步调查。 谢谢! – droca

相关问题