Next Previous Contents

## 11. Немного программирования

## 11.1 Скрипты командного процессора: Файлы .BAT на стероидах

Если вы использовали .BAT-файлы для создания сокращений для длинных командных строк (я сам так делал), то это может быть достигнуто вставкой соответствующих алиасов (смотрите вышеприведенный пример) в файлы `profile` или `.bash_profile`. Но если ваши .BAT-файлы были более сложными, то вы полюбите язык, предоставляемый командным процессором: он мощен, как старый QBasic, если не больше. Он имеет переменные, управляющие структуры, подобные while, for, case, if... then... else, и много других возможностей: он может быть хорошей альтернативой ``настоящим'' языкам программирования.

Для написания скрипта---эквивалента .BAT-файла в DOS все, что надо сделать---написать стандартный ASCII-файл, содержащий инструкции, сохранить его и затем сделать его исполнимым с помощью команды `chmod +x <scriptfile>`. Для выполнения скрипта наберите его имя.

Предупреждение. Системный редактор называется `vi`, и по моему мнению большинство новых пользователей найдет его трудным в использовании. Я не буду объяснять, как его использовать; пожалуйста посмотрите эту информацию в книге Matt Welsh или найдите учебное руководство в сети. Здесь достаточно сказать, что:

- для вставки некоторого текста нажмите `i`, и затем вводите текст;
- для удаления символов наберите <ESC>, а затем `x`;
- для выхода из `vi` без сохранения изменений наберите <ESC>, а затем `:q!`
- для сохранения и выхода наберите <ESC>, а затем `:wq`.

Примечание переводчика: На самом деле `vi` -- мощный редактор. Для получения встроенного учебника наберите <ESC>, а затем `:help tutor`, для получения справки по какому либо разделу наберите <ESC>, а затем `:help имя_раздела или команды`. Этот перевод был сделан используя вариант этого редактора под названием `Vim`, дополнительную информацию смотрите на http://www.vim.org.

Хорошим редактором для начинающих является `joe`: запустив его с помощью команды `jstar`, вы получите те же самые сочетания клавиш, как и в редакторе, используемом в DOSWin. `jed` в режиме WordStar или IDE, даже еще лучше. Пожалуйста посмотрите раздел Где найти приложения для того чтобы узнать, где можно найти данные редактора.

Написание скриптов для `bash` -- это такой необъятный предмет, что сам по себе заслуживает книги и я не буду углубляться в этот предмет. Я просто дам вам пример скрипта командного процессора, из которого вы можете вычленить некоторые базовые правила. Прочитайте справочную страницу `bash`.

    #!/bin/sh
    # sample.sh
    # это комментарий
    # не изменяйте первую строку, она должна быть такой
    echo "Система называется: `uname -a`" # использовать вывод команды
    echo "Мое имя $0" # Встроенные переменные
    echo "Вы передали мне следующие $# параметров: "$*
    echo "Первым параметром является: "$1
    echo -n "Введите ваше имя? " ; read your_name
    echo заметьте разницу: "hi $your_name" # использование кавычек вида "
    echo заметьте разницу: 'hi $your_name' # использование кавычек вида '
    DIRS=0 ; FILES=0
    for file in `ls .` ; do
      if [ -d $\{file\} ] ; then # если файл является каталогом
        DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
      elif [ -f $\{file\} ] ; then
        FILES=`expr $FILES + 1`
      fi
      case $\{file\} in
        *.gif|*jpg) echo "$\{file\}: графический файл" ;;
        *.txt|*.tex) echo "$\{file\}:  текстовый файл" ;;
        *.c|*.f|*.for) echo "$\{file\}: файл исходных текстов" ;;
        *) echo "$\{file\}: обычный файл" ;;
      esac
    done
    echo "обнаружено $\{DIRS\} каталогов и $\{FILES\} файлов"
    ls | grep "ZxY--!!!WKW"
    if [ $? != 0 ] ; then # код завершения последней команды
      echo "ZxY--!!!WKW не найден"
    fi
    echo "достаточно... наберите 'man bash' если вам нужна дополнительная информация."

## 11.2 C для вас

В UNIX системным языком является C, любите его или ненавидьте. Также доступны другие языки программирования (Java, FORTRAN, Pascal, Lisp, Basic, Perl, awk...).

Считая, что вы знаете C, существует некоторое количество руководств для тех, кто испорчен использованием Turbo C++ или его собратьев по DOS. Компилятор С в Linux называется `gcc` и не содержит моргалки и дуделки, которые обычно сопутствуют его аналогам в DOS: нет IDE (Интегрированная среда разработки), оперативной подсказки, встроенного отладчика и т.п. Это просто командно-строковый компилятор, очень мощный и эффективный. Для компиляции стандартного `hello.c` вам необходимо выполнить команду:

> `

>     $ gcc hello.c

> `

которая создаст исполнимый файл, названный `a.out`. Для того, чтобы дать исполнимому файлу другое название, выполните команду:

> `

>     $ gcc -o hola hello.c

> `

Для подключения к программе библиотеки функций добавьте к командной строке ключ -l<libname>. Например, для подключения библиотеки математических функций:

> `

>     $ gcc -o mathprog mathprog.c -lm

> `

(Ключ `-l<libname>` заставляет `gcc` подключить библиотеку `/usr/lib/lib<libname>.so`; так что `-lm` подключает библиотеку `/usr/lib/libm.so`).

Чем дальше, тем лучше, но когда ваша программа состоит из нескольких файлов исходных текстов, то вам понадобиться пользоваться утилитой `make`. Предположим, что вы написали разбор выражений: его файл исходных текстов называется: `parser.c` и подключает два заголовочных файла, `parser.h` и `xy.h`. Затем вы хотите использовать подпрограммы из `parser.c` в программе, допустим `calc.c`, которая подключает файл `parser.h`. Что за неразбериха! Что вам надо сделать для компиляции `calc.c`?

Вам необходимо написать так называемый `Makefile`, который сообщает компилятору зависимости между файлами исходных текстов и объектными файлами. В нашем примере:

    # Это Makefile, используемый для компиляции calc.c
    # Нажмите клавишу <TAB> где показано!

    calc: calc.o parser.o
    <TAB>gcc -o calc calc.o parser.o -lm
    # calc зависит от 2-х объектных файлов: calc.o и parser.o

    calc.o: calc.c parser.h
    <TAB>gcc -c calc.c
    # calc.o зависит от двух файлов исходных текстов

    parser.o:  parser.c parser.h xy.h
    <TAB>gcc -c parser.c
    # parser.o зависит от трех файлов исходных текстов

    # конец Makefile.

Сохраните этот файл как `Makefile` и наберите `make` для компиляции вашей программы; вы также можете сохранить его как `calc.mak` и набрать `make -f calc.mak`, и конечно RMP. Вы также можете получить некоторую помощь о функциях C, которые описаны в справочных страницах, раздел 3; например,

> `

>     $ man 3 printf

> `

Для отладки ваших программ используйте программу `gdb`. Наберите `info gdb` для того, чтобы узнать, как использовать отладчик.

Существует большое количество библиотек; среди них первыми вы скорее всего захотите использовать следующие: `ncurses` (для работы в текстовом режиме), и `svgalib` (для графики в консоли). Много редакторов могут работать как IDE; например `emacs` и `jed`, также они производят подсветку синтаксиса, автоматические отступы, и так далее. Также вы можете взять пакет `rhide` с ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/. Это клон Borland IDE и есть шанс, что он вам понравится.

## 11.3 Программирование для X11

Если вы чувствуете себя достаточно образованным для программирования для X11 (это не так трудно), то существует несколько библиотек, которые сделают написание программ для X11 более легким. Основными серверами, которые вам необходимо посетить, являются сервера GTK+, http://www.gtk.org и Qt, http://www.troll.no. Gtk+ является набором элементов, написанных на языке С, в начале созданном для графического пакета The GIMP ( http://www.gimp.org), и используется средой Gnome. Kdeveloper основан на Qt, написанном на С++ и используемом средой KDE. Вероятнее всего, вы будете использовать один из этих пакетов.

Наилучшими пакетами для визуального программирования являются Kdevelop для Qt, http://www.kdevelop.org, и Glade для GTK+, http://glade.pn.org. Эта страница имеет большее количество информации: http://www.free-soft.org/guitool/.

### Многоплатформенной программирование

Было бы хорошо, если бы вы могли писать код, который одинаково компилируется и под и под Windows с помощью `gcc`? Во время написания данного документа, существовало несколько наборов элементов, которые позволяли (более или менее) программирование под разные платформы. Из соображений достаточности и стабильности, может использоваться только один: FLTK, Fast Light Tool Kit http://www.fltk.org. Он достаточно небольшой, быстрый и стабильный. В его составе также имеется полу-визуальный построитель интерфейса под названием Fluid.

Next Previous Contents