Заставить весь сетевой трафик проходить через шлюз по умолчанию

Другая проблема заключается в том, что вы (правильно) заключаете переменную в кавычки при проверке с помощью -d, но не заключаете ее в кавычки в цикле for.

Вместо:

for i in $chosen_dir/*;

    do

Используйте:

for f in "$chosen_dir"/*; do

(Изменение имени и пробелов - это стилевые моменты; добавленные двойные кавычки важны.)


Я не знаю, для чего вы пытаетесь использовать счетчик, потому что на самом деле вы никогда его не использовали. Вы также не сослались на $i ($f в моей версии), который на основе приведенной выше конструкции for будет содержать имя каждого файла (или подкаталога) в "$chosen_dir", по очереди.

Кстати, спасибо, что уточнили, что это домашнее задание. Могут быть гораздо более короткие решения, но ваш общий подход вполне подходит, если вы исправите синтаксические ошибки, а также приведете свои переменные.


Что касается подсчета файлов в подкаталоге, вы можете не получить точного подсчета с помощью команды, которую вы используете. (На самом деле вы никогда не получите точного подсчета с помощью команды: ls "$chosen_dir" | wc -l, потому что вы проверяете не подкаталог, а каталог, введенный пользователем.) Вместо просто ls можно использовать ls -1 -A "$i", чтобы подсчет строк дал точное количество файлов в подкаталоге. (Подробности о флагах -1 и -A см. в man ls)

Это все равно не будет корректно обрабатывать имена файлов, содержащие новые строки, но для домашнего задания я очень сомневаюсь, что вам снимут за это баллы. (Многие скрипты, реально используемые в производстве, также не справляются с именами файлов, содержащими новые строки; такие имена практически всегда приходят только от злоумышленников.)


Я предполагаю, что вы сможете самостоятельно разобраться с частью C. ;) (См. man sort, если нужно, и поищите тег sort на этом сайте)

.

1
30.06.2015, 12:49
0 ответов

Теги

Похожие вопросы