-->

Comparación de Cadenas/Números y Entrada por Teclado

Objetivo:

Aprender a comparar cadenas de texto y valores numéricos con el comando test dentro de condicionales if, y utilizar el comando read para solicitar datos por teclado y almacenarlos en variables dentro de un script.

Escenario:

  • Herramientas: Terminal de Linux, editor vi, un directorio scripts ya configurado en el PATH.
  • Conceptos clave: comparación de cadenas (=, !=), comparación numérica (-eq, -gt, -ne), condicional if/then/else/fi aplicada a cadenas y números, comillas para cadenas con espacios, comando read, opción -p de read, lectura de varias variables en una sola instrucción.

Instrucciones:

Fase 1: Comparación de cadenas con test

  • Comprueba si dos palabras distintas son iguales:
  • test hola = adios
    echo $?
  • Comprueba ahora si la misma palabra es igual a sí misma:
  • test hola = hola
    echo $?
  • Comprueba la comparación de desigualdad:
  • test hola != hola
    echo $?

Fase 2: Condicional if con comparación de cadenas

  • Escribe la siguiente condicional directamente en la terminal, prestando atención a los espacios dentro de los corchetes:
  • if [ hola = hola ]; then echo "son iguales"; fi
  • Si aparece un error de sintaxis, revisa que haya un espacio entre la palabra y cada corchete.

Fase 3: Comparación de cadenas con espacios

  • Repite la comparación anterior, ahora con una cadena que contenga varias palabras, encerrándola entre comillas para evitar problemas con los espacios:
  • if [ "hola a todos" = "hola a todos" ]; then echo "son iguales"; fi

Fase 4: Comparación de valores numéricos con test

  • Comprueba si dos números son iguales:
  • test 10 -eq 10
    echo $?
  • Comprueba si un número es mayor que otro:
  • test 100 -gt 50
    echo $?
  • Repite la comprobación invirtiendo los valores para ver el resultado contrario:
  • test 100 -gt 500
    echo $?

Fase 5: Condicional numérica con variables

  • Crea dos variables numéricas:
  • v1=10
    v2=20
  • Escribe una condicional que compare ambas variables:
  • if [ $v1 -gt $v2 ]
    then
        echo "v1 es mayor que v2"
    else
        echo "v1 es menor que v2"
    fi

Fase 6: Comprobación de desigualdad numérica

  • Comprueba si dos números son distintos, independientemente de cuál sea mayor:
  • test 100 -ne 50
    echo $?
  • Repite la comprobación invirtiendo el orden de los valores y observa que el resultado no cambia.

Fase 7: Primer uso del comando read

  • Solicita un valor por teclado y guárdalo en una variable:
  • read v1
  • Introduce un valor cualquiera y pulsa Intro.
  • Consulta el valor almacenado:
  • echo $v1

Fase 8: Creación del script entrada.sh con read

  • Crea un nuevo script:
  • vi entrada.sh
  • Escribe el siguiente contenido:
  • #!/bin/bash
    echo "introduce tu nombre: "
    read nombre
    echo "tu nombre es: $nombre"
  • Guarda con :x.

Fase 9: Permisos y ejecución

  • Da permisos de ejecución y ejecuta el script:
  • chmod +x entrada.sh
    entrada.sh
  • Introduce tu nombre cuando se te solicite y comprueba el mensaje final.

Fase 10: Uso de read -p

  • Edita el script y añade una nueva pregunta utilizando la opción -p, que permite mostrar el mensaje y leer el valor en una sola instrucción:
  • read -p "introduce tu apellido: " apellido
    echo "tu primer apellido es: $apellido"
  • Guarda y ejecuta el script de nuevo, comprobando ambas preguntas.

Fase 11: Lectura de varias variables a la vez

  • Desde la terminal, solicita tres valores en una sola instrucción:
  • read v1 v2 v3
  • Introduce tres valores separados por espacios, por ejemplo 10 20 30, y pulsa Intro.
  • Consulta cada una de las variables por separado:
  • echo $v1
    echo $v2
    echo $v3

Fase 12: Script que solicita varios datos en una línea

  • Edita entrada.sh y añade una última pregunta que solicite tres valores a la vez:
  • read -p "coloca tu nombre, apellido y teléfono: " nombre apellido telefono
    echo "te llamas: $nombre $apellido, teléfono: $telefono"
  • Guarda y ejecuta el script completo, introduciendo los tres valores separados por espacios cuando se solicite.
  • Consulta el contenido completo del script sin abrir el editor:
  • cat entrada.sh

