Next Previous Contents

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

8.1 Скрипты shell: .BAT файлы, объевшиеся стероидов

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

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

Предупреждение. Системный редактор называется vi, и, по моему опыту, новички находят его очень трудным в использовании. Я не собираюсь объяснять, как им пользоваться, потому что мне он не нравится, и я не пользуюсь им. Так что могу рассказать про него следующее:

Хороший редактор для новичка - joe: вызовите его, напечатав jstar, и вы получите очень знакомый по DOS редактор. Jed в WordStar или IDE режиме даже лучше. Пожалуйста, обратитесь к разделу "Где найти приложения", чтобы узнать, где можно найти эти редакторы.

Написание скриптов под bash - это такой обширный предмет, что требуется книга, и я не буду углубляться в эту тему дальше. Я только дам вам пример скрипта shell, из которого вы можете извлечь некоторые основные правила:

  #!/bin/sh
  # sample.sh
  # Это комментарий
  # не изменяйте первую строку, она необходима
  echo "Это система: `uname -a`" # использование вывода команды
  echo "Мое имя $0" # встроенная переменная
  echo "Вы передали мне $# параметров: "$*
  echo "Первый параметр: "$1
  echo -n "Как ваше имя? " ; считывание вашего имени
  echo notice the difference: "Здорово, $your_name" # использование "
  echo notice the difference: 'Здорово $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', если вам нужно больше информации

8.2 "C" для вас

В UNIX системный язык - C, вызывающий или любовь, или ненависть. Также доступны и множество других языков (Java, ФОРТРАН, Паскаль, Lisp, BASIC, Perl, awk ...).

В предположении, что в знаете C, имеется пара руководящих принципов для тех из Вас, кто испорчен Турбо 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> .a; так -lm связан с /usr/lib/libm.a).

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

вам надо будет написать так называемый makefile, который обучает транслятор зависимости между источниками и objects. В нашем примере:

  # this is makefile, used to compile calc.c
  # Press the <TAB> key where indicated!

  calc: calc.o parser.o
  <TAB>gcc -o calc calc.o parser.o -lm
  # calc depends on two object files: calc.o and parser.o

  calc.o: calc.c parser.h
  <TAB>gcc -c calc.c
  # calc.o depends on two source files

  parser.o:  parser.c parser.h xy.h
  <TAB>gcc -c parser.c
  # parser.o depends on three source files

  # end of makefile.

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

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

Имеется большое количество доступных библиотек; самая первая из них, которую вы захотите использовать - ncurses, обрабатывающая текстовые режимы экрана, и svgalib, работающая с графикой. Если вы достаточно храбры, чтобы заняться программированием под X11, то имеются библиотеки типа вышеупомянутох XForms, Qt, Gtk и многих других, которые облегчают написание программ под X11. Посмотрите в http://www.xnet.com/~blatura/linapp6.html.

Многие редакторы могут действовать как IDE; emacs и jed, например, также обеспечивают подсветку синтаксиса, автоматические отступы и так далее. Альтернативно, воспользуйтесь пакетом rhide из ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/. Это - аналог Borland IDE, и возможно, что вам он понравится.


Next Previous Contents