Циклы for

mak_upload_image002

Еще одна очень полезная конструкция, которая есть почти во всех языках программирования — цикл for. Она используется для итерации по группам объектов, позволяя вам применить один и тот же блок кода к каждому объекту по очереди. В Bash она работает подобно выражению if: for file in $(ls); do echo ${file} done
Еще один глупый пример, но он иллюстрирует синтаксис. После ключевого слова for идет переменная цикла, которая по очереди будет принимать каждое из значений выражения, следующего за ключевым словом in. Ключевые слова do и done обозначают начало и конец блока, а к переменной file, как и к любой другой переменной, можно обращаться внутри цикла.
Последняя возможность, которая есть во всех хороших языках программирования и которая поможет сделать ваши скрипты максимально удобными — функции. В Bash создание и вызов функций довольно стандартны. Для определения функции просто напишите ее имя с парой круглых скобок, а затем укажите код функции в фигурных скобках: func () { echo “Моя первая функция.” echo $1 } func “hello”
Как вы видите по этому примеру, вызов функции происходит точно так же, как и вызов обычной команды Bash — вы указываете имя функции и все аргументы, которые хотите ей передать.
Обращаться к аргументам внутри функции можно по номерам:
$1 — первый аргумент, $2 — второй, и т. д.
Во всех приведенных примерах данные выводились на экран в сеансе оболочки, который в данный момент выполнялся в терминале. Но если вы думаете, что так делают все программы, то вы ошибаетесь.
На самом деле программы направляют свой вывод в «канал» stdout. У канала два конца: один из них подключен к программе, генерирующей выходные данные, а другой — к чему-то еще, что принимает и обрабатывает вывод. По умолчанию, это «что-то еще» — ваш экран, но это не обязательно.
Управлять каналами можно двумя способами. Первый — переподключить выход канала, чтобы он направлялся в файл, а не на экран:
Точно так же можно обращаться к аргументам, переданным скрипту в командной строке; так вы сможете писать программы, которые работают с конкретными файлами или изменяют свое поведение в зависимости от пользовательских настроек. Представьте себе следующий файл с именем name.bash:
#!/bin/bash echo $1 jon@adam ~$ ./name Jon Jon
Это почти все, на что нам отведено место в этом месяце, но с этими основами у вас есть все необходимое, чтобы писать скрипты для автоматизации любых задач на своем компьютере. Помните, что если вы столкнулись со сложной задачей и не знаете, как ее решить, сперва поищите готовую программу, которая может это сделать, а если не получится, подумайте о том, как объединить несколько простых программ для решения более сложной задачи.
В частности, особенно полезны команды grep, sort и cut, а также sed (хотя только о ней можно написать отдельную статью или целую книгу!). I британских клавиатурах, нажмите Shift +\) направляет вывод команды ls на вход команды grep, в данном случае отфильтровывая все результаты, заканчивающиеся на .txt. Так можно объединить несколько программ, проводя сложные операции над данными.