Mostrando las entradas con la etiqueta Introducción a la programación. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Introducción a la programación. Mostrar todas las entradas

lunes, 25 de noviembre de 2019

Cargar un script desde otro script en BASH

                               (P) Hugo Napoli, 2019                              



Imagen: https://github.com/odb/official-bash-logo




¿Es posible cargar un script desde otro script, en el lenguaje de programación BASH?

Pensando en el resto de los lenguajes para hacer programas, esto no solamente es posible, sino que es una técnica muy comúnmente utilizada.

BASH, presenta varios caminos (o técnicas) para dicho cometido, siendo de las más usuales, las que siguen.



I) bash "$0"


Acción: carga el mismo archivo que ya está siendo ejecutado.

Se utiliza -por ejemplo- cuando un script llegó a su fin, y se quiere preguntar si se desea comenzar otra vez. Obsérvese que en el siguiente programa, la instrucción ' bash "$0" ' es utilizada 2 veces, por 2 razones diferentes.

#!/bin/bash
clear
read -p "Ingresa el primer número a sumar: " num1
read -p "Ingresa el segundo número a sumar: " num2
resultado=$((num1+num2))
echo "El resultado es:" $resultado
echo ""
read  -p "¿Quieres hacer más sumas (sí/no)?" otra_vez
if [[ $otra_vez == "no" ]];then
     echo "Gracias por utilizar este programa. Ten un buen día :)"
     sleep 5
     exit
elif [[ $otra_vez == "sí" ]];then
     bash "$0"
else
     echo "No comprendí lo que escribiste. La próxima vez, escribe 'no' para terminar."
     sleep 5
     bash "$0"
fi 

Este es un método altamente efectivo y confiable.


II) bash "Otro script.sh"


Acción: carga el script llamado "Otro script.sh", el cual se encuentra en el mismo directorio que el programa que contiene esta instrucción.

Si el script que estamos creando está en la misma carpeta que los demás scripts que queremos cargar, solo basta con poner una línea de este tipo para lograr el objetivo.

Dependiendo de la terminal en donde estemos ejecutando los scripts y del sistema que esté siendo utilizado (variantes de Linux, MACOS, etc.), esto podría no funcionar, y devolver errores como "No se encontró el archivo", o "No existe el archivo 'Otro script.sh' ".
Puede funcionar en un ordenador, y en otro, no (aunque ambos sean capaces de interpretar código BASH).


III) bash "CAMINO Y NOMBRE DEL SCRIPT"


Este es un método parecido al anterior, salvo que si el script que queremos cargar no está en el mismo directorio que nuestro script, debemos indicárselo a BASH:

bash "/home/estudiante/Documentos/programas/menú.sh"

Esta línea, cargará el script llamado "menú.sh", el cual se encuentra dentro de la carpeta "programas", en el directorio "Documentos" del usuario "estudiante".

Este también es un método altamente efectivo y confiable, salvo para cuando se mueven archivos de su lugar original. En este caso, hay que cambiar obligatoriamente "/home/estudiante/Documentos/programas/" por lo que corresponda.


IV) Utilizando el comando "dirname"


"$0" es la forma de BASH de identificar inequívocamente al script en ejecución.

Si con "$0" ejecuta a dicho script sin margen de error, es lógico pensar en que podríamos utilizar "$0" en otro procedimiento... ¿no es así?

¿Qué tal si guardamos en una variable el "camino" de nuestro script, para poder reutilizarlo cada vez que sea necesario?

¡Hagámoslo y probemos!

camino=$(dirname "$0")

Ahora, solo basta con escribir siempre "$camino" y a continuación, adjuntar el nombre del archivo que queremos cargar, separando ambos elementos (la variable y el nombre del script) por una barra de dividir:

bash "$camino/Mi archivo.sh"

Este es otro método altamente efectivo y confiable más, que funciona aunque el script sea movido de su lugar o copiado en otro ordenador.


domingo, 27 de noviembre de 2016

Introducción a la programación secuencial con Commodore Basic 2.0

                    (P) Hugo Napoli, 2016                   


