Página siguiente Página anterior Índice general

11. Un poco de programación

11.1 Rutinas del Intérprete de Comandos: Ficheros .BAT con esteroides

Si ha utilizado ficheros .BAT para crear atajos de largas líneas de orden (yo solía 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 .bash_profile. Pero si sus ficheros .BAT son más complicados, le encantará el lenguaje de Script (guionado) que el shell pone a su disposición: es tan potente como el viejo 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 una rutina (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 la orden 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; por favor, consulte el libro de Matt Welsh o busque un cursillo en la red. Suficiente decir por ahora que:

joe es un buen editor para novatos: llámelo tecleando jstar y tendrá los mismos atajos de teclas que en el editor de DOSWin. jed en modo WordStar o IDE es incluso mejor. Por favor, consulte la sección Dónde encontrar aplicaciones para ver dónde conseguir estos editores.

Escribir rutinas 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 de la orden
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 orden
  echo "ZxY--!!!WKW no encontrado"
fi
echo "ya es suficiente... Para mas informacion teclee 'man bash'." 

11.2 Sus programas en C

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

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 órdenes, muy potente y eficiente. Esto es lo que debe teclear para compilar el típico programa hello.c:

$ 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. Guárdelo como calc.mak de forma alternativa 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 (efectos en modo texto) y svgalib, (gráficos para consola). Si se siente suficientemente valiente para atacar la programación bajo X (no es tan difícil), hay muchas bibliotecas que harán mucho más fácil escribir programas para X11. Eche un vistazo a http://www.xnet.com/~blatura/linapp6.html, teniendo en cuenta el hecho de que Gtk se está volviendo un estándar.

Muchos editores pueden actuar como IDE. emacs y jed, por ejemplo, proporcionan marcado de sintaxis, indentación automática, y cosas similares. De manera alternativa, consiga el paquete rhide de ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/. Es un clon del IDE de Borland, y cabe la posibilidad de que le guste.


Página siguiente Página anterior Índice general