es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo volver a ejecutar un bucle while mediante una solicitud de sí/no, para buscar un archivo hasta que aparezca.

Estoy tratando de escribir un script que me ayude a buscar en el registro la frase “started”.

El script que tengo hasta ahora se ve así:

#!/bin/bash
greperg= 
i=3

echo "El servidor web se va a consultar"
while 
    i=`expr $i - 1`
    # consulta
    echo "Consulta Núm. $i"
    grep -q '^started$' log
    greperg=$?

    # prueba si continuará
    test "$greperg" -gt 0 -a "$i" -gt 0

do
    # esperando    
    echo 'esperando ...'
    sleep 1
done    
if test  "$greperg" -eq 0 
then 
    echo "El servidor web ha iniciado" 
else
    echo -n "El servidor web no ha iniciado"
fi

valid=''
while ((!valid)); do
    echo -n "¿Desea realizar otra consulta? (J/N)"
    read -t 5 answer

    case "$answer"  in 
        [Jj]) result=1; valid=1;;
        [Nn]) result=0; valid=1;;
        "")   result=0; valid=1;;
        *)    valid=0 ;;

    esac 
done
echo
if ((result));then
     : # ...............(repetir el proceso nuevamente, si no se encuentra, pregunte máximo 5 veces)
else
    echo "Tiempo de espera agotado"
fi
exit 0

A partir de la línea 38, no sé cómo volver a ejecutarlo ¿Puede alguien ayudar?

Lo que estoy buscando:
* La consulta debe expandirse: Si después de los 3 intentos esa palabra (started) aún no está presente, preguntar al usuario con una consulta (S/N) si se deben hacer más consultas 3 veces o no.
* El usuario debe ser consultado un máximo de 5 veces. (Por lo tanto, se realizan un máximo de 3 × 6 = 18 consultas).
* Al final, indique cuál fue el estado alcanzado (ver ejemplo a continuación).

----------
   Consultando ...
   El servidor web aún no ha iniciado.
   Esperar ...
   Consultando ...
   El servidor web aún no ha iniciado.
   Esperar ...
   Consultando ...
   El servidor web aún no ha iniciado.
   ¿Se debe volver a consultar? (S/N)? _ S
   Consultando ...
   El servidor web aún no ha iniciado.
   Esperar ...
   Consultando ...
   El servidor web aún no ha iniciado.
   Esperar ...
   Consultando ...
   El servidor web aún no ha iniciado.
   ¿Se debe volver a consultar? (S/N)? _ N
   Según lo solicitado, no se realizan más intentos.
   En resumen: el servidor web no ha iniciado.
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para volver a ejecutar el script, simplemente puedes agregar un bucle alrededor del código existente, comenzando desde la línea 6 hasta la línea 38. Puedes colocar este bucle dentro de otro bucle que llevará el registro de cuantas veces el usuario desea realizar la consulta de nuevo. Aquí hay una versión actualizada del script para implementar los cambios:

    #!/bin/bash
    greperg= 
    i=3
    polls=0
    
    echo "El servidor web será consultado"
    while 
        i=`expr $i - 1`
        #consulta
        echo "Consulta Nro. $i"
        grep -q '^started$' log
        greperg=$?
    
        #prueba, si continua
        test "$greperg" -gt 0 -a "$i" -gt 0
    
    do
        #espera 
        echo 'Esperando...'
        sleep 1
    done    
    
    while [[ "$polls" -lt 5 ]]; do
        ((polls++))
    
        if test "$greperg" -eq 0; then 
            echo "El servidor web ha iniciado" 
            break
        else
            echo "Consultando..."
            echo "El servidor web aún no ha iniciado."
            if [[ "$polls" -lt 5 ]]; then
                echo "¿Debería consultarse de nuevo (S / N)?"
                read -n 1 answer
                echo
    
                case $answer in 
                    [Ss]) ;;
                    [Nn]) echo "Según su solicitud, no se realizarán más intentos."
                          break ;;
                    *)    echo "Opción inválida. Por favor ingrese S o N."
                          ((polls--));;
                esac
            else
                echo "Se ha alcanzado el número máximo de intentos. Saliendo ahora..."
                break
            fi
        fi
    done
    
    if test "$greperg" -ne 0; then
        echo "En resumen: el servidor web no ha iniciado."
    fi
    
    exit 0
    

    En esta versión, hemos agregado un nuevo bucle (línea 14) que lleva el registro de cuantas veces el usuario desea consultar nuevamente. Dentro de este bucle, hemos puesto el código existente para consultas (desde la línea 6 hasta la línea 38) que se ejecutará hasta que se encuentre la frase “started” en el registro o se alcance el máximo número de intentos. Si se encuentra la frase, se rompe el bucle y el script sale. Si se alcanza el máximo número de intentos sin encontrar la frase, el script sale con un mensaje apropiado.

    Ten en cuenta que también hemos eliminado el comando read -t 5 del script ya que causaba problemas con la declaración case. En su lugar, hemos utilizado read -n 1 para leer una entrada de un solo carácter del usuario. Esto debería funcionar bien ya que se espera que el usuario ingrese solo S o N como entrada.

Comments are closed.