Библиотека сайта rus-linux.net
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, и возможно, что вам он понравится.