The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"какой командой SHELL можно вернуть 1 (true) оператору"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 07-Дек-05, 15:59 
IF [ ?regex_cmd? "my string" ] THEN... FI, если в "my string" найдено регулярное выражение?

Ну, скажем, всем файлам  *cgi$ надо chmod o+x

Внимание! маны читаю. соловьёва сижу читаю.
в исходниках рою, пока не нарыл.

подскажите, кто знает готовый рецепт.
Спасибо.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от allez (ok) on 07-Дек-05, 17:12 
>IF [ ?regex_cmd? "my string" ] THEN... FI, если в "my string"
>найдено регулярное выражение?
>
> Ну, скажем, всем файлам  *cgi$ надо chmod o+x
>
> Внимание! маны читаю. соловьёва сижу читаю.
> в исходниках рою, пока не нарыл.
>
> подскажите, кто знает готовый рецепт.
> Спасибо.


Да вы не умничайте, вы пальцем покажите... :-)
Иными словами, опишите более подробно и менее сумбурно стоящую перед вами
задачу. А то у вас не сообщение, а какой-то винегрет с кашей. Начнем с
того, что "true" - это не 1, а 0. Что у вас за ?regex_cmd? такая? Если
"всем файлам *cgi$ надо chmod o+x", то это так делается:

$ chmod o+x *cgi$

или так:

$ find /where/to/search -type f -name "*cgi$" -exec chmod o+x {} \;

В общем, чего хотите-то? ;-)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от Forth (??) on 07-Дек-05, 17:36 
>того, что "true" - это не 1, а 0. Что у вас
Ммм, а вроде всегда true было не 0...


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от chip email(ok) on 07-Дек-05, 19:07 
>>того, что "true" - это не 1, а 0. Что у вас
>Ммм, а вроде всегда true было не 0...

А что проверить так трудно?!

[ 0 ] && echo "TRUE"

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

8. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от Forth (??) on 08-Дек-05, 09:10 
>[ 0 ] && echo "TRUE"
И чего?:)
Это что?:)
Эта Ваша конструкция означает "если код выхода последней команды 0, то написать "TRUE" " :) , то есть если 0=0 (то есть равенство 0=0 истинно(TRUE)):)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

9. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от chip email(ok) on 08-Дек-05, 10:37 
>>[ 0 ] && echo "TRUE"
>И чего?:)
>Это что?:)

А теперь плавненько снимаемся с ручника и начинаем думать и вникать.

while [ ИСТИНА ] что-то делать.
while [ 0 ]; do yes; done

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

12. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 08-Дек-05, 13:37 
>>>[ 0 ] && echo "TRUE"
>>И чего?:)
>>Это что?:)


Друзья!
МНЕ НАДО только узнать, есть ли в строке регулярное выражение?
Что-то типа grep, только чтобы возвращал ЛОГИЧЕСКОЕ значение
для IF [ .....


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

13. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от allez (ok) on 08-Дек-05, 14:01 
>>>>[ 0 ] && echo "TRUE"
>>>И чего?:)
>>>Это что?:)
>
>
> Друзья!
> МНЕ НАДО только узнать, есть ли в строке регулярное выражение?
> Что-то типа grep, только чтобы возвращал ЛОГИЧЕСКОЕ значение
> для IF [ .....
>
>


Это самое логическое значение выдает практически любая программа в
юниксах. Код завершения (exit code) называется. В вашем случае можно
сделать так:

[ `echo $MYSTRING | grep $REGEXP` ] && echo "Regexp found" || echo "Regexp not found"

или более развернуто:

if [ `echo $MYSTRING | grep $REGEXP` ]
then
  echo "Regexp found"
else
  echo "Regexp not found"
fi

Если указанная в квадратных скобках команда выполняется успешно, то она
возвращает 0 (истина), в противном случае код завершения не равен нулю.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

14. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 08-Дек-05, 18:42 

>if [ `echo $MYSTRING | grep $REGEXP` ]
>then
>  echo "Regexp found"
>else
>  echo "Regexp not found"
>fi

СпасибиЩе ОгромадноЕ. Работает.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

15. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 08-Дек-05, 19:00 
А как насчёт экранирования пробелов?
for FILE in `ls -a | sed -e 's/\ /\\ /g'`
do
   echo $FILE
done

Кручу по всякому, чсё равно имя с пробелами в FILE засунуть не получается.
Есть рецепт?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

16. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от allez (ok) on 09-Дек-05, 07:48 
>А как насчёт экранирования пробелов?
>for FILE in `ls -a | sed -e 's/\ /\\ /g'`
>do
>   echo $FILE
>done
>
>Кручу по всякому, чсё равно имя с пробелами в FILE засунуть не
>получается.
>Есть рецепт?


Есть. Несколько измените цикл и используйте кавычки:

ls -a | while read FILE
do
  echo "$FILE"
done

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

18. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 09-Дек-05, 14:38 
>>А как насчёт экранирования пробелов?

>ls -a | while read FILE
>do
>  echo "$FILE"
>done

Спасибо, УЧИТЕЛЬ!!!!
Мясо ваше, кости наши :-)))

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

17. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от allez (ok) on 09-Дек-05, 09:01 
Вдогонку: вам бы не помешало что-нибудь по программированию в shell
почитать. Например, это: http://gazette.lrn.ru/rus/articles/abs-guide/

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

19. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 09-Дек-05, 14:40 
>почитать. Например, это: http://gazette.lrn.ru/rus/articles/abs-guide/

Обязательно, спасибо за линк

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

20. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 09-Дек-05, 14:49 
>Посвящается Аните -- источнику очарования

Это автор свой комп называет?
Ах, как романтично!

Ж-)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 07-Дек-05, 17:58 
>Да вы не умничайте, вы пальцем покажите... :-)
>В общем, чего хотите-то? ;-)

нужда древняя, три раза писал, куда засунул - хрен знает. надо установить доступ в каталоге www после копирования-разархивирования. По-умолчанию у меня umask 27, поэтому апачу файлики недоступны. И ftpd права сам не скопирует, etc.

Накатал такой скрипт

set PWD = `pwd`  ;

for FILES in `ls -a`
do
        if [ $FILES = "." -o $FILES = ".." ]
        then
                continue
        fi

        if [ $FILES = "CVS" ]
        then
                chmod 700 $FILES
                continue
        fi

        echo -n "$PWD/$FILES"

        if [ -d $FILES ]
        then
                chmod 755 $FILES
                echo " chmod 755"
                cd $FILES
                setmod
                cd ..
                continue
        fi

# а здесь хочу поствить 755, если $FILES содержит regexp.
# ну там *cgi$ или *.PL$ , etc.
# Как?

        chmod 644 $FILES
        echo " chmod 644"
done

chmod 755 .

#EOF

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 07-Дек-05, 17:59 
Скрипт называется setmod, он себя рекурсивно вызывает, если каталог.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 07-Дек-05, 18:03 
И ещё трабл - если в имени файла пробелы. Как ls объяснить, чтобы
экранировал \?
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от ACCA (ok) on 07-Дек-05, 21:58 
>И ещё трабл - если в имени файла пробелы. Как ls объяснить,
>чтобы экранировал \?

man find, в частности -print0. А вообще вместо всего скрипта:

chmod CVS 700
find ./ -print0 | grep -v CVS | xargs chmod 755
find ./ -type f -name '*cgi' -print0 | grep -v CVS | xargs chmod 644

Или ещё короче - поставить "правильную" umask и запускать tar с ключом --no-same-permissions.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

11. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от echo email(??) on 08-Дек-05, 13:35 

>man find, в частности -print0. А вообще вместо всего скрипта:

  есть версия с find.
  но если полной path будет длиннее 1024 (или 4096), не работает ни
  find, ни rm, ни chmod -R

  рекурсия позволяет пройтись по всему дереву.

>Или ещё короче - поставить "правильную" umask и запускать tar с ключом

  "правильная" umask мне нужна для каталога www.
   мой каталог www у меня на столе, на рабочей станции.
   на сервере я могу поставить "правильную" umask, но всё равно
   есть файлы, доступ к которым я хотел бы регулировать.


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

21. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от BigShadow on 10-Мрт-06, 13:09 
Я ответа на исходный вопрос "какой командой SHELL можно вернуть true.." так ответа и не увидел. Вставлю свои пять копеек, а точнее двоеточие ибо
: - есть пустой оператор шелла и всегда возвращае нулевой код завершения, например:

while :
do
  echo вечность навсегда
  sleep 5
done

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

22. "какой командой SHELL можно вернуть 1 (true) оператору"  
Сообщение от allez (ok) on 10-Мрт-06, 15:41 
>Я ответа на исходный вопрос "какой командой SHELL можно вернуть true.." так
>ответа и не увидел.

Таки прочтите это обсуждение еще раз и повнимательнее. ;-)

Во-первых, исходный вопрос выглядит так: "какой командой SHELL можно вернуть 1 (true)
оператору IF [ ?regex_cmd? "my string" ] THEN... FI, если в "my string" найдено регулярное
выражение?" - он начинается в заголовке, а продолжается уже в теле сообщения.

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

Ну и в-третьих, даже в некорректно заданном вопросе echo не просил вечного TRUE :-)

P.S. Да и за прошедшие три месяца он наверняка узнал о том, что такое пустой оператор в
bash (по крайней мере, я на это надеюсь :-)).

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру