Программирование на bash

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

khach
Интересующийся
Сообщения: 7
Зарегистрирован: 06 май 2016, 10:31
Контактная информация:

Программирование на bash

Непрочитанное сообщение khach » 07 май 2016, 01:07

Есть такая задача: Создать командный файл, который по команде read запрашивает имя каталога и выдает его полное содержимое.
Мой алгоритм решения этой задачи такой:
1) находим все одноименные каталоги
2) записываем пути к этим папкам как массив строк
3) поочередно просматриваем их содержимое
Пока что написал вот это:

Код: Выделить всё

#!/bin/bash
echo "Задайте имя каталога : "
read catalog
echo
find / -name $catalog -type d
exit 0

Результат такой Изображение
Теперь не знаю, как превратить, то, что выдано на экран, в массив из строк, чтобы потом с помощью команды ls -a посмотреть содержание каждой строки (папки).
Буду признателен любой конструктивной подсказке.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Программирование на bash

Непрочитанное сообщение Olej » 07 май 2016, 11:06

khach писал(а): Теперь не знаю, как превратить, то, что выдано на экран, в массив из строк, чтобы потом с помощью команды ls -a посмотреть содержание каждой строки (папки).
Не нужен вам никакой массив!
Вам нужен элементарный список требуемых путей (имён), по которому потом нужно пройтись циклом.
Вот вам ваш упрощённый пример (ввод имени мне лень делать, и ищем каталоги начиная с $HOME, иначе их слишком много, да и права чтения мешают):

Код: Выделить всё

[olej@localhost find]$ cat fnd.
#!/bin/sh

CATALOG=tmp
SUBS=`find $HOME -name $CATALOG -type d`

for DIR in $SUBS
   do
      echo '-----> ' $DIR
      ls $DIR
   done

Код: Выделить всё

[olej@localhost find]$ sh fnd.
----->  /home/olej/.config/libreoffice/4/user/extensions/tmp
extensions  registry
----->  /home/olej/2016_WORK/WORK/Linux.kernel/fuse/tmp
----->  /home/olej/.AndroidStudio2.0/system/tmp
jna-3413826
Так, получением списка файлов с последующим проходом по нему циклом, делается в большинстве подобных случаев.

P.S. В shell скриптах имена переменных часто записывают заглавными (большими) буквами ... так (на первое время, по крайней мере) оно будет понятнее.

P.P.S. Вот здесь вам все конструкции bash с примерами (и те которые вас интересуют) - где их можно просто в готовом виде списать ;-) :
Искусство программирования на языке сценариев командной оболочки


Аватара пользователя
Lepton
Писатель
Сообщения: 73
Зарегистрирован: 18 окт 2011, 20:26
Контактная информация:

Re: Программирование на bash

Непрочитанное сообщение Lepton » 07 май 2016, 11:49

С подтверждением выполнения команды "ls -a" (y - да, n - нет)

Код: Выделить всё

#!/bin/bash
echo "Задайте имя каталога : "
read catalog
echo
find / -name $catalog -type d -ok ls -a '{}' ';'
exit 0

khach
Интересующийся
Сообщения: 7
Зарегистрирован: 06 май 2016, 10:31
Контактная информация:

Re: Программирование на bash

Непрочитанное сообщение khach » 07 май 2016, 12:21

Lepton писал(а):С подтверждением выполнения команды "ls -a" (y - да, n - нет)
Спасибо большое.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей