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

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

Цикл в Bash очень важная циклическая конструкция в программировании оболочки Bash. В основном цикл в Bash используется для итерации по ряду слов внутри строк. Это пост описывает цикл в Bash со всеми необходимыми примерами.

Базовый синтаксис цикла в Bash:

for { variable name } in { list }
 
do
 
Command1
 
Command2
 
.
 
.
 
CommmandN
 
done

 

Пример цикла в Bash:

1:   Простой цикл:

В приведенном ниже примере цикла в Bash мы инициировали переменную i. Эта переменная i в цикле из серии 1 до 5 с помощью приращения значения 1. То же значение переменной я обрабатываю в команде, которая выводит с помощью  echo значение переменной i.

	
[root@destroyer ~]# cat for_loop_test.sh
for i in 1 2 3 4 5
do
echo "Добро пожаловать на AndreyEx $i раз"
done
[root@destroyer ~]# chmod u+x for_loop_test.sh
[root@destroyer ~]# ./for_loop_test.sh
Добро пожаловать на AndreyEx 1 раз
Добро пожаловать на AndreyEx 2 раз
Добро пожаловать на AndreyEx 3 раз
Добро пожаловать на AndreyEx 4 раз
Добро пожаловать на AndreyEx 5 раз
[root@destroyer ~]#

 

2.   Дополнительный цикл в Bash для версии 4.0:

В приведенном выше примере 1, мы инициировали цикл путем определения и записи всех значений переменной i. Но что, если ваш цикл имеет несколько значений, и вы хотите перебрать то же самое. Bash версии 4.o и выше поддерживает функциональность, в которой вы можете определить начальные и конечные значения серии вместе со значением приращения. Позволяет перебрать от 1 до 12 с приращением значение 3, и вы можете определить его с помощью примера цикла Bash ниже.

	
[root@destroyer ~]# for i in {0..12..3}
> do
> echo "Добро пожаловать AndreyEx $i раз"
> done
Добро пожаловать AndreyEx 0 раз
Добро пожаловать AndreyEx 3 раз
Добро пожаловать AndreyEx 6 раз
Добро пожаловать AndreyEx 9 раз
Добро пожаловать AndreyEx 12 раз
[root@destroyer ~]#

 

3. Чтение директории:

Кроме того, можно инициализировать переменный цикл со списком файлов в каталоге с помощью примера ниже.

[root@destroyer var]# for i in $( ls )
do
echo File: $i;
done

 

Образец вывода цикла в Bash, показано ниже:

	
File: account
File: cache
File: crash
File: cvs
File: data
File: db
File: ftp
File: ftp_account
File: game
File: lib
File: locale
File: locks
File: log
File: mailru
File: nis
File: opt
File: preserve
File: runs
File: spools
File: temp
File: yp
[root@destroyer var]#

 

4. Синтаксис программирования на C:

Вы можете также использовать цикл в Bash с использованием языка программирования C, как заявление, как показано ниже:

for ((i=1;i<=20;i=i+1))
do
echo $i
done

 

5. Содержание обработки файла.

Вы можете также использовать цикл в Bash при обработке содержимого файла в другой команде. Это очень помогает при обработке огромного количества данных. Если у вас есть файл со списком пользователей и вы хотите проверить, являются ли они заблокированными или нет. То используйте пример ниже.

Пример файла со списком пользователей.

[root@destroyer ~]# cat /tmp/users
boris
andreyex
marina
test_ftp_user
testuser
uxuser

 

В приведенном ниже примере переменная «i»  инициализируется с помощью команды cat и передается команде «passwd -s», имеющий аргумент как $i, который не что иное, как имя пользователя, чтобы проверить, заблокирован он или нет.

[root@destroyer ~]# for i in `cat /tmp/users`
> do
> passwd -S $i
> done
boris LK 2017-01-13 0 99999 7 -1 (Password locked.)
andreyex LK 2017-01-01 0 99999 7 -1 (Password locked.)
marina 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@destroyer ~]#

 

6. Копирование файлов на несколько хостов

Вы можете также использовать цикл в Bash, где вы можете скопировать файлы на несколько хостов, и вы не хотите вводить ту же самую команду одну за другой. В приведенном ниже примере вы скопируете файл test.txt на хосты: «ANDREYEX01 andreyex02 manns1 andreyex06», также вы можете с помощью цикла в Bash позволить скопировать файл на одном дыхании.

for HOST in ANDREYEX01 andreyex02 manns1 andreyex06 
do
scp test.txt $HOST:/tmp/
done

 

7. LVM зеркалирование:

Вы можете использовать цикл в Bash в зеркальном отображении логического расширения 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 для таблицы умножения В приведенном ниже примере цикла, мы инициализируем переменную i, которая будет использоваться для умножения цифры с помощью команды expr.

if [ $# -eq 0 ]
then
echo "Пожалуйста введите число неравное 0"
echo "Синтаксис : $0 числа"
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

 

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

[root@destroyer ~]# ./myfile.sh 7
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
7 * 10 = 70

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

Exit mobile version