Введение в Bash-скриптинг
Alex Scriven
Data Scientist
Python:
for x in range(3):
print(x)
0
1
2
R:
for (x in seq(3)){
print(x)
}
[1] 1
[1] 2
[1] 3
В Bash базовая структура аналогична:
for x in 1 2 3do echo $x done
1
2
3
В Bash есть удобный способ задать числовой диапазон — «расширение фигурных скобок»:
{START..STOP..INCREMENT}for x in {1..5..2}do echo $x done
1
3
5
Ещё один распространённый способ записи циклов FOR — синтаксис «трёх выражений».
x=2)x<=4)x+=2)
for ((x=2;x<=4;x+=2))
do
echo $x
done
2
4
Bash также позволяет использовать в цикле шаблонные подстановки с символом * — например, для файлов в каталоге.
Предположим, в папке /books находятся два текстовых документа:
for book in books/*
do
echo $book
done
books/book1.txt
books/book2.txt
Помните создание подоболочки с помощью нотации $()?
Её можно использовать прямо внутри цикла for!
Предположим, структура папок выглядит так:

Можно перебирать результат вызова подоболочки в цикле:
for book in $(ls books/ | grep -i 'air')do echo $book done
AirportBook.txt
FairMarketBook.txt
Похож на цикл FOR, но вместо перечисления элементов задаётся условие, которое проверяется на каждой итерации.
Итерации продолжаются, пока условие выполняется!
while вместо for-le)&& (AND) или || (OR)Простой пример:
x=1while [ $x -le 3 ];do echo $x ((x+=1)) done
1
2
3
Остерегайтесь бесконечного цикла WHILE — когда условие выхода так и не выполняется.
x=1
while [ $x -le 3 ];
do
echo $x
# don't increment x. It never reaches 3!
# ((x+=1))
done
Этот код будет бесконечно выводить 1!
Введение в Bash-скриптинг