Кароче, тема такая. Тут из лабораторных по линуксу попалась одна по программированию под shell. Читать и перечитывать книги неохота. А одну программку маленькую написать все таки надо Естественно она у меня не получается.
Задача следующая:
Есть программа, передаем в неё два параметра: первый - каталог, второй - "ключ". Программа должна вывести на экран все файлы/каталоги которые соотвествуют даному ключу. В лабораторной пишут, что имеются следующие ключи:
r - файл существует и разрешён для чтения;
....
f - "простой" файл;
d- каталог.
Вот что у меня получилось:
Код:
$k=0
for loop in `ls $1`
do
if [ test -$2 $loop ] then $k=$k+1
done
echo $k
Просьба исправить программу так, чтобы правильно работала. Буду благодарен.
если "ключ" совпадает с ключем команды test - то я бы сделал так:
Код:
for file in "$1"/*
do
test -$2 "$file" && echo `basename "$file"`
done
никаких `ls ...`, for разворачивает звездочку в список файлов. из минусов будет то, в каталоге с большим кол-вом файлов можно получить переполнение длины параметров, но зато легче. в кавычки пришлось взять чтобы корректно обрабатывать пробелы в дургие символы в имени директории.
test делает свое дело, и если код возврата был нулевой, тогда выводится строка с echo, если надо имя файла с относительным путем - тогда можно без basename, но тогда всякие ../path/to/back/../../../ будут в имени файла, забыл команду которая преобразует в нормальный путь и имя файла.