Introducción a la programación secuencial con Commodore 64 Basic.

1. Un poco de historia. Breve introducción.

El Commodore 64 Basic, o "Commodore 64 Basic V2", fue diseñado por Jack Tramiel (el creador de la computadora conocida como "Commodore 64") y Bill Gates, presidente de Microsoft (creador de Windows).
Lucía exactamente así:

Imagen: Wikipedia.

En esa época, se pensaba "a lo Apple" (en realidad, Apple copió esta forma de fabricar): se diseñaba una computadora, y luego, se diseñaba un Sistema Operativo específicamente para ella.

Los ordenadores eran como una pieza de "firmware". La empresa Apple, ha tomado ese ejemplo y lo aplicó en sus inicios (4a. generación de ordenadores), y así sigue haciéndolo hasta el día de hoy, más de 30 años más tarde.

Decir que las computadoras de la 3a. generación (como lo es la maravillosa "Commodore 64", por ejemplo) y que las de Apple de hoy en día "son como una pieza de firmware", significa que para ese hardware, no hay mejor Sistema Operativo que el que lo hace útil, y que, a su vez, para ese Sistema Operativo, no hay una mejor pieza de hardware que la que lo contiene.

En pocas palabras:
- la Commodore 64 es la mejor computadora para el Sistema "Commodore 64 Basic", y
- el Sistema "Commodore 64 Basic" es el mejor para la computadora Commodore 64.

Así lucía una Commodore 64, la cual traía el teclado integrado (la placa madre o motherboard está debajo del mismo, como sucede con los ordenadores portátiles, "netbooks", "laptops" o "notebooks").
Imagen: Wikipedia.
 
Tanto esta computadora como este Sistema, ya son obsoletos; es decir, no se fabrican más, y ya casi no se utilizan.
Entonces, ¿por qué tu profesor insiste con esto?
¿No sería mejor aprender a programar con lenguajes de programación modernos como Java o Python?

La respuesta es la siguiente:
si vas a programar, primero debes aprender a pensar como un programador, y ese tipo de razonamiento, perfectamente te lo enseñará la experiencia con el Commodore 64 Basic y una obsoleta pero divertida y funcional computadora "Commodore 64".
Además, este tipo de Basic (hay muchos otros) es mucho más fácil de comprender que un lenguaje de programación moderno.

Algo importante que debes saber, es que el Commodore 64 Basic sigue funcionando hoy en día en sistemas Windows, MAC, y GNU-Linux... ¡incluso hay versiones para smartphones!

¿Cómo puede funcionar un Sistema Operativo dentro de otro, entonces?
Pues bien, muchos programadores se han reunido y han trabajado muy duramente para conseguir que el Basic de la Commodore 64 pueda ser instalado, como si fuese un programa común, en un Sistema Operativo moderno. Es decir, que así como instalas un navegador como Mozilla Firefox sin problemas, también puede instalar este Basic en simples pasos. Luego te diré desde dónde descargar este maravilloso Sistema.

Para que todo esto tenga más cercanía con la realidad, mírame a los 14 años utilizando una Commodore 64:


Lo que se ve en la imagen, es lo siguiente:
1 - el ordenador de 8 bits, "Commodore 64" (no utilizaba ratón o "mouse", solamente teclado, el cual estaba integrado en el mismo ordenador y no poseía tildes ni letra eñe),




2 - la disquetera o "diskettera" (cumplía la función de una lecto-grabadora de CD o DVD),



3 - la casetera o "cassette unit" (¡gracias a ella, se podía leer y guardar información en un simple y económico casete comprado en el quiosco de la esquina!),

4 - un televisor "blanco y negro" (no mostraba imágenes a color, sino en escalas de grises) de 14 pulgadas, por donde salía la imagen de la Commodore 64 (el televisor cumplía la función de un monitor de hoy en día, brindando el sonido además),


5 - Un transformador de 220 a 110 Voltios, porque la Commodore 64 casi siempre "venía de Europa", (o de países en donde se utilizaban 110 V en lugar de 220 V como en nuestro país, entonces, antes de "enchufarla a la pared", había que reducir su voltaje a la mitad... sino... ¡PÚM! explotaba literalmente el transformador interno de la Commodore 64, y ¡adiós diversión!),

