Циклы в Bash

Автор: Admin

Дата:2012-12-21

Циклы в Bash

Ранее:
1) Изучаем BASH (Основы)

2) Изучаем BASH (Инструкции)

3) Проверка условий в Bash

Циклы в Bash (For, While, Until)

Цикл FOR

Создадим файл со следующим содержанием:

$ vi for.sh

Пример1

#!/bin/bash
for prm in Roman Viktor Masha "Smirnov Viktor" "Vitek'MO"  MO\'Vitek
        do
        echo "Name: $prm"
done

echo $prm

Выполним его:

$ sh for.sh

Name: Roman
Name: Viktor
Name: Masha
Name: Smirnov Viktor
Name: Vitek'MO
Name: MO'Vitek

MO'Vitek

Данный пример показывает нам работы команды For, когда происходит присваивание переменной PRM следующего значения из списка, т.е. сначало prm=Roman, затем prm=Virtor и так до конца, пока она не примет значение последней переменной в нашем случае она будет содержать в себе MO'Vitek.
Если Вы обратили внимание, то что нужно выводить вместе, необходимо экранировать при помощи " " или \

Возможно так же работать со списком добавляя еще один элемент к списку list=$list" Michel":

Пример2

#!/bin/bash
list="Roman Viktor Masha Dima"
list=$list" Michel"
for prm in $list
do
       echo "Name: $prm"
done


Хороший пример по мониторингу сети и понимания работы цикла FOR в паре с командой пинг и статусом выполнения команды.

Пример3

#!/bin/bash
for prm in "192.168.200.3" "192.168.200.65"
do
echo "производим пинг хоста из списка с одним пингом"
ping -c 1 $prm &> /dev/null
# статус выполнения последней команды, если успех тогда 0 иначе идем дальне
if [ $? -ne 0 ]; then
# В данном случае последняя команда не равно 0
echo "{Хост $prm не пингуется"
echo "`date`: ping не удался, $prm Хост лежит!" | mail -s "$prm Хост не пингуется!" admin@domain.loc
fi
done


Список Ip даресов хостов, приведенный выше, можно поместить в файл.

Пример4

#!/bin/bash
files="names"
for name in `cat $files`
do
        echo "$name"
done

Создать файл names, наполнить его содержимым и проверить результат.

Пример5

Работа цикла с программой sed по перебору чисел с шагом.

#!/bin/bash
for prm in $(seq 10 10 100)
  do
  echo prm=$prm
done

Дальше можно продемонстировать работу For с файлами и каталогами.

Пример6

#!/bin/bash
for prm in /home/aroma/* /home/arg/.* /home/test1/*
do
     if [ -d "$prm" ]
     then
        echo "$prm Это каталог"
     elif [ -f "$prm" ]
     then
        echo "$prm это файл"
     else
        echo "$prm файл не существует"
     fi
done

Пример7

Произвести разборку файла

#!/bin/bash
IFS.OLD=$IFS
IFS=$'\n'
for prm1 in `cat /etc/group`
do
        echo "Группа: $prm1"
        IFS=:
        for prm2 in $prm1
        do
                echo "Реквизит: $prm2"
        done
done

Первый цикл - при помощи переменной IFS происходит отделение каждой новой строки и вывод
Второй цикл For - отделяет все, что за знаком двоеточия и вывод

Пример8

#!/bin/bash
for var1 in  1 2 3 4 5
do        echo "VN $var1"
        for var2 in 1 2 3 4 5 6 7 8 9 10 11 12
        do
                if [ $var2 -eq 6 ]
                then
                        break
                fi
        echo ".............. $var2"
        done
done


В примере 8 видно зваимодействие вложенных циклов с процессом прерывания во вложенном цикле FOR var2, когда примет значение равное "6"

Пример9

#!/bin/bash
for var1 in  1 2 3 4 5
do
        echo "VN $var1"

        for var2 in 1 2 3 4 5 6 7 8 9 10 11 12
        do
                if [ $var2 -gt 3 ] && [ $var2 -lt 9 ]
                then
                        continue
                fi
        echo ".............. $var2"
        done
done
>  /tmp/for

В примере № 9 представлен  пример с командой continue при помощи которой, в данном примере, происходит прекращение обработки части команд c перенаправлением в файл.

Пример10

#!/bin/bash
for var1 in  c d e a b
do
        echo "VN $var1"
        for var2 in  g f gf fg
        do
                    echo ".............. $var2"
        done
done | sort


В примере 10 показано перенаправление в команду "sort", которая упорядочивает по алфавиту.

Циклы While и Until

Эти циклы, можно сказать, противоположность одно другому.
Так если While служит для повторения команд при условии, что выполение команды истино (код возврата ноль).
Until действет пока какое-то выражение ложно (Код возврата 1).

Пример с While.

Пример11

#!/bin/bash
var1=10
while   [ $var1 -gt -10 ]
do
        echo $var1
        var1=$[ $var1 - 2 ]
done

Здесь все очень просто , при том уcловии, что While выполняется, когда выражение истино тогда:
-gt 0 - Это Пока Var1 Больше -10 уменьшать на 2
В данном примере НЕ Истинность команды будет когда Var1 примет значение в -10, а до этого все Истино.

Пример12

#!/bin/bash
var1=10
while   [ $var1 -gt -10 ]
do
    if [ $var1 -eq -8 ]
    then
        break
    fi
        echo $var1
        var1=$[ $var1 - 2 ]
done

Здесь показан пример с прерыванием "break" в цикле при условии что If Then станет иснинным когда подойдет к цифре "-8"

Пример с Until.

Пример13

#!/bin/bash
var1=10
until [ $var1 -eq -10 ]
do
        echo $var1
        var1=$[ $var1 - 2 ]
done


До тех пор пока Var1 примет значение -10 уменьшать на два.
В данном примере истинность команды будет значение принятое Var1 в -10, а до этого все НЕ Истино.

Далее >>> Передача переменных из командной строки

Количество просмотров: 8405

Комментарии к статье:

Добавить комментарий

Введите сумму с картинки

© Plutonit.ru - Администрирование, настройка Linux и Windows 2009 - 2017