В этой статье разберемся с одним из циклов 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`», о нём я писал в этой статье.