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