Jump to content

Recommended Posts

Posted

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

Posted

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

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

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

Posted

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

test $# = 0

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

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

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

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

или даже так:

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

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

find <имя_каталога> -type d

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...