Entrada de teclado y aritmética

Inicio |

Anterior | Contenido | Siguiente

Hasta ahora, nuestros scripts no han sido interactivos. Es decir, no han aceptado ninguna entrada del usuario. En esta lección, veremos cómo nuestros scripts pueden hacer preguntas, y obtener y utilizar respuestas.

leer

Para obtener la entrada del teclado, utilizamos el comando read. El comando read toma la entrada del teclado y la asigna a una variable. ¡Este es un ejemplo:¡

#!/bin/bashecho -n «Enter some text >read textecho «You entered: $text»

Como podemos ver, mostramos un prompt en la línea 3. Observe que «-n«dado al comando echo hace que mantenga el cursor en la misma línea; es decir, No se produce un salto de línea al final del mensaje.

A continuación, invocamos el comando read con «text» como argumento. Lo que hace es esperar a que el usuario escriba algo seguido de la tecla Enter y luego asignar lo que se escribió a la variable text.

Aquí está el script en acción:

$ read_demo.bashIngresa algún texto >this is some textHas entrado: this is some text

Si no le damos al comando read el nombre de avariable para asignar su entrada, utilizará la variable de entornoREPLY.

El comando read tiene varias opciones en la línea de comandos.Las tres más interesantes son -p-t y-s.

La opción -p nos permite especificar un prompt para preceder la entrada del usuario. Esto ahorra el paso extra de usar un eco para preguntar al usuario. ¡Aquí está el ejemplo anterior reescrito para usar la opción -p:

#!/bin/bashread -p «Introduce algún texto > » textecho «Has introducido: $text»

La opción -t seguida de un número de segundos proporciona un tiempo de espera automático para el comando read. Esto significa que el comando read se dará por vencido después del número de segundos especificado si no se ha recibido ninguna respuesta del usuario.¡Esta opción podría utilizarse en el caso de un script que deba continuar (quizás recurriendo a una respuesta por defecto) incluso si el usuario no responde a las preguntas.Aquí está la opción -t en acción:

#!/bin/bashecho -n «¡Date prisa y escribe algo! >if read -t 3 response; thenecho «¡Genial, has llegado a tiempo!»elseecho «¡Lo siento, eres demasiado lento!»fi

La opción -s hace que no se muestre lo que escribe el usuario.Esto es útil cuando le pedimos que escriba una contraseña u otra información confidencial.

Aritmética

Dado que estamos trabajando en un ordenador, es natural esperar que pueda realizar alguna aritmética simple. El shell proporciona características para la aritmética de números enteros.

¿Qué es un número entero? Eso significa números enteros como 1, 2, 458, -2859. No significa números fraccionarios como 0.5, .333, o 3.1415. Para tratar con números fraccionarios, hay un programa separado llamado bc que proporciona un lenguaje de cálculo de precisión arbitraria. Se puede utilizar en scripts de shell, pero está fuera del alcance de este tutorial.

Digamos que queremos utilizar la línea de comandos como una calculadora primitiva. Podemos hacerlo así:

$ echo $((2+2))

Cuando rodeamos una expresión aritmética con el doble paréntesis, la shell realizará la expansión aritmética.

Nota que los espacios en blanco se ignoran:

$ echo $((2+2))echo $(( 2+2 ))echo $(( 2 + 2 ))4

El shell puede realizar una variedad de operaciones aritméticas comunes (y no tan comunes). ¡He aquí un ejemplo:

#!/bin/bashprimer_num=0segundo_num=0read -p «Introduce el primer número –> » primer_numread -p «Introduce el segundo número -> » segundo_numecho «primer número + segundo número = $((primer_num + segundo_num))»echo «primer número – segundo número = $((primer_num – segundo_num))»echo «primer número * segundo número = $((primer_num * segundo_num))»echo «primer número / segundo número = $((primer_num / segundo_num))»echo «primer número % segundo número = $((primer_num % segundo_num))»echo «primer número elevado a la»echo «potencia del segundo número = $((primer_num ** segundo_num))»

Nota cómo el encabezamiento «$» no es necesario para referenciar variablesdentro de la expresión aritmética como «first_num +second_num«.

Prueba este programa y observa cómo maneja la división (recuerda que se trata de una división entera) y cómo maneja los números grandes. Los números que se hacen demasiado grandes se desbordan como el cuentakilómetros de un coche cuando supera el número de kilómetrospara el que fue diseñado. Comienza de nuevo, pero primero pasa por todos los números negativos debido a la forma en que los enteros se representan en la memoria. La división por cero (que es matemáticamente inválida) provoca un error.

Las cuatro primeras operaciones, suma, resta, multiplicación y división, son fácilmente reconocibles, pero la quinta puede resultar desconocida. El símbolo «%» representa el resto (también conocido como módulo). Esta operación realiza la división pero en lugar de devolver un cociente como la división, devuelve el resto. Aunque esto no parezca muy útil, en realidad proporciona una gran utilidad a la hora de escribir programas. Por ejemplo, cuando la operación resto devuelve cero, indica que el primer número es un múltiplo exacto del segundo. ¡Esto puede ser muy útil:

#!/bin/bashnumber=0read -p «Introduce un número > » númeroecho «El número es $número»if ;thenecho «El número es par»elseecho «El número es impar»fi

O, en este programa que formatea un número arbitrario de segundos en horas y minutos:

#!/bin/bashseconds=0read -p «Enter number of seconds > » secondshours=$((seconds / 3600))seconds=$((seconds % 3600))minutes=$((seconds / 60))seconds=$((seconds % 60))echo «$horas hora(s) $minutos minuto(s) $segundos segundo(s)»
Arriba | Anterior | Contenido | Siguiente

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *