ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Практическое руководство: Bash цикл с примерами

Практическое руководство: Bash цикл с примерами

Цикл 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

 

Пример вывода:

цикл в Bash

Exit mobile version