"Кодим в Bash!"

Гребенников Роман ака voy

Xakep, номер #055, стр. 055-064-1

[voy@satanic.com www.v0y.org]

Жизнь обычного юниксоида малость нудновата. И это из-за того, что каждый день приходится набирать в консоли килобайты всяких команд, а еще пару мегабайт держать в памяти. Я не хочу сказать, что надо пользоваться гуевыми конфигураторами, но хотелось бы заметить, что жизнь себе надо упрощать. Я понимаю, что скорость набора в терминале инопланетной абракадабры 200 букв в минуту - это хорошая тренировка мышц рук :), но рано или поздно колдовать над клавиатурой попросту надоедает. Надо оптимизировать свою работу, причем делать это, используя подручные средства и вещи, которые ты хорошо знаешь. А как мы будем это делать? Станем писать скрипты в самом Bash, в программе, с которой ты общаешься чуть ли не ежедневно, и частенько коротаешь холодные осенние вечера в компании черного экранчика и беленьких буковок. Почему именно Bash, а не перл, например? В первую очередь потому, что скрипты Bash - это всего лишь набор общеизвестных легкоузнаваемых команд, 90% которых тебе наверняка известно из темного консольного прошлого. А перл учить надо, причем делать это долго и с редкостным усердием и терпением, которые у многих отсутствуют. Хочется, чтобы все было просто и быстро, как в васике в школьные времена на уроке информатики. Но то, что Bash - простой язык, не говорит о том, что он малофункционален: с его помощью можно работать как просто с файлами, так и с сетью, и с x-win.

[Начало]

С чего начинается изучение любого языка программирования? С 'hello, world!', конечно же. Это же классика. Еще неандертальцы, когда выбивали на камне первые программы на ассемблере, частенько развлекались таким образом. В нашем случае программа будет выглядеть так:

#!/bin/sh

echo 'Hello, world!'

Все предельно просто, как видишь, это тебе не c/c++, где с одной инициализацией будешь возиться много строк, а потом еще полчаса отлавливать глюки в написанном. Теперь давай разбираться по порядку: первая строка - это классическое начало всех интерпретируемых скриптов под любым юниксом; в этой строке пишется только путь к самому интерпретатору той чепухи, на которой написан скрипт (в нашем случае это Bash, хотя может быть все, что угодно). Вторая строка - это обычная консольная команда, аргумент которой я чисто для красоты запихнул в кавычки, хотя это и не обязательно. Кстати, все, что идет после символа # - считается комментарием.

[Переменные]

Чтобы бедному программеру жилось полегче, в Bash не существует четких типов переменных: если ты возьмешь какую-нибудь переменную и затолкаешь в нее цифирь, то переменная будет числовой. Если вдруг тебе эта цифирь разонравится, и ты засунешь в эту же переменную текстовую информацию, то переменная из числовой превратится в символьную. Также существует автоматическая проверка границ, то есть о всяких buffer-overflow'ах можно забыть как о страшном сне, это тебе не Ся. С числами и строками можно делать все, что угодно, включая все арифметические действия для первых и текстовые для вторых. Для примера можно попробовать разжевать вот такую программу:

Содержание  Вперед на стр. 055-064-2
ttfb: 2.6669502258301 ms