Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Next Previous Contents

7. Циклы for, while и until

В этом разделе Вы познакомитесь с циклами for, while и until.

Цикл for немного отличается от аналогов в других языках программирования. Прежде всего, он позволяет Вам проводить последовательные действия над "словами" в строке.

Цикл while выполняет кусок кода, когда проверяемое выражение - истина и останавливается только тогда, когда оно - ложь (или внутри исполняемого кода встречается явно заданное прерывание цикла).

Цикл until почти равносилен циклу while, только код выполняется, когда проверяемое выражение - ложь.

Если Вы считаете, что while и until очень похожи, Вы правы.

7.1 Пример цикла for

        #!/bin/bash
        for i in $( ls ); do
            echo item: $i
        done
        

Во второй строке мы объявляем i как переменную, которая получает различные значения, содержащиеся в $( ls ).

Третья строка при необходимости могла бы быть длиннее или там могло бы быть несколько строк перед done (4-я строка).

'done' (4-я строка) показывает, что код, в котором используется значение $i, заканчивается и $i получает новое значение.

Данный скрипт имеет совсем не большой смысл, более полезным применением цикла for было бы использование его для отбора только каких-то определённых файлов в предыдущем примере.

7.2 C-подобный for

fiesh предложил добавить эту форму цикла. Это цикл for, более похожий на for в языках C, Perl и т.п.

        #!/bin/bash
        for i in `seq 1 10`;
        do
                echo $i
        done
        

7.3 Пример цикла while

         #!/bin/bash
         COUNTER=0
         while [  $COUNTER -lt 10 ]; do
             echo The counter is $COUNTER
             let COUNTER=COUNTER+1
         done
         

Данный скрипт "эмулирует" хорошо известную (в языках C, Pascal, perl и т.д.) структуру 'for'.

7.4 Пример цикла until

         #!/bin/bash
         COUNTER=20
         until [  $COUNTER -lt 10 ]; do
             echo COUNTER $COUNTER
             let COUNTER-=1
         done
         

Next Previous Contents