Циклы в Bash #

Андрей Михайлович Васильев, 2025

Версии презентации

Циклы #

Для обхода набора значений удобно воспользоваться циклами

for index in 1 2 3 4 5 6 7 8 9 10; do
    echo "Индекс: $index"
done
for ((index=0; index < 10; index++)) do
    echo "Число: $index"
done

Обход вывода приложения #

Циклы можно использовать для обработки вывода из приложения

echo 'Файлы, начинающиеся с A'
for file in A*; do
    echo "$file"
done
echo 'Проход по PID процессов'
for pid in $(ps -eo pid); do
    echo "${pid}"
done

Циклы while и until #

Помимо итеративного for в Bash также есть бесконечные циклы while и utlit:

while list-1; do list-2; done
until list-1; do list-2; done
  • Цикл while будет выполнять свои действия пока условия в list-1 верны
  • Цикл until будет выполнять свои действия пока условия в list-1 неверны

Выйти из цикла можно с помощью break [n] Если передать число, тогда выход будет произведён из такого количества циклов

Для перехода к следующей итерации можно воспользоваться continue [n] Если передать число, то продолжение будет на соответствующем уровне вложенности

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

#!/bin/bash
echo
while [ "$var1" != "end" ]
do
  echo "Input variable #1 (end to exit) "
  read var1                    # Not 'read $var1' (why?).
  echo "variable #1 = $var1"   # Need quotes because of "#"
  echo
done

exit 0

Цикл и shift #

С помощью цикла и shift можно обойти все аргументы:

until [ -z "$1" ]  # Until all parameters used up . . .
do
  echo -n "$1 "
  shift
done

shift может сдвигать сразу на несколько позиций

Оператор выбора case / esac #

Оператор выбора позволяет сравнить строку с рядом шаблонов. В случае совпадения шаблона выполняются соответствующие команды

case "$variable" in
 "$condition1" )
 command...
 ;;

 "$condition2" )
 command...
 ;;
esac