2016-03-04 2 views
1

Я пытался изо всех сил пытаться выяснить, как сравнивать вывод команды, хранящейся в переменной, с содержимым другой переменной, также строки, в Shell Script , Я знаю, что это похоже на основной случай RTFM, но я уже сделал это, и я действительно не могу решить эту проблему.Как сравнить вывод команды со строкой в ​​Shell Script

Таким образом, код, который у меня есть следующие, связанные с Android (я использую инструмент АБР) и с комментариями, чтобы помочь понять:

# 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 

Дело в том, что струны в Сравнение IF никогда не кажется равным.

Я думаю, что ошибка заключается в первом присваивании значения переменной RES, потому что, может быть, я не понял правильно, что означает символ и что он возвращает, не то, что кажется.

Я уверен, что вы, ребята, можете мне помочь здесь с этим основным случаем.

Большое спасибо за вашу помощь

+0

Проверьте точное содержимое сохраненного файла. Есть, например, конечная новая строка, которая еще не указана в вашей строке EXPECTED? – mpez0

+0

Можете ли вы показать нам результаты двух команд 'echo' в вашей« простой проверке »? Еще лучше ... 'echo '> $ {RES} <" 'и' echo>> $ {EXPECTED} <"' – mauro

ответ

1

Ваша строка сравнительную кажется, будет хорошо, он должен работать. Вероятно, проблема в том, что строки на самом деле разные. Вы можете проверить подробные различия (т.е. в пробельном или в каком-то управляющие символах, таких как дополнительные закладки или любой другой), используя что-то вроде:

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 61 79 6c 20 50 6f 77 65 72 20 3a 73' ' 0000010 74 61 74 65 46 3d 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