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

Исходное сообщение
"какой командой SHELL можно вернуть 1 (true) оператору"

Отправлено echo , 07-Дек-05 15:59 
IF [ ?regex_cmd? "my string" ] THEN... FI, если в "my string" найдено регулярное выражение?

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

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

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


Содержание

Сообщения в этом обсуждении
"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено allez , 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 {} \;

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


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



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

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

[ 0 ] && echo "TRUE"


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


"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено chip , 08-Дек-05 10:37 
>>[ 0 ] && echo "TRUE"
>И чего?:)
>Это что?:)

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

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

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


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


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



"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено allez , 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 (истина), в противном случае код завершения не равен нулю.


"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено echo , 08-Дек-05 18:42 

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

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


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

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


"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено allez , 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


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

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

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


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


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

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


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

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

Ж-)


"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено echo , 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


"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено echo , 07-Дек-05 17:59 
Скрипт называется setmod, он себя рекурсивно вызывает, если каталог.

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

"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено ACCA , 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.


"какой командой SHELL можно вернуть 1 (true) оператору"
Отправлено echo , 08-Дек-05 13:35 

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

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

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

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

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



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

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


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

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

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

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

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

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