Preguntas de reflexión:

  1. ¿Qué diferencia hay entre = y != al comparar cadenas con test?
  2. ¿Por qué es importante dejar un espacio entre los corchetes y la condición dentro de un if?
  3. ¿Por qué conviene encerrar entre comillas una cadena que contiene varias palabras al compararla?
  4. ¿Qué diferencia hay entre -eq y -gt al comparar números?
  5. ¿Qué comprueba exactamente la opción -ne y en qué se diferencia de -gt?
  6. ¿Qué hace el comando read en su forma más básica?
  7. ¿Qué ventaja aporta la opción -p de read frente a escribir el mensaje con echo en una línea aparte?
  8. ¿Qué ocurre si se ejecuta read v1 v2 v3 y se introducen tres valores separados por espacios?
  9. ¿Qué error se puede cometer fácilmente al construir un script con varias variables leídas por read -p, según lo visto en el vídeo?
  10. ¿Por qué es útil el comando read dentro de un script en lugar de definir siempre los valores de las variables directamente en el código?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué diferencia hay entre = y !=?

= comprueba si dos cadenas son iguales, devolviendo verdadero cuando coinciden. != comprueba justo lo contrario, devolviendo verdadero cuando las cadenas son distintas.


2. ¿Por qué es importante el espacio junto a los corchetes?

Porque en la sintaxis de test con corchetes, estos se tratan como un comando independiente que necesita sus argumentos separados por espacios; si el corchete queda pegado a una palabra, la shell no lo interpreta correctamente y genera un error de sintaxis.


3. ¿Por qué encerrar entre comillas una cadena con espacios?

Porque sin comillas, la shell interpretaría cada palabra separada por espacios como un argumento distinto, rompiendo la comparación. Las comillas agrupan todo el texto como un único valor.


4. ¿Qué diferencia hay entre -eq y -gt?

-eq comprueba si dos números son exactamente iguales, mientras que -gt comprueba si el primer número es mayor que el segundo.


5. ¿Qué comprueba -ne?

Comprueba si dos números son distintos entre sí, sin importar cuál de los dos es mayor. Se diferencia de -gt en que este último sí depende del orden y del valor relativo de ambos números.


6. ¿Qué hace read en su forma básica?

Espera a que el usuario introduzca un valor por teclado y, al pulsar Intro, lo almacena en la variable indicada como argumento.


7. ¿Qué ventaja aporta -p?

Permite mostrar el mensaje que solicita el dato y leer la respuesta en una sola instrucción, evitando tener que escribir una línea con echo seguida de otra línea con read.


8. ¿Qué ocurre con read v1 v2 v3 y tres valores separados por espacios?

Cada valor introducido se asigna, en el mismo orden, a cada una de las variables indicadas: el primer valor a v1, el segundo a v2 y el tercero a v3.


9. ¿Qué error se puede cometer fácilmente con varias variables en read -p?

Escribir mal el nombre de alguna de las variables al referenciarla después con $, de modo que el mensaje final no muestre el valor introducido para esa variable, aunque el dato sí se haya leído correctamente.


10. ¿Por qué es útil read dentro de un script?

Porque permite que el script sea interactivo y reciba datos distintos cada vez que se ejecuta, en lugar de trabajar siempre con valores fijos escritos directamente en el código.


Ficha de Laboratorio: Comparación de Cadenas/Números y Entrada por Teclado

Instrucciones de entrega:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Compara dos cadenas iguales, dos distintas, y prueba la comparación de desigualdad con test.
    Escribe los comandos utilizados:

    Copia aquí los códigos de salida obtenidos en cada caso:
  2. Escribe una condicional if que compare dos cadenas con espacios, usando comillas.
    Copia aquí la instrucción completa utilizada:

    Copia aquí el mensaje obtenido:
  3. Compara dos números con -eq, -gt y -ne usando test.
    Escribe los comandos utilizados:

    Copia aquí los resultados obtenidos en cada caso:
  4. Crea dos variables numéricas y escribe una condicional if/else que compare cuál es mayor.
    Copia aquí la condicional completa:

    Copia aquí el mensaje obtenido:
  5. Crea el script entrada.sh que solicite tu nombre con read y tu apellido con read -p.
    Copia aquí el contenido completo del script en esta versión:

    Copia aquí la salida obtenida al ejecutarlo:
  6. Amplía el script para que pida nombre, apellido y teléfono en una sola pregunta con read -p y tres variables.
    Copia aquí la línea utilizada para pedir los tres valores:

    Copia aquí la salida final obtenida al ejecutar el script completo: