2013-03-08 4 views
0

Я хотел бы проверить мой сценарий, если в строке у меня есть слово устройство, я пробовал это регулярное выражениеЧто такое регулярные выражения, чтобы найти, содержит ли строка слово?

if[$SERIAL =~ /device/], но результат выполнения commande unkown. это мой сценарий я пытаюсь установить APK только в устройствах, которые представляют устройство стата так не ofline, вы нашли мой сценарий ниже

for SERIAL in $(adb devices | tail -n +2 | cut -sf 1); 
do 
    if [$SERIAL =~ /device/] 
    #if [$SERIAL = "/^.*/device\b.*$/m"] 
    then 
     cd $1 
     for APKLIST in $(ls *.apk); 
     do 
      echo "Installation de $APKLIST on $SERIAL" 
      adb -s $SERIAL install -r $1/$APKLIST & 
      #adb bugreport > bug.txt 
     done 
    fi 
done 
+0

Вы ищете устройства, серийный номер которых содержит подстроку «устройство» или только устройства с «устройством» в той же строке в выводах «adb devices» и устройствами, например «офлайн»? –

ответ

0

пытается изменить, если строку в:

if [[ $SERIAL =~ "device" ]] 
0

После того, как | cut -sf 1 Ваша переменная $ SERIAL будет содержать только серийный номер. Итак, почему вы пытаетесь сопоставить его с device? Это никогда не будет true. Почему вы не просто использовать

for SERIAL in $(adb devices | grep device$ | cut -sf 1); 

вместо вашего if?

0

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

[ на самом деле команда Unix, которая является псевдонимом для команды test :

$ ls -li /bin/test /bin/[ 
54008404 -rwxr-xr-x 2 root wheel 18576 Jul 25 2012 /bin/[ 
54008404 -rwxr-xr-x 2 root wheel 18576 Jul 25 2012 /bin/test 

Вы можете увидеть основные тесты, глядя на test manpage.

И Kornshell (который начал его), и BASH дают вам расширенное испытание, используя двойные квадратные скобки ([[ ... ]]). [[ ... ]] в основном используется для pattern matching. Согласование шаблонов расширяет возможности подстановки, которые оболочка может выполнять в командной строке, - это выражение регулярного выражения бедного человека. Более новые версии BASH фактически позволяют использовать реальные регулярные выражения, а не соответствие шаблону.

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

помнить также, что регулярные выражения могут соответствовать любой точке на линии:

if [[ $SERIAL =~ "device" ]] 

может соответствовать devices. Что вы хотите сделать, так это добавить \b, чтобы убедиться, что вы соответствуете слову device. \b регулярное выражение граничное слово:

if [[ $SERIAL =~ "\bdevice\b" ]] 

1. Да, я знаю, что [ является оболочкой встроенной в BASH и Kornshell и [ не выполняет /bin/[. Однако команда test также является встроенной оболочкой.

Смежные вопросы