Tutoriales

Bash While y Hasta el ciclo explicado con ejemplos

Este es un artículo de seguimiento en el ciclo de bash que explica el artículo anterior en bucle. En este artículo, veremos dos bucles de bash más, a saber while y until Cinta.

los while El bucle se usa principalmente cuando necesita leer y procesar el contenido del archivo. Leer y escribir en un archivo son operaciones comunes al escribir scripts bash. Veremos cómo usar un. leer while Cinta.

Ya tenemos un artículo muy detallado sobre cómo escribir en un archivo usando operadores de redirección.

La funcionalidad del while Loop es similar a for Cinta. los for El bucle itera sobre una lista de elementos y ejecuta el bloque de código N varias veces. Aquí en while Loop evalúa la condición primero, y si la condición es verdadera, el bloque de código se ejecuta hasta que la condición se evalúa como falsa.

1. Mientras que el bucle

abajo esta el while Sintaxis de bucle. El ciclo comienza con el «tiempo» Palabra clave seguida de una condición para evaluar como verdadera. Entre do y done bloque es donde se colocarán sus códigos, repetidos N veces.

while [[ condition ]]
do
  Command 1
  Command 2
  ....
  Command 3
done

EJEMPLO 1 – Evaluar e iterar

Eche un vistazo al siguiente ejemplo. Aquí creé una variable "NUM=5" y mi condición$NUM -ne 0), el bucle se ejecuta cuando la variable NUM no es cero.

$ NUM=5
while [[ $NUM -ne 0 ]]
do
  printf "Value of NUM = $NUM n"
  ((--NUM))
done
Evaluar e iterar

Deberías usar encimera para aumentar o disminuir los valores almacenados en las variables cuando presiona. trabaja while Cintas Si no, se repetirá y NUM siempre se establece en cinco. Aquí estoy bajando el valor de NUM en cada iteración ejecutando ((--NUM)), entonces si mi variable NUM se establece en cero, se sale del bucle.

((++NUM))  → Increment NUM variable by 1, similar to running NUM=$(( $NUM + 1 ))
((--NUM))  → Decrement NUM variable by 1, similar to running NUM=$(( $NUM - 1 ))

EJEMPLO 2 – Bucles infinitos

En un bucle infinito, su condición siempre se evaluará como verdadera y el bucle nunca saldrá.

Para crear bucles infinitos, puede usar el bash incorporado true Palabra clave. También use el "sleep" Comando al probar bucles infinitos que le dan control para detener el script; de lo contrario, su pantalla se inundará con una salida de desplazamiento rápido.

$ NUM=0
while true
do
  printf "Value of NUM = $NUM n"
  ((++NUM))
  sleep 2
done
Bucle infinito while
Bucle infinito while

EJEMPLO 3 – Separador de campo interno (IFS)

IFS es una variable de shell especial que determina cómo se tratan los límites de las palabras. De forma predeterminada, IFS se establece en espacios, tabulaciones y un carácter de nueva línea. Abra Terminal y ejecute los siguientes comandos:

$ var1="foo:bar foo bar"
$ for val in $var1
do
  echo $val
done 
IFS estándar
IFS estándar

Eche un vistazo a la salida. los for El bucle itera sobre una cadena y es IFS el que determina los límites de la palabra y considera los espacios como separadores de campo.

Ahora ejecute el siguiente código nuevamente. IFS está preparado para eso aquí Colon.

$ var1="foo:bar foo bar"
$ IFS=":"
$ for val in $var1
do
  echo $val
done
IFS personalizado
IFS personalizado

En el resultado anterior, puede ver que los dos puntos se utilizan como separador de campo personalizado como límite de palabra. Puede restablecer el IFS a su estado predeterminado utilizando el unset Mando.

$ unset IFS

EJEMPLO 4: lectura de un archivo con un bucle while

los while Se recomienda bucle cuando desee leer y procesar un archivo línea por línea.

Crea un nuevo archivo llamado test.txt utilizando el siguiente contenido. La línea 2 va seguida de una línea en blanco para mostrar el comportamiento al manejar líneas en blanco.

14:00 Brighton v Leicester
14:00 West Ham v Man Utd

16:30 Spurs v Chelsea

Usaremos eso read Comando que acepta la entrada de la redirección y la almacena en una variable junto con un operador de redirección de entrada donde el nombre del archivo se pasa al while Cinta. los read El comando usa el IFS estándar para establecer el punto de interrupción de la palabra.

$ while read line
do
  echo $line
