viernes, 13 de enero de 2017

Primera etapa: Documento minimalista

Lo primero que necesitamos saber es el formato de un documento HTML bien construido. Tiene esta pinta:

<HTML>
    <HEAD>
        <TITLE>Page Title</TITLE>
    </HEAD>
    <BODY>
        Page body.
    </BODY>
</HTML>

Si introducimos esto en nuestro editor de texto y guardamos el archivo como foo.html, podemos usar la siguiente URL en Firefox para ver el archivo:

file:///home/username/foo.html

La primera etapa de nuestro programa será capaz de generar este archivo HTML en la salida estándar. Podemos escribir un programa que haga esto muy fácilmente. Arranquemos nuestro editor de texto y creemos un nuevo archivo llamado ~/bin/sys_info_page:

[me@linuxbox ~]$ vim ~/bin/sys_info_page

e introduzcamos el siguiente programa:

#!/bin/bash



# Program to output a system information page



echo "<HTML>"
echo "    <HEAD>"
echo "          <TITLE>Page Title</TITLE>"
echo "    </HEAD>"
echo "    <BODY>"
echo "          Page body."
echo "    </BODY>"
echo "</HTML>"

Nuestro primer acercamiento a este problema contiene un shebang, un comentario (siempre es una buena idea) y una secuencia de comandos echo, uno por cada línea de salida. Tras guardar el archivo, lo haremos ejecutable y trataremos de ejecutarlo:

[me@linuxbox ~]$ chmod 755 ~/bin/sys_info_page
[me@linuxbox ~]$ sys_info_page

Cuando el programa se ejecute, deberíamos ver el texto del documento HTML mostrado en la pantalla, ya que los comandos echo del script envían su salida a la salida estándar. Ejecutaremos el programa de nuevo y redirigiremos la salida del programa al archivo sys_info_page.html, con lo que podemos ver el resultado con un navegador web:

[me@linuxbox ~]$ sys_info_page > sys_info_page.html
[me@linuxbox ~]$ firefox sys_info_page.html

Hasta aquí todo bien.

Cuando escribimos programas, siempre es una buena idea esforzarse en que sean simples y claros. El mantenimiento es más fácil cuando el programa es fácil de leer y comprender, no hace falta mencionar que podemos hacer que el programa sea más fácil de realizar reduciendo la cantidad de escritura. Nuestra versión actual del programa funciona bien, pero podría ser más simple. Podríamos en realidad combinar todos los comandos echo en uno, lo que ciertamente haría más fácil añadir más líneas a la salida del programa. Así que, hagamos ese cambio en nuestro programa:

#!/bin/bash

# Program to output a system information page

echo "<HTML>
     <HEAD>
           <TITLE>Page Title</TITLE>
     </HEAD>
     <BODY>
           Page body.
     </BODY>
</HTML>"

Una cadena entre comillas puede incluir nuevas líneas, y por lo tanto contener múltiples líneas de texto. El shell seguirá leyendo el texto hasta que se encuentre las comillas de cierre. Funciona de esta forma también en la línea de comandos:

[me@linuxbox ~]$ echo "<HTML>
>         <HEAD>
>                 <TITLE>Page Title</TITLE>
>         </HEAD>
>         <BODY>
>                 Page body.
>         </BODY>
> </HTML>"

El carácter ">" que va delante es el prompt de shell contenido en la variable de shell PS2. Aparece siempre que escribamos una sentencia multilínea en el shell. Esta función es un poco oscura ahora mismo, pero más adelante, cuando veamos las sentencias de programación multilínea, se transformará en algo más útil.

No hay comentarios:

Publicar un comentario