ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Оффтоп > Болталка
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Лабораторная по Линуксу, по-быстрому :)
  #1  
Старый 09.05.2010, 18:15
xGOR
Участник форума
Регистрация: 25.11.2007
Сообщений: 119
Провел на форуме:
565921

Репутация: 88
По умолчанию Лабораторная по Линуксу, по-быстрому :)

Кароче, тема такая. Тут из лабораторных по линуксу попалась одна по программированию под shell. Читать и перечитывать книги неохота. А одну программку маленькую написать все таки надо Естественно она у меня не получается.
Задача следующая:
Есть программа, передаем в неё два параметра: первый - каталог, второй - "ключ". Программа должна вывести на экран все файлы/каталоги которые соотвествуют даному ключу. В лабораторной пишут, что имеются следующие ключи:
r - файл существует и разрешён для чтения;
....
f - "простой" файл;
d- каталог.

Вот что у меня получилось:
Код:
$k=0
for loop in `ls $1`
do
     if [ test -$2 $loop ] then $k=$k+1
done
echo $k
Просьба исправить программу так, чтобы правильно работала. Буду благодарен.
 
Ответить с цитированием

  #2  
Старый 09.05.2010, 19:57
COMEJIbE
Новичок
Регистрация: 06.04.2010
Сообщений: 26
Провел на форуме:
179669

Репутация: 8
По умолчанию

если "ключ" совпадает с ключем команды test - то я бы сделал так:

Код:
for file in "$1"/*
do
     test -$2 "$file" && echo `basename "$file"`
done
никаких `ls ...`, for разворачивает звездочку в список файлов. из минусов будет то, в каталоге с большим кол-вом файлов можно получить переполнение длины параметров, но зато легче. в кавычки пришлось взять чтобы корректно обрабатывать пробелы в дургие символы в имени директории.
test делает свое дело, и если код возврата был нулевой, тогда выводится строка с echo, если надо имя файла с относительным путем - тогда можно без basename, но тогда всякие ../path/to/back/../../../ будут в имени файла, забыл команду которая преобразует в нормальный путь и имя файла.


Код:
## каталоги
[me@localhost] Videos $ ./lab.sh Planeta\ 51/ d
AUDIO_TS
VIDEO_TS

## файлы
[me@localhost] Videos $ ./lab.sh Planeta\ 51/VIDEO_TS f
VIDEO_TS.BUP
VIDEO_TS.IFO
VIDEO_TS.VOB
VTS_01_0.BUP
VTS_01_0.IFO
VTS_01_0.VOB
VTS_01_1.VOB
VTS_01_2.VOB
VTS_01_3.VOB
VTS_01_4.VOB
VTS_01_5.VOB

## сделаю маленькое западло, уберу право чтения с VOB-файлов. 
[me@localhost] Videos $ chmod -r Planeta\ 51/VIDEO_TS/*.VOB

[me@localhost] Videos $ ./lab.sh Planeta\ 51/VIDEO_TS/ r
VIDEO_TS.BUP
VIDEO_TS.IFO
VTS_01_0.BUP
VTS_01_0.IFO
 
Ответить с цитированием

  #3  
Старый 09.05.2010, 21:25
xGOR
Участник форума
Регистрация: 25.11.2007
Сообщений: 119
Провел на форуме:
565921

Репутация: 88
По умолчанию

Спасибо. Да и ещё одно, какой ключ для скрытых файлов ? Лучше подсчитать сколько их там.

Последний раз редактировалось xGOR; 09.05.2010 в 21:27..
 
Ответить с цитированием

  #4  
Старый 09.05.2010, 21:28
lukmus
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
Провел на форуме:
1410429

Репутация: 214


По умолчанию

Цитата:
Сообщение от xGOR  
Спасибо. Да и ещё одно, какой ключ для скрытых файлов ?
ls -a
 
Ответить с цитированием

  #5  
Старый 09.05.2010, 21:38
xGOR
Участник форума
Регистрация: 25.11.2007
Сообщений: 119
Провел на форуме:
565921

Репутация: 88
По умолчанию

Как же все таки подсчитать сколько файлов, а не просто выводить их?
 
Ответить с цитированием

  #6  
Старый 09.05.2010, 22:01
COMEJIbE
Новичок
Регистрация: 06.04.2010
Сообщений: 26
Провел на форуме:
179669

Репутация: 8
По умолчанию

если надо посчитать, тогда да... счетчик
k="0"

for file in `ls -a "$1"/*`
do
test -$2 "$file" && k=$(( k+1 ))
done
echo $k
 
Ответить с цитированием

  #7  
Старый 10.05.2010, 23:00
xGOR
Участник форума
Регистрация: 25.11.2007
Сообщений: 119
Провел на форуме:
565921

Репутация: 88
По умолчанию

Не считает )
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как Линуксу завоевать сердца пользователей? Iohid Болталка 5 30.10.2009 23:23
Где по быстрому можно сделать/купить 500 доменов? ttt0z Болталка 2 01.04.2009 11:59



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