done < test.txt
Leer archivo con bucle while
Leer archivo con bucle while

En el ejemplo anterior, test.txt El archivo se redirigirá a la while Bucle y read El comando lee línea por línea y los almacena en la variable «Gestión» y se procesa más dentro del bucle. Las líneas vacías no se saltan con este método y este no es el comportamiento deseado. Por lo tanto, debe asegurarse explícitamente de que se omitan las líneas en blanco.

Hay varias formas de cortar líneas en blanco del archivo de entrada. Puedes usar sed, awky declaraciones condicionales, etc. Prefiero ambas awk y sed para limpiar las líneas en blanco antes de usar a. círculo while Cinta.

# USING SED
$ sed -i '/^[[:space:]]*$/d' test.txt
14:00 Brighton v Leicester
14:00 West Ham v Man Utd
16:30 Spurs v Chelsea
# USING AWK
$ awk 'NF' test.txt
Eliminar líneas vacías con sed y awk
Eliminar líneas vacías con sed y awk

Como se muestra en los ejemplos anteriores, puede cambiar IFS dependiendo de cómo desee leer su archivo. Por ejemplo, si está editando un archivo CSV, el separador se puede establecer en una coma. Cambié el mismo archivo de entrada en formato CSV.

14:00,Brighton,Leicester
14:00,West Ham,Man Utd
16:30,Spurs,Chelsea

En el siguiente ejemplo, IFS está en una coma (IFS=",") y cada campo se guarda en una variable separada (tiempo, equipo1, equipo2).

while IFS="," read time team1 team2
do
   echo "$team1 is playing against $team2 at $time"
done < test.txt
Leer archivos CSV
Leer archivos CSV

EJEMPLO 5 – Control de flujo en bucle con interrupción y continuación

Si ha leído nuestro artículo bash for loop, es posible que sepa qué es rotura y Seguir usado para. Tanto romper como continuar son palabras clave integradas en bash para ayudarte a controlar el flujo de tu bucle.

La palabra clave «break» finaliza completamente el ciclo y transfiere el control al siguiente comando del script. En el siguiente ejemplo. Si eso NUM es igual a tres, el bucle pasa por el break Mando.

$ NUM=5
while [[ $NUM -ne 0 ]]
do
  printf "Value of NUM = $NUM n"
  if [[ $NUM -eq 3 ]]
  then
    break
  fi   
((--NUM))
done
Mientras que bucle con declaración de ruptura
Mientras que bucle con declaración de ruptura

La palabra clave «continuar» omite la iteración actual y devuelve el control al ciclo while e inicia la siguiente iteración.

$ NUM=0
while [[ $NUM -lt 5 ]]
do
 ((++NUM))
 if [[ $NUM -eq 3 ]]
 then
   continue
 fi
 printf "Value of NUM = $NUM n"  
done
Mientras que bucle con instrucción continue
Mientras que bucle con instrucción continue

2. Hasta el bucle

los until Loop es exactamente lo contrario de while Cinta. los while Loop evalúa la condición como verdadera para ejecutar el bloque de código y el until loop evalúa la condición como falsa para que se ejecute el ciclo.

La sintaxis es la misma que la while Bucle, pero en lugar de la palabra clave while, until ser usado.

until [[ condition ]]
do
  Command 1
  Command 2
  ....
  Command 3
done

Puede ver en el siguiente ejemplo until Loop evalúa la variable NUM ser mayor o igual a cinco. Esta mal ahí NUM se establece en cero y se incrementa en iteraciones posteriores ((++NUM)). Cuando entonces NUM es igual a cinco, la condición se evalúa como verdadera y until El bucle ya no se ejecuta.

$ NUM=0
$ until [[ $NUM -ge 5 ]]
do
  echo $NUM
  ((++NUM))
done
Bucle hacia arriba
Bucle hacia arriba

Puede usar la palabra clave para crear bucles infinitos «incorrecto».

$ NUM=0
$ until false
do
  echo $NUM
  ((++NUM))
done

Para controlar el flujo del bucle, puede utilizar el break y continue Palabras clave como se muestra en el while Sección de bucle anterior.

diploma

En este artículo vimos cómo while Bucle y until Bucle en scripts bash. Until Loop se comparará con. rara vez se usa for y while Bucles, pero eso depende de su script para decidir y qué tipos de bucles se requieren. Póngase cómodo usando los tres bucles.

Si tiene alguna pregunta o comentario, no dude en hacérnoslo saber utilizando la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba