Если у вас какая-то команда возвращает список строк, например:

$ cat list.txt 
шишка
яблоко
листок
груша 

То с помощью цикла for line in `comand` можно обработать этот вывод построчно.

Например такой скрипт:

#!/bin/bash
for line in `cat list.txt`
do
   echo "На дереве висит $line"
done 

Выполним его:

$ ./test.sh 
На дереве висит шишка
На дереве висит яблоко
На дереве висит листок
На дереве висит груша

Или более сложная задача, вывести все процессы пользователя и выяснить сколько файлов они открыли, а также сколько файлов им позволено открывать.

#!/bin/bash
for pid in `ps -u alex -o pid | grep -v PID`
do
   ps -p $pid -o comm,user | grep -v COMMAND
   egrep 'files|Limit' /proc/$pid/limits
   echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"
done

Вывод данного скрипта у меня очень большой, поэтому оставлю выборочные процессы:

$ ./test.sh 
Thunar
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 1048576              files     
Currently open files: 21
skypeforlinux
Limit                     Soft Limit           Hard Limit           Units     
Max open files            8192                 1048576              files     
Currently open files: 108
anydesk
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 1048576              files     
Currently open files: 50
TeamViewer.exe Limit      Soft Limit           Hard Limit           Units     
Max open files            4096                 4096                 files     
Currently open files: 72
chrome
Limit                     Soft Limit           Hard Limit           Units     
Max open files            8192                 1048576              files     
Currently open files: 53

Видно что файловый менеджер Thunar у меня открыл 21 файл из 1024 разрешенных, один из нескольких процессов Skype открыл 108 файлов из 8192, приложения для удаленного доступа Anydesk и TeamViewer открыли 50 и 72 файлов, а один из многих процессов Chrome открыл 53 файла.

Также для подобной задачи подходит другой цикл «while read line», о нём я писал в этой статье.


Спасибо за внимание!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *