URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10203
[ Назад ]

Исходное сообщение
"Проверить существование строки в кронтабе со сппецсимовлами *"

Отправлено universite , 18-Мрт-18 06:00 
Subj на Debian 8.

Пробую разные варианты, но или баш интерпретируют * как показать файлы, то "grep: заданы конфликтующие образцы"


if [ $(egrep -P "^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null" /var/spool/cron/crontabs/root) ]; then
        echo "good";
                else
        echo bad;
fi


Содержание

Сообщения в этом обсуждении
"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено михалыч , 18-Мрт-18 08:53 
perl ?

perl -lne 'print "ok" if m|\*\s+\*\s+\*\s+\*\s+\*\s+/bin/bash /root/script.sh > /dev/null|' /var/spool/cron/crontabs/root

можно конечно и без \s+ но кто знает tab там или пробел и сколько их


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 18-Мрт-18 20:29 
> perl ?
> perl -lne 'print "ok" if m|\*\s+\*\s+\*\s+\*\s+\*\s+/bin/bash /root/script.sh
> > /dev/null|' /var/spool/cron/crontabs/root
> можно конечно и без \s+ но кто знает tab там или пробел
> и сколько их

Перл работает.
А grep? awk?


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено Pahanivo , 19-Мрт-18 00:15 
^\s*\*\s+\*\s+\*\s+\*\s+\*\s+/bin/bash\s+/root/script.sh\s*$


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено Аноним , 18-Мрт-18 23:05 
Убери "-P" и должно работать.

"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 18-Мрт-18 23:10 
> Убери "-P" и должно работать.


# sh test8.sh
+ egrep ^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null /var/spool/cron/crontabs/root
+ [ ftp_access.file system_info test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh ftp_access.file script.sh system_info test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh ftp_access.file script.sh system_info test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh ftp_access.file script.sh system_info test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh ftp_access.file script.sh system_info test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh /bin/bash script.sh  > /dev/null ]
test8.sh: 5: [: ftp_access.file: unexpected operator
+ echo bad
bad



"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено Аноним , 18-Мрт-18 23:35 

#!/bin/bash
egrep "^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null" /var/spool/cron/crontabs/root
if (($?)); then
    echo "bad"
else
    echo "good"
fi

А Debian sh в вообще bash?


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 19-Мрт-18 05:58 
>
 
> #!/bin/bash
> egrep "^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null" /var/spool/cron/crontabs/root
> if (($?)); then
>     echo "bad"
> else
>     echo "good"
> fi
>

> А Debian sh в вообще bash?


-rwxr-xr-x 1 root root 1029624 ноя  5  2016 /bin/bash
lrwxrwxrwx 1 root root       4 ноя  8  2014 /bin/sh -> dash

Ошибки все равно одинаковые.


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено Pahanivo , 19-Мрт-18 09:58 
> if [ $(egrep -P "^\* \* \* \* \* /bin/bash /root/script.sh >

проверил на старой фре работает, на старом линухе НЕ работает, также
> egrep -P  "1" *

egrep: conflicting matchers specified
но если использовать просто grep
> grep -P "^.*01.*\*" *

crontab:01 * * * * root run-parts /etc/cron.hourly
то однако работает ...


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено Аноним , 19-Мрт-18 10:59 
>> if [ $(egrep -P "^\* \* \* \* \* /bin/bash /root/script.sh >
> проверил на старой фре работает, на старом линухе НЕ работает, также
>> egrep -P  "1" *
> egrep: conflicting matchers specified
> но если использовать просто grep
>> grep -P "^.*01.*\*" *
> crontab:01 * * * * root run-parts /etc/cron.hourly
> то однако работает ...

Потому, что egrep это grep -E, a -E и -P конфликтуют.

$ cat /bin/egrep
#!/bin/sh
exec grep -E "$@"


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено pavlinux , 19-Мрт-18 19:53 
>
> "grep: заданы конфликтующие образцы"
>
 
> if [ $(egrep -P "^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null" /var/spool/cron/crontabs/root) ];


grep  "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null"


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 06:02 
>>
>> "grep: заданы конфликтующие образцы"
>>
 
>> if [ $(egrep -P "^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null" /var/spool/cron/crontabs/root) ];

>
 
> grep  "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null"
>

Тоже самой, что и выше. * считается как все файлы внутри директории.


# sh test10.sh
+ grep ^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null /var/spool/cron/crontabs/root
+ [ ftp_access.file script.sh system_info test10.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh test9.sh ftp_access.file script.sh system_info test10.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh test9.sh ftp_access.file script.sh system_info test10.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh test9.sh ftp_access.file script.sh system_info test10.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh test9.sh ftp_access.file script.sh system_info test10.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh test9.sh /bin/bash /root/script.sh > /dev/null ]
test10.sh: 7: [: ftp_access.file: unexpected operator
+ echo bad
bad



"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено Andrey Mitrofanov , 20-Мрт-18 09:17 
>> grep  "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null"
> Тоже самой, что и выше. * считается как все файлы внутри директории.

Кто у Вас шелл ? Или куда и как эту команду вставляете и кто её исполняет, разные ли это "люди"?


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено pavlinux , 20-Мрт-18 14:23 
>>> grep  "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null"
>> Тоже самой, что и выше. * считается как все файлы внутри директории.
> Кто ... куда ... как ... и кто ...?

Опять путает консоли, на BSD небось :)



"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 17:52 
>>>> grep  "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null"
>>> Тоже самой, что и выше. * считается как все файлы внутри директории.
>> Кто ... куда ... как ... и кто ...?
> Опять путает консоли, на BSD небось :)

Если бы для BSD тестил - сразу бы написал.
Не надо гнать.


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 17:52 
>>> grep  "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null"
>> Тоже самой, что и выше. * считается как все файлы внутри директории.
> Кто у Вас шелл ? Или куда и как эту команду вставляете
> и кто её исполняет, разные ли это "люди"?

Скрипт запускал через sh, bash и dash.
Одинаковый результат.


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено pavlinux , 20-Мрт-18 13:59 
> Тоже самой, что и выше. * считается как все файлы внутри директории.
> # sh test10.sh
> + grep ^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null /var/spool/cron/crontabs/root

[ ] - это IEEE Std 1003.1, 2004 (POSIX1), 9.3.5 RE Bracket Expression
Я на 146% поверю POSIX, чем в нежопорукость. Оно даже на Венде должно сработать.


$ cat test10.sh

grep  "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null" /tmp/test;


$ cat /tmp/test

* * * * * /bin/bash /root/script.sh > /dev/null

$ /bin/bash -x  test10.sh
+ grep '^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null' /tmp/test
* * * * * /bin/bash /root/script.sh > /dev/null

$ /bin/dash -x test10.sh
+ grep ^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null /tmp/test
* * * * * /bin/bash /root/script.sh > /dev/null

$ cat /etc/debian_version
8.10


P.S.
universite: Прим. с 2003 года Linux не нужно настраивать, это не BSD, тут всё работает. :D


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 17:51 

> $ cat /etc/debian_version
> 8.10
>

> P.S.
> universite: Прим. с 2003 года Linux не нужно настраивать, это не BSD,
> тут всё работает. :D


# cat /etc/debian_version
8.9

У вас там нет никаких алиасов на grep?
Покажите alias


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено pavlinux , 20-Мрт-18 21:10 
> У вас там нет никаких алиасов на grep?

alias grep='grep --color=auto'


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено yur , 19-Мрт-18 23:55 
> А что ему писать?
> Что у него нет азов программирования и администрирования? Нет профильного образования?  
> Или что виновато правительство, что набирает идиотов на  рабочие специальности?


echo '* * * * * /bin/bash /root/script.sh > /dev/null' | grep -q '^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ; echo $?
0

echo '* * * * * /bin/bash /root/script.sh < /dev/null' | grep -q '^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ; echo $?
1



"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 05:58 
>
 
> echo '* * * * * /bin/bash /root/script.sh > /dev/null' | grep
> -q '^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ;
> echo $?
> 0
> echo '* * * * * /bin/bash /root/script.sh < /dev/null' | grep
> -q '^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ;
> echo $?
> 1
>

А вы считайте с файла, а не с pipe.


# bash test9.sh
++ grep -q '^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' /var/spool/cron/crontabs/root
+ '[' ']'
+ echo bad
bad


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено ыы , 20-Мрт-18 10:54 
>[оверквотинг удален]
>>
> А вы считайте с файла, а не с pipe.
>
 
> # bash test9.sh
> ++ grep -q '^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null'
> /var/spool/cron/crontabs/root
> + '[' ']'
> + echo bad
> bad
>

Считал все хорошо:

./test.sh
a 0
b 1


$cat test.sh

#!/bin/bash
if grep -q '\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ./root;  then
    echo "a $?"
else
    echo "b $?"
fi

#!/bin/bash
if grep -q '\* \* \* \* \* /bin/bash /root/script.sh < /dev/null' ./root;  then
    echo "a $?"
else
    echo "b $?"
fi

$cat root
* * * * * /bin/bash /root/script.sh > /dev/null


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено ыы , 20-Мрт-18 11:16 
>[оверквотинг удален]
> fi
> #!/bin/bash
> if grep -q '\* \* \* \* \* /bin/bash /root/script.sh < /dev/null'
> ./root;  then
>     echo "a $?"
> else
>     echo "b $?"
> fi
> $cat root
> * * * * * /bin/bash /root/script.sh > /dev/null

на убунту (тот же дебиан), на центосе - выполняется корректно


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 18:01 


> $cat test.sh
> #!/bin/bash
> if grep -q '\* \* \* \* \* /bin/bash /root/script.sh > /dev/null'
> ./root;  then
>     echo "a $?"
> else
>     echo "b $?"
> fi

Нашел отличие.

так не работает:


#!/bin/bash
if [ $(grep -q '\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ./root) ];  then
    echo "a $?"
else
    echo "b $?"
fi

А так работает:


#!/bin/bash
if $(grep -q '\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ./root);  then
    echo "a $?"
else
    echo "b $?"
fi

или

#!/bin/bash
if grep -q '\* \* \* \* \* /bin/bash /root/script.sh > /dev/null' ./root;  then
    echo "a $?"
else
    echo "b $?"
fi

Так почему тест в квадратных скобках не проходит?


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено ыы , 20-Мрт-18 21:04 

>[оверквотинг удален]
>
 
> #!/bin/bash
> if grep -q '\* \* \* \* \* /bin/bash /root/script.sh > /dev/null'
> ./root;  then
>     echo "a $?"
> else
>     echo "b $?"
> fi
>

> Так почему тест в квадратных скобках не проходит?

http://qaru.site/questions/83027/when-are-square-brackets-re...


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 23:19 
>[оверквотинг удален]
>> #!/bin/bash
>> if grep -q '\* \* \* \* \* /bin/bash /root/script.sh > /dev/null'
>> ./root;  then
>>     echo "a $?"
>> else
>>     echo "b $?"
>> fi
>>
>> Так почему тест в квадратных скобках не проходит?
> http://qaru.site/questions/83027/when-are-square-brackets-re...

Ок. Понял.


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено pavlinux , 20-Мрт-18 21:25 
> Так почему тест в квадратных скобках не проходит?

Что ты хотел словить после grep -q ?
При совпадении пустая строка (\x00) возвращается.


if [ -z "$(grep -q "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null" /tmp/test)" ];
        then
                echo OK;
fi

if [ ! -n "$(grep -q "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null" /tmp/test)" ];
        then
                echo OK;
fi

Делай раздельно и не захламляй код.

grep -q "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null" /tmp/test;
if [ $? -ne 0 ];
        then
            echo OK;
fi


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 20-Мрт-18 23:25 

>[оверквотинг удален]
>            
>     echo OK;
> fi
> Делай раздельно и не захламляй код.
 
> grep -q "^[*] [*] [*] [*] [*] /bin/bash /root/script.sh [>] /dev/null" /tmp/test;
> if [ $? -ne 0 ];
>         then
>            
> echo OK;
> fi

Будет всегда "Ок" показывать.
Добавь в регулярку пару лишних символов и увидишь.


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено pavlinux , 21-Мрт-18 01:58 
> Будет всегда "Ок" показывать.
> Добавь в регулярку пару лишних символов и увидишь.

А, ну да, моя косяк.


if  [ $? -eq 0 ]; ...


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 23-Мрт-18 14:55 
>> Будет всегда "Ок" показывать.
>> Добавь в регулярку пару лишних символов и увидишь.
> А, ну да, моя косяк.
>
 
> if  [ $? -eq 0 ]; ...
>

Еще одна "мелочь":

Нужно отрицательное значение.
если _не_ найдена регулярка, то выполнить что-то там.


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено ыы , 24-Мрт-18 12:29 
>>> Будет всегда "Ок" показывать.
>>> Добавь в регулярку пару лишних символов и увидишь.
>> А, ну да, моя косяк.
>>
 
>> if  [ $? -eq 0 ]; ...
>>

> Еще одна "мелочь":
> Нужно отрицательное значение.
> если _не_ найдена регулярка, то выполнить что-то там.

это уже есть выше и вами было отвергнуто как ошибочное:

if [ $? -ne 0 ];


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено universite , 25-Мрт-18 11:14 
>[оверквотинг удален]
>>>> Добавь в регулярку пару лишних символов и увидишь.
>>> А, ну да, моя косяк.
>>>
 
>>> if  [ $? -eq 0 ]; ...
>>>

>> Еще одна "мелочь":
>> Нужно отрицательное значение.
>> если _не_ найдена регулярка, то выполнить что-то там.
> это уже есть выше и вами было отвергнуто как ошибочное:
> if [ $? -ne 0 ];

Да, мой косяк, где-то тесты не то тестировали :)


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено pavlinux , 24-Мрт-18 18:23 
> если не, то что-то там.

/dev/extrasensor Not Found

http://tldp.org/LDP/abs/html/refcards.html#AEN22473
http://tldp.org/LDP/abs/html/testconstructs.html


"Проверить существование строки в кронтабе со сппецсимовлами *"
Отправлено Perlovka , 04-Апр-18 00:09 
А почему бы просто не проверять на незакомментированную строку с искомым скриптом?

if grep -qs '^[ ]*[^ #].*/root/script.sh' /var/spool/cron/crontabs/root; then
    echo OK
else
    echo BAD
fi