Bash для PHP регулярное выражение - PullRequest
0 голосов
/ 19 июня 2019

У меня есть bash-скрипт, который привязывает файл к строке, содержащей «CONNECT» или «DISCONNECT».Как только такая строка найдена, эта строка передается в php-скрипт.

Вот скрипт bash:

tail -f -n 1 /var/log/connections | grep -P -0 --line-buffered "\bCONNECTED\b|\bDISCONNECTED\b" | php -f $SCRIPT_DIR/connections.php

А вот скрипт php:

#!/usr/bin/php
<?php

while ( false !== ( $connection_status = fgets ( STDIN ) ) )
{
    $get_status = preg_match ( "/\bCONNECTED\b|\bDISCONNECTED\b/", @$connection_status, $status_match ) ;

    foreach ( $status_match as $status )
    {
        switch ( $status )
        {
            case "CONNECTED": //If the string that got passed to this script (from the BASH script) contains CONNECTED
            {
                print ( "we are connected\r\n" ) ;
            }
            case "DISCONNECTED": //If the string that got passed to this script (from the BASH script) contains DISCONNECTED
            {
                print ( "we are disconnected\r\n" ) ;
            }
        }
    }
}
?>

DISCONNECT работает как положено, но с CONNECT он возвращает "we are connected" и "we are disconnected"

1 Ответ

2 голосов
/ 19 июня 2019

Каждому case требуется break для остановки его работы, а не {}.

case "CONNECTED": //If the string that got passed to this script (from the BASH script) contains CONNECTED
     print ( "we are connected\r\n" ) ;
break;
case "DISCONNECTED": //If the string that got passed to this script (from the BASH script) contains DISCONNECTED
     print ( "we are disconnected\r\n" ) ;
break;

Важно понимать, как выполняется оператор switch, чтобы избежатьошибки.Оператор switch выполняет построчно (фактически оператор за оператором).В начале, код не выполняется.Только когда найден оператор case, выражение которого оценивается в значение, соответствующее значению выражения switch, PHP начинает выполнять операторы. PHP продолжает выполнять операторы до конца блока переключателя или до того момента, когда впервые видит оператор останова .Если вы не напишете оператор break в конце списка операторов case, PHP продолжит выполнение операторов следующего дела.

https://www.php.net/manual/en/control-structures.switch.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...