Перейти к содержанию

Рекурсия в shell


Рекомендуемые сообщения

Можно ли процедура-shell рекурсивно вызывать сама себя? Для примера, как сделать обход текущего каталога и всех его подкатологов с выводом числа подкатологов и файлов в каждом с помощью рекурсии, без функций?

Ссылка на комментарий
Поделиться на другие сайты

Вот процедура, выполняющая распечатку полных имен всех вложенных подкаталогов каталога, заданного в качестве аргумента

if test $#=0

then

cat=`pwd`

else

oldcat=`pwd`

cd $1

cat=`pwd`

cd $oldcat

fi

echo"Directory list from $cat"

ls $cat |\

while read i

do

if test -d $cat/$i

then

lsdir $cat/$i

fi

done

Постоянно выводит имя первого встретившегося подкаталога. В чём проблема?

Ссылка на комментарий
Поделиться на другие сайты

Во-первых, не забывайте про пробелы в условных операторах:

test $# = 0

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

В-третьих, читабельность исходного кода необходимо улучшать отступами.

В-четвертых, первый условный оператор следовало бы сделать попроще:

if test $# = 0
then
  CAT=`pwd`
else
  CAT=$1
fi

или даже так:

if [ "$#" == "0" ] && CAT=`pwd` || CAT=$1

В-пятых, и, возможно, в главных, все, что делает ваша процедура, можно уместить в одну строку:

find <имя_каталога> -type d
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...