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.
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:
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óncase
. En su lugar, hemos utilizadoread -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.