Если у вас какая-то команда возвращает список строк, например:
$ 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», о нём я писал в этой статье.
Спасибо за внимание!