Anterior Siguiente Indice

7. Un poco de Programación

7.1 Los Scripts del Shell: Ficheros .BAT con esteroides

Si ha utilizado ficheros .BAT para crear atajos de largas líneas de comando (yo suelo hacerlo), el objetivo puede ser obtenido insertando las líneas de alias convenientes (ver ejemplo de más arriba) en el profile o en el .profile. Pero si sus ficheros .BAT son más complicados, le encantará el lenguaje de Script que el shell pone a su disposición: es tan potente como el Qbasic (o más). Tiene variables, estructuras como while, for, case, if-then-else, y montones de nuevas características: puede ser una buena alternativa a un lenguaje de programación "de verdad".

Para escribir un script ---el equivalente a un fichero .BAT bajo DOS--- todo lo que tiene que hacer es escribir un fichero ASCII estándar que contenga las instrucciones, guardarlo, y entonces hacerlo ejecutable con el comando chmod +x fichero. Para ejecutarlo, teclee su nombre.

Aviso: el editor del sistema se llama vi, y es un hecho probado que la mayor parte de los nuevos usuarios lo encuentran muy difícil de usar. No voy a explicar cómo usarlo, porque no me gusta y no lo uso. Vea el manual "Linux: Instalación y Primeros Pasos" de Matt Welsh (aunque sería mejor utilizar otro editor tal como joe o emacs para X). Baste decir aquí unos comandos muy básicos:

Escribir scripts bajo bash es una materia tan extensa que requeriría un libro para abarcarla toda, y no voy a profundizar más allá en este tema. Sólo daré un ejemplo de script, del cual se pueden extraer las reglas básicas:

#!/bin/sh
# ejemplo.sh
# Soy un comentario
# no cambie la primera linea: debe estar ahi
echo "Este sistema es: `uname -a`" # usa la salida del comando
echo "Me llamo $0" # variables intrinsecas
echo "Usted me dio $# parametros: "$*
echo "El primer parametro es: "$1
echo -n "¿Como se llama? " ; read su_nombre
echo fijese en la diferencia: "Hola, $su_nombre" # entrecomillando con "
echo fijese en la diferencia: 'Hola, $su_nombre' # entrecomillando con '
DIRS=0 ; FILES=0
for fichero in `ls .` ; do
  if [ -d ${fichero} ] ; then # si el fichero esta en el directorio
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  else if [ -f ${fichero} ] ; then
   FILES=`expr $FILES + 1`
  fi
  case ${fichero} in
    gif|*jpg) echo "${fichero}: fichero grafico" ;;
    *.txt|*.tex) echo "${fichero}: fichero de texto" ;;
    *.c|*.f|*.for) echo "${fichero}: fichero de codigo fuente" ;;
    *) echo "${fichero}: fichero generico" ;;
  esac
done
echo "Hay ${DIRS} directorios y ${FILES} ficheros"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # Sacar el codigo del ultimo comando
  echo "ZxY--!!!WKW no encontrado"
fi
echo "ya es suficiente... Para mas informacion teclee 'man bash'." 

7.2 Sus programas en C

Bajo Unix, el lenguaje del sistema es C, le guste o no. Pero otros lenguajes como FORTRAN, Pascal, Lisp, Basic, Perl, awk... también están disponibles.

Suponiendo que usted sepa C, hay un par de guías para aquellos que han utilizado Turbo C++ o uno de sus hermanos bajo DOS. El compilador de C se denomina gcc y carece de todas las florituras que normalmente acompañan a sus análogos bajo DOS: no tiene IDE, ni ayuda en línea, ni debugger integrado, etc... Es sólo un rústico compilador de línea de comandos, muy potente y eficiente. Para compilar el típico programa hello.c esto es lo que debe teclear:

$ gcc hello.c

lo que creará un fichero ejecutable llamado a.out. Para cambiar el nombre del ejecutable a otro nombre:

$ gcc -o hola hello.c

Para enlazar una librería al programa, añada la opción -lnombre_de_librería. Por ejemplo, para enlazar la librería math:

$ gcc -o mathprog mathprog.c -lm

(-lnombre_libreria fuerza a gcc a enlazar la librería /usr/lib/libnombre_librería.a; por lo tanto -lm enlaza /usr/lib/libm.a).

Bien. Pero cuando su programa está compuesto por varios ficheros de código fuente, necesitará usar la utilidad make. Supongamos que ha escrito un evaluador de expresiones: su código fuente se denomina parser.c e tiene un #include de dos ficheros en su cabecera: parser.h y xy.h. Entonces, desea utilizar las rutinas de parser.c en otro programa, calc.c, que hace un #include de parser.h. ¡Vaya lío! ¿Cómo se puede compilar calc.c?

Debe escribir un fichero llamado makefile, el cual muestra al compilador las dependencias entre los ficheros de código fuente y los ficheros de código objeto. En nuestro ejemplo:

# Este es el makefile, utilizado para compilar calc.c
# ¡Pulse la tecla <TAB> en las posiciones marcadas!

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# calc depende de dos ficheros de codigo objeto: calc.o and parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o depende de dos ficheros de codigo fuente

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o depende de tres ficheros de codigo fuente

# fin de makefile.

Guarde esto como makefile y teclee

$ make

para compilar su programa; alternativamente, guárdelo como calc.mak y teclee

$ make -f calc.mak

Y, por supuesto, LPM.

Puede pedir ayuda acerca de las funciones de C, que se encuentra en las páginas man, sección 3; por ejemplo:

$ man 3 printf

Hay muchas librerías disponibles por ahí; entre las primeras que deseará usar están las ncurses, para manejar efectos en modo de texto, y svgalib, para hacer gráficos. Si se siente suficientemente valiente para atacar la programación de las X, consiga XForms ( bloch.phys.uwm.edu/pub/xforms) y/o MGUI ( http://www.volftp.vol.it/IT/IT/ITALIANI/MORELLO/index.htm), dos fantásticas librerías que hacen de la programación bajo X algo realmente fácil. Más aún, si no puede vivir sin un IDE al estilo Borland, consiga el paquete xwpe de ftp://sunsite.unc.edu/pub/Linux/apps/editors/. Posiblemente sea de su agrado.


Anterior Siguiente Indice