6 - Una palanca o "joystick", que era como un eje que respondía a los movimientos de la mano como si se tratara de un gamepad (izquierda, derecha, arriba, abajo y botón de acción (con el se podía disparar, saltar o abrir una puerta en un juego, dependiendo del contexto),
7 - 2 filas de casetes (se ven 16 en total, los cuales eran cada uno de 90 minutos, siendo que los programas y juegos ocupaban unos 3 o 4 minutos promedio en cada casete... en esos 16 casetes había espacio para... ¡360 programas!),

8 - el "doble casetero" (o doble casetera): en el casetero de la izquierda, se colocaba el casete que contenía información. En el casetero de la derecha, se colocaba el casete vacío o "virgen". Se encendía el doble casetero y la toda la información contenida en el casete de la izquierda, se copiaba en unos 30 minutos al casete de la derecha, pudiendo así duplicarse la información para "regalarle un lote de juegos a un amigo", etc.),
9 - el autor de este artículo, (¿tu profesor?), Hugo Napoli, a los 14 años de edad (ver graciosa fotografía en el nivel superior).
¿Cómo lucía todo esto?




2. Breve introducción a la lógica de la programación.

Vamos a pensar como piensan los programadores.
Antes de comenzar a trabajar, ellos piensan fragmentos de seudo código, los cuales luego transforman a código.
El seudo código (o pseudo código) está compuesto por ideas que son una mezcla de lo que entiende un ser humano entreverado con código de lenguaje de programación.

Para crear líneas de seudo código, tenemos que pensar en sencillas frases con verbos conjugados en infinitivo, tales como ("ir al centro", "bajar del ómnibus", "jugar al fútbol", "pagar el alquiler", etc.), y numerarlas en el orden en el cual queremos que sean ejecutadas por una computadora.

Veamos cómo funciona esto.

Puedes escribir tantas líneas de código como quieras, siempre que las numeres previamente.

Por ejemplo, si quieres que la computadora te salude, luego te prepare el desayuno, y luego se apague, escribirás eso así:

1 Saludar al usuario
2 Preparar el desayuno
3 Apagarme

El Commodore 64 Basic, "mira" el número que está a la izquierda, y entonces "sabe" qué tiene que hacer primero, y qué tiene que hacer después.
Observa el siguiente ejemplo y piensa en dónde está el error:

1 Saludar al usuario
3 Preparar el desayuno
2 Apagarme

Ahora bien... ¿qué tal si quisiéramos que antes de apagarse, la máquina nos preguntara si necesitamos algo más? 
Según el esquema que venimos viendo, esa línea debería introducirse exactamente antes del apagado, pero inmediatamente después de preparar el desayuno... Pero el Commodore 64 Basic necesita números enteros, por lo tanto, lo siguiente, no se puede realizar:

1   Saludar al usuario
2   Preparar el desayuno
2.5 Preguntar si se necesita algo más

3   Apagarme

Mientras el número de la siguiente línea sea mayor que el anterior y no se pase del 65535, no importa cuál utilices.
Te recomiendo que avances de 10 en 10, porque si tienes que agregar líneas de por medio, será mucho más fácil que si avanzas de 1 en 1:

10 Saludar al usuario
20 Preparar el desayuno
25 Preguntar si se necesita algo más

30 Apagarme

El Commodore 64 Basic te permite escribir hasta unas 65000 líneas (que no equivalen precisamente a renglones).
Cada línea puede contener 1 o 2 renglones de código, e incluso hay maneras de extender esta cantidad de información hasta 3 e incluso hasta 4 renglones en situaciones extremas.
Si tienes la posibilidad de escribir hasta 65535 líneas de código, y cada una de ellas es de 2 renglones (promedio), significa que puedes hacer un programa que posea hasta 130000 renglones de código... ¡un verdadero disparate!



3. Introducción a la programación en Commodore 64 Basic

