Цикл Bash очень важная циклическая конструкция в программировании оболочки Bash. В основном цикл в Bash используется для итерации по ряду слов в пределах строк. В статье описывается цикл в Bash со всеми необходимыми примерами.
Базовый синтаксис “Bash для цикла”:
for { variable name } in { list } do Command1 Command2 . . CommmandN done
Примеры Bash для Loop:
1: Простой цикл:
В приведенном ниже примере для цикла мы инициировали переменную. Эта переменная зациклена от 1 до 5 с помощью приращения значения 1. То же значение переменной обрабатывается в команде, которая передается в echo значение переменной.
[root@furious ~]# cat for_loop_test.sh for i in 1 2 3 4 5 do echo "Welcome to AndreyEx $i times" done [root@furious ~]# chmod u+x for_loop_test.sh [root@furious ~]# ./for_loop_test.sh Welcome to AndreyEx 1 times Welcome to AndreyEx 2 times Welcome to AndreyEx 3 times Welcome to AndreyEx 4 times Welcome to AndreyEx 5 times [root@furious ~]#
2. Дополнительный цикл Bash для версии 4.0:
В приведенном выше примере 1 мы инициировали цикл путем записи всех значений переменной, Но что, если ваш цикл имеет несколько значений, и вы хотите перебрать то же самое. В Bash версии 4.o и выше, поддержка функциональности, в которой вы можете определить начальные и конечные значения серии наряду со значением приращения. Позволяет перебрать от 1 до 20 с шагом до 4 значений, вы можете определить, используя ниже пример для цикла.
[root@furious ~]# for i in {0..20..4} > do > echo "Welcome to AndreyEx $i times" > done Welcome to AndreyEx 0 times Welcome to AndreyEx 4 times Welcome to AndreyEx 8 times Welcome to AndreyEx 12 times Welcome to AndreyEx 16 times Welcome to AndreyEx 20 times [root@furious ~]#
3. Чтение каталога:
Кроме того, можно инициализировать Bash для переменной цикла со списком файлов в каталоге с помощью примера ниже.
[root@furious var]# for i in $( ls ) do echo File: $i; done
Пример вывода Bash для цикла, показан ниже:
File: account File: cache File: crash File: cvs File: db File: empty File: ftp File: ftp_dump File: games File: lib File: local File: lock File: log File: mail File: nis File: opt File: preserve File: run File: spool File: tmp File: yp [root@furious var]#
4. Программирование как синтаксис С:
Вы можете также использовать Bash цикл с использованием программирования C, как показано ниже:
for ((i=1;i<=25;i=i+1)) do echo $i done
5. Обработка содержания файла.
Вы можете также использовать цикл в Bash при обработке содержимого файла в другой команде. Это очень помогает при обработке огромного количества данных. Допустим, у вас есть файл со списком пользователей и вы хотите, проверить, являются ли они заперты или нет. Используйте ниже Bash , например.
Пример файла со списком пользователей.
[root@furious ~]# cat /tmp/users mann foo bar test_ftp_user testuser uxuser
В приведенном ниже примере переменная инициализируется с помощью команды cat и передается в команду “passwd -s”, имеющий аргумент как $, который не что иное, как имя пользователя, чтобы проверить заблокирован он или нет.
[root@furious ~]# for i in `cat /tmp/users` > do > passwd -S $i > done mann LK 2017-01-13 0 99999 7 -1 (Password locked.) foo LK 2017-01-01 0 99999 7 -1 (Password locked.) bar LK 2017-01-01 0 99999 7 -1 (Password locked.) test_ftp_user PS 2017-01-07 0 99999 7 -1 (Password set, SHA512 crypt.) testuser PS 2017-01-01 0 99999 7 -1 (Password set, SHA512 crypt.) uxuser LK 2017-01-08 0 99999 7 -1 (Password locked.) [root@furious ~]#
6. Копирование файлов на количество хостов
Вы можете также использовать Баш для цикла, где вы хотите скопировать файлы по количеству хостов, и вы не хотите вводить ту же команду один за другим. В приведенном ниже примере вы хотите скопировать файл test.txt в файл на хосте “RHEL01 rhel02 mann1 rhel06”, то вы можете пользователю цикл, который позволит вам копировать файл на одном дыхании.
7. Зеркалирование LVM:
Вы можете использовать цикл в зеркальном отображении логического расширения LV. Пусть у вас есть группа томов vg00 с 10 LV, и вы хотите, отразить его с помощью PV SDE1. Затем вы можете использовать ниже цикл для ее выполнения простым компактным образом, за один раз.
for i in 1 2 3 4 5 6 7 8 9 10 do lvextend -m 1 /dev/vg00/lvol$i /dev/sde1 done
8. Таблица умножения:
Допустим, вы хотите написать программу оболочки Bash для таблицы умножения. Используйте ниже Bash для цикла. В приведенном ниже примере Bash для контура мы инициализируем переменную, который будете использовать для умножения цифры с помощью команды expr.
if [ $# -eq 0 ] then echo "Please do not enter Zero" echo "Syntax : $0 number" exit 1 fi n=$1 for i in 1 2 3 4 5 6 7 8 9 10 do echo "$n * $i = `expr $i \* $n`" done
Пример вывода: