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

19.03.2018

Теги: BashIFSLinuxОператорЦикл

Оператор for служит для выполнения одной или нескольких команд указанное количество раз. Общая форма этого оператора, реализующего цикл:

for var in слово1 слово2 …
do
    команда
    команда
    .......
done

Пожалуй, самый простой пример цикла for в bash-скриптах — это перебор списка простых значений:

for var in first second third
do
    echo "The  $var item"
done
The first item
The second item
The third item

Один из самых распространённых вариантов использования циклов for в bash-скриптах заключается в обходе файлов, находящихся в некоей директории, и в обработке этих файлов.

for file in /home/evgeniy/* ; do
    if [ -d "$file" ] ; then
        echo "$file — это директория"
    elif [ -f "$file" ] ; then
        echo "$file — обычный файл"
    else
        echo "$file — что-то еще"
    fi
done

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

for (( i = 1; i <= 10; i++ )) ; do
    echo "number is $i"
done

Еще один способ организации цикла заключается в том, чтобы передать for результат работы некой команды:

for i in $(ls *.html) ; do
    cp $i $i.bak
done

В теле цикла можно использовать любые команды, в том числе — запускать другие циклы. Чаще всего вложенные циклы используют для обработки файлов. Так, внешний цикл занимается перебором строк файла, а внутренний уже работает с каждой строкой.

IFS=$'\n'
for entry in $(cat /etc/passwd) ; do
    echo "Values in $entry"
    IFS=:
    for value in $entry ; do
        echo $value
    done
done

Циклы while и until

Оператор while выполняет тело цикла, пока какое-то условие истинно, т.е. выражение или команда возвращают нулевой код. Оператор until наоборот, выполняет тело цикла, пока условие ложно, т.е. код возврата выражения или команды отличен от нуля.

Простой пример цикла while:

count=0
while [ $count -lt 5 ] ; do
    (( count++ ))
    echo $count
done
1
2
3
4
5

Простой пример цикла until:

count=0
until [ $count -ne 5 ] ; do
    (( count++ ))
    echo $count
done
1
2
3
4
5

Поиск: Bash • IFS • Linux • for • until • while • Оператор • Цикл

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.