Hacer que el ordenador nos prepare el desayuno y se apague solo, son tareas bastante complejas. Comenzaremos por hacerlo saludar, ¿qué les parece?

3-a) INSTRUCCIONES PRINT E INPUT.

Para que la máquina le muestre un mensaje en la pantalla al usuario, tal como "Ingrese su contraseña para continuar", o "Pulse la tecla S para salir del programa", se utiliza el comando PRINT.

Sus sintaxis es la siguiente:

caso 1: PRINT "mensaje"
caso 2: PRINT variable

El caso 1 es para mostrar mensajes que contengan texto.
El caso 2, es para mostrar contenidos almacenados en una variable (ya veremos qué es eso, no te preocupes).

Utilizaremos, entonces, el primero de los dos casos. Observa cómo se realiza esto:

10 PRINT "HOLA. COMO ESTAS?"

Acostúmbrate: no hay signos de "¿" ni "¡", ni hay "á", "é", "í", "ó", "ú", ni "ñ" (por ahora).

Si ejecutamos este programa de una sola línea, lo que hará la computadora será mostrar el mensaje HOLA. COMO ESTAS?, y a continuación, terminar el programa, puesto que ya no hay más líneas de código para procesar.

Existe otra instrucción o sentencia, llamada INPUT, que sirve para hacerle preguntas al usuario, por ejemplo.
PRINT muestra un mensaje y da paso a la siguiente línea de código inmediatamente.
INPUT puede mostrar un mensaje o no, pero esperará hasta que el usuario responda para dar paso a la siguiente línea de código.

Sus sintaxis es la siguiente:

caso 1: INPUT "mensaje";variable
caso 2: INPUT variable

Si esperamos una respuesta alfanumérica (letras, palabras), utilizaremos cualquier letra seguida del signo de pesos, tal como "A$", "B$", "C$", etc.

Si esperamos una respuesta numérica (números, cifras), utilizaremos cualquier letra, tal como A, B, C, etc.

Como estamos esperando una respuesta de tipo alfanumérica, utilizaremos A$ en la instrucción INPUT.
Podemos cambiar la línea 10 por la siguiente, entonces:

10 INPUT "HOLA. COMO ESTAS"; A$

Si ejecutamos este programa de (aún) una sola línea, lo que hará la computadora será mostrar el mensaje HOLA. COMO ESTAS?, y a continuación, esperar a que el usuario responda. Su resuesta quedará guardada en la variable A$, y terminará el programa, puesto que ya no hay más líneas de código para procesar.

NOTA: INPUT genera automáticamente un signo de pregunta al final de la oración, de modo que no es necesario incluirlo.

Ahora bien, ¿para qué queremos preguntarle algo al usuario, luego guardar su respuesta en una variable, y luego terminar el programa?

Podemos combinar INPUT y PRINT de manera sorprendente. Observa.

10 INPUT "CUAL ES TU NOMBRE"; A$
20 PRINT "HOLA, "; A$

Al ejecutar este programa (que ya posee 2 líneas), sucederá lo siguiente:

la computadora le preguntará al usuario CUAL ES TU NOMBRE?, y en caso de que el usuario responda "MARIO", la máquina mostrará HOLA, MARIO.

¿Se va poniendo interesante, no?

3-a) OPERACIONES MATEMÁTICAS BÁSICAS.

Veamos cómo hacer cálculos con números.

 

Imágenes:
2a. Commodore 64 que aparece desde el principio del artículo: Wikipedia
Disquetera 1541: nielsthooft.com
Datassette C2N: webpersonal.uma.es
TV 14" B/N: freeicons.png.org
Transformador 220-110v: Amazon
Joystick Quicshot: Richardlagendijk.nl
Cassette: tapedeck.org  
Doble casetero Philips Moving Sound D-8098: ebay
Commodore 64 armada, con unidad 1541 a la izquierda y datassette C2N a la derecha: rcgrabbag.com 
Commodore 64 armada, con datassette C2N sobre la unidad 1541: nickm.com

ENTRADA EN CONSTRUCCIÓN