Создание сценария Unix для проверки каталогов и подкаталогов в
Я выполняю следующее для одного из моих заданий, используя оболочку Korn.
Для каждого аргумента в списке аргументов (который становится текущим путем):
- Проверьте, является ли текущий путь каталогом, и если так:
- Инициализируйте переменную maxsubdir с пустой (пустой) строкой, а переменную maxentries равным 0;
- Для каждой записи в каталоге проверьте, представляет ли эта запись каталог, и если да, найдите номера записей в этом подкаталоге с помощью канала, состоящего из
ls -l
а такжеwc
и сохраните результат в переменной curentries. - Сравните curentries с maxentries, и, если curentries больше, обновите maxsubdir и maxentries. (--10 баллов)
- Когда
for
цикл для каталога завершен, отобразите (с эхо) имя каталога, maxsubdir и maxentries (с соответствующим пояснительным текстом.) - Если путь в а) не является каталогом, отобразите путь и пояснительный текст о том, что путь не представляет каталог.
- Перейти к следующему аргументу командной строки (путь) и повторите 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
Куда мне нужно вставить команду "shift", поскольку Unix может обрабатывать только ограниченное количество аргументов?
Подходит ли мой синтаксис? Или у меня есть синтаксические ошибки на линиях сортировки?
Сценарий, кажется, работает, но не выводит вывод на экран? Возможно, это бесконечно?
2 ответа
- Вы не
- У вас есть некоторые ошибки.
- Или, возможно, он никогда не достигает этого кода?
Ваше задание говорит специально использовать 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