Создание сценария Unix для проверки каталогов и подкаталогов в

Я выполняю следующее для одного из моих заданий, используя оболочку Korn.

Для каждого аргумента в списке аргументов (который становится текущим путем):

  1. Проверьте, является ли текущий путь каталогом, и если так:
  2. Инициализируйте переменную maxsubdir с пустой (пустой) строкой, а переменную maxentries равным 0;
  3. Для каждой записи в каталоге проверьте, представляет ли эта запись каталог, и если да, найдите номера записей в этом подкаталоге с помощью канала, состоящего из ls -l а также wcи сохраните результат в переменной curentries.
  4. Сравните curentries с maxentries, и, если curentries больше, обновите maxsubdir и maxentries. (--10 баллов)
  5. Когда for цикл для каталога завершен, отобразите (с эхо) имя каталога, maxsubdir и maxentries (с соответствующим пояснительным текстом.)
  6. Если путь в а) не является каталогом, отобразите путь и пояснительный текст о том, что путь не представляет каталог.
  7. Перейти к следующему аргументу командной строки (путь) и повторите 1-7

Выполнение скрипта заканчивается, когда обрабатываются все пути while выполнен)

Вот код, который у меня есть для этого (РЕДАКТИРОВАНИЕ):

#!/bin/ksh

directoy=$1
while [ $# -ne 0 ]; do
    if [ -d $1 ]; then
        maxsubdir=
        maxentries=0
        for x in $1; do
            echo "Checking if $1 represents a directory..\n"
            curentries="ls -l | wc"
            if [ $curentries > $maxentries ]; then
                maxentries=$curentries
                maxsubdir=$curentries
            fi; 
        done
        echo "The directory structure of $1 is … \n"
        echo "Maximum sub directories: \n"
        echo "$maxsubdir\n"
        echo "Maximum directory entries: \n"
        echo "$maxentries"
    fi
done
  1. Куда мне нужно вставить команду "shift", поскольку Unix может обрабатывать только ограниченное количество аргументов?

  2. Подходит ли мой синтаксис? Или у меня есть синтаксические ошибки на линиях сортировки?

  3. Сценарий, кажется, работает, но не выводит вывод на экран? Возможно, это бесконечно?

2 ответа

  1. Вы не
  2. У вас есть некоторые ошибки.
  3. Или, возможно, он никогда не достигает этого кода?

Ваше задание говорит специально использовать for цикл, и вы реализовали while петля.

Я начну с тебя

for directory in $*; do
  cd "$directory"
  curentries=$(ls -1 | wc -l)
  for entry in $(ls -1); do
    ...
  done
done

Посмотрите здесь и посмотрите, поможет ли это. Пояснения в коде.

#!/bin/ksh

    directory=$1

    # check whether the entered path is a directory
    if [ -d $1 ];then # yes, it's a directory
            maxsubdir=null
            maxentries=0
            echo "$1 is a directory"

            # you are only counting lines, add -l to wc
            # also you have to not count the first line. it's returns the size
            curentries=`ls -l $1 | wc -l`
            echo ${curentries}
    fi
Другие вопросы по тегам