Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

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, и, по моему опыту, новички находят его очень трудным для использовании. Я не собираюсь объяснять, как им пользоваться, потому что мне он не нравится, и я не пользуюсь им. Так что могу рассказать про него следующее:

  • Чтобы вставить текст, напечатайте "i", затем ваш текст;
  • Чтобы удалить символы, напечатайте <ESC> затем "x";
  • Чтобы выйти из vi без сохранения, напечатайте <ESC> затем :q!
  • Сохранить и выйти, напечататйте <ESC> затем :wq.

Хороший редактор для новичка - 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, который обучает транслятор зависимости между исходниками и объектными файлами. В нашем примере:





  # 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