Következõ Elõzõ Tartalom

10. Egy kis programozás

10.1 Szkriptek: .BAT fájlok Linuxon

Ha a .BAT fájlokat hosszú programsorok rövidítésére használtad (én sokszor), akkor ezt megvalósíthatod a megfelelõ ``alias'' sorok alkalmazásával a .profile, és a .bash_profile fájlokban. De ha a .BAT fájljaid bonyolultabbak voltak, akkor lefogadom, hogy egyszerûen imádni fogod a burok programnyelvét: ez legalább olyan hatékony mint a Qbasic, ha nem hatékonyabb. Változókat definiálhatsz, léteznek a while, for, case, if... then... else struktúrák, és még számos lehetõséget nyújt. Jó alternatívája lehet egy ``igazi'' programnyelvnek.

Ha egy szkriptet -- a DOS alatti .BAT fájl megfelelõje -- akarsz írni, egyszerûen egy olyan szabványos ASCII fájlt kell írnod, amely a parancsokat tartalmazza, el kell mentened, és a következõ paranccsal végrehajthatóvá kell tenned: chmod +x <szkriptfájl>. A végrehajtáshoz egyszerûen csak a nevét kell begépelned.

Elõre figyelmeztetlek, hogy a rendszer alapértelmezett szövegszerkesztõjét, a vi-t, tapasztalatom szerint a kezdõk nagyon nehéznek találják. Nem fogom most itt elmagyarázni a mûkõdését, olvasd el Matt Welsh könyvében a megfelelõ fejezetet, vagy keress egy leírást a hálózaton. A vi-ról álljon itt annyi, hogy:

A joe kezdõknek ideális szövegszerkesztõ, ha a jstar parancs begépelésével indítod, akkor ugyanazok lesznek a billentyûparancsok, mint egy DOSWin szövegszerkesztõben. A jed WordStar vagy IDE üzemmódja még jobb. Nézd meg a Hol vannak az alkalmazások? fejezetet, ha nem tudod, honnan szerezheted meg ezeket a szövegszerkesztõket.

A linuxos szkriptek írásáról egy egész könyvet lehetne írni, így most nem fogok a témában igazán elmélyedni, csak mutatok néhány remélhetõleg hasznos példát, amibõl aztán leszûrheted az alapvetõ szabályok egy részét.


#!/bin/sh
# sample.sh
# Ez egy megjegyzés
# Ne változtasd emg az elsõ sort! Annak ott kell lennie!
echo "Ez a rendszer egy: `uname -a`" # a parancs kimenetét írja ki
echo "a program neve $0" # beépített változó
echo "A következõ $# paramétert kaptam: "$*
echo "Az elsõ paraméter: "$1
echo -n "Hogy hívnak? " ; read nev
echo Vedd észre a különbséget:  "Szia $nev" # az " használata idézõjelként
echo Vedd észre a különbséget:  'Szia $nev' # az ' használata idézõjelként
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # ha a fájl könyvtár
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*.jpg) echo "${file}: grafikus fájl" ;;
    *.txt|*.tex) echo "${file}: szöveges fájl" ;;
    *.c|*.f|*.for) echo "${file}: forráskód" ;;
    *) echo "${file}: generic file" ;;
  esac
done
echo "Összesen ${DIRS} könyvtárat és ${FILES} fájlt találtam."
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then az utolsó parancs kilépési kódja
  echo "Nem találtam a következõ fájlt: ZxY--!!!WKW"
fi
echo "Na ebbõl elég... Írd be, hogy 'man bash', ha több információt szeretnél!"

10.2 C

A Unixok alatt a rendszer nyelve a C, akár szereted akár nem. Persze egy csomó másik nyelv is elérhetõ (FORTRAN, Pascal, Lisp, Basic, Perl, awk, ...).

Feltételezve, hogy ismered a C-t, álljon itt néhány segítõ tanács azoknak, akiket eddig a Turbo C++ vagy valamelyik DOS-os testvére kényeztetett. A Linux C fordítóját gcc-nek hívják, és alapértelmezésben híján van minden villogó, fütyülõ kütyünek, ami általában velejárója a DOS-os hasonmásának: nincs Integrált Fejlesztõi Környezet (IDE), on-line help, beépített debugger, stb. A gcc egy parancssorból hívható fordító, nagyon hatékony és erõteljes. Ha le szeretnéd fordítani a szokásos hello.c programodat, akkor a

$ gcc hello.c
sor a fordítás végeredményeképpen egy végrehajtható a.out nevû fájlt fog készíteni. Ha ettõl az elnevezéstõl el akarsz térni, akkor a
$ gcc -o hello hello.c
sor a hello névre fogja elkeresztelni a futtatható fájlt. (Világos, hogy nem célszerû az a.out fájlban hagyni a kész mûved, mert a következõ fordítás alkalmával felülíródik). Ha szeretnél egy programkönyvtárat linkelni a programodhoz, akkor egy sor végi -l<libnev> kapcsoló oldja meg ezt a feladatot. Például, ha a matematikai könyvtárral linkeled össze:
$ gcc -o mathprog mathprog.c -lm
(A -l<libnev> kapcsoló arra utasítja a gcc-t, hogy az /usr/lib/lib<libnev>.so; könyvtárral linkelje a programot, tehát az -lm az /usr/lib/libm.so-t használja).

Ezek a parancsok elegendõek egy kis program esetén, de ha a programod számos forrásból áll össze, akkor szükséged lesz a make segédprogramra. Tegyük fel, hogy írtál egy kifejezéselemzõt: a forrásfájl parser.c és két #include fájlja van, parser.h és xy.h. Ezután szeretnéd egy calc.c nevû programban használni a parser.c függvényeit, amely viszont includolja a parser.h fájlt. Nos, mit kell ekkor tenned, ha a calc.c fájlt akarod fordítani?

Egy úgynevezett Makefile-t kell írnod, amely leírja a fordító számára a forrásfájlok közötti összefüggéseket. A példánkban ez a következõképpen néz ki:


# Ez a Makefile a calc.c fordítását végzi
# Üss <TAB>-ot a megfelelõ pozíciókban!

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# calc két object fájltól függ: calc.o és parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o két forrásfájltól függ

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o három forrásfájltól függ

# A Makefile vége

Ezt a fájlt Makefile néven mentsd ki, és futtatsd a make parancsot, esetleg mentsd el calc.mak néven, és írd be azt, hogy make -f calc.mak. Természetesen OEK. Továbbá ne feledd, hogy bármikor leírást kaphatsz a C függgvényekrõl, a kézikönyvoldalak segítségével. Például:

$ man 3 printf
A programok hibakereséséhez használd a gdb-t. A használati utasításhoz írd be: info gdb.

Rengeteg programkönyvtár van, amit használhatsz. Valószínûleg az elõször használandók között lesz az ncurses és az svgalib, amik a szöveges illetve a grafikus képernyõ kezelését valósítják meg. Ha elég bátorságot érzel az X alatti programozáshoz (nem olyan nehéz), akkor számos programkönyvtár áll rendelkezésedre, amelyekkel egy szempillantás alatt mûködõ alkalmazásokat lehet létrehozni. Nézd meg a http://www.xnet.com/~blatura/linapp6.html weblapot, és tartsd észben, hogy a Gtk kezd a Linux szabvánnyá válni.

Sok szövegszerkesztõ képes integrált fejlesztõkörnyezetként viselkedni, például az emacs és a jed képes a nyelv szintaktikai elemeinek kiemelésére, automatikus bekezdésekre, stb. Ezen kívül beszerezheted az rhide csomagot az ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/ FTP-helyrõl. Ez a Borland integrált fejlesztõkörnyezetét koppintja, valószínûleg elnyeri majd a tetszésedet.


Következõ Elõzõ Tartalom