Bash — Обработка строк циклом «while read line»

В этой статье разберемся с одним из циклов bash, а именно с циклом «while read line». С его помощью будем обрабатывать строки.








Допустим в скрипте есть переменная, значение которой состоит из нескольких строк:




#!/bin/bash
a="шишкаnяблокоnлистокnгруша"
echo -e $a




Напомню, что n это символ новой строки.




Выполним этот скрипт и получим такой результат:




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




Теперь изменим этот скрипт, чтобы каждая строка обрабатывалась в цикле:




#!/bin/bash
a="шишкаnяблокоnлистокnгруша"
echo -e "$a" | while read line
   do
      echo "На дереве висит $line"
   done




Выполнив этот скрипт получим:




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




Подобный скрипт можно написать и таким способом:




#!/bin/bash
echo -e "шишкаnяблокоnлистокnгруша" | while read line
   do
      echo "На дереве висит $line"
   done




Таким образом мы можем делать примерно такое:




"команда, возвращающая строки" | while read line
   do
      команда которой передаем на обработку каждую строку $line
   done




Вот еще один пример bash скрипта:




#!/bin/bash
cat /etc/passwd | cut -f 1 -d ":"  | while read line
   do
      echo "В системе есть пользователь - $line"
   done




Запустим это скрипт:




$ ./test.sh
В системе есть пользователь - root
В системе есть пользователь - daemon
В системе есть пользователь - bin
**** И так далее ***




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



2021-01-13T09:00:00
Программирование на Bash