<Anterior | Contenido | Siguiente>
Rompiendo un bucle
bash proporciona dos comandos integrados que se pueden usar para controlar el flujo del programa dentro de los bucles. El comando break termina inmediatamente un bucle y el control del programa se reanuda con la siguiente instrucción que sigue al bucle. El comando continue hace que se omita el resto del ciclo y el control del programa se reanuda con la siguiente iteración del ciclo. Aquí vemos una versión del programa de menú while que incorpora tanto romper como continuar:
#! / Bin / bash
# while-menu2: un programa de información del sistema impulsado por menús DELAY = 3 # Número de segundos para mostrar los resultados
mientras sea cierto; hacer
limpiar
gato << - _EOF_
Por favor seleccione:
1. Mostrar información del sistema
2. Mostrar espacio en disco
3. Muestra la utilización del espacio en el hogar
0. Salir
_EOF_
read -p "Ingresar selección [0-3]>"
si [[$ RESPUESTA = ~ ^ [0-3] $]]; entonces si [[$ REPLY == 1]]; luego
echo "Nombre de host: $ HOSTNAME" tiempo de actividad
dormir $ DELAY
continue
fi
si [[$ RESPUESTA == 2]]; luego df -h
dormir $ DELAY
continue
fi
si [[$ RESPUESTA == 3]]; luego
si [[$ (id -u) -eq 0]]; luego
echo "Utilización del espacio doméstico (todos los usuarios)" du -sh / home / *
más
#! / Bin / bash
# while-menu2: un programa de información del sistema impulsado por menús DELAY = 3 # Número de segundos para mostrar los resultados
mientras sea cierto; hacer
limpiar
gato << - _EOF_
Por favor seleccione:
1. Mostrar información del sistema
2. Mostrar espacio en disco
3. Muestra la utilización del espacio en el hogar
0. Salir
_EOF_
read -p "Ingresar selección [0-3]>"
si [[$ RESPUESTA = ~ ^ [0-3] $]]; entonces si [[$ REPLY == 1]]; luego
echo "Nombre de host: $ HOSTNAME" tiempo de actividad
dormir $ DELAY
continue
fi
si [[$ RESPUESTA == 2]]; luego df -h
dormir $ DELAY
continue
fi
si [[$ RESPUESTA == 3]]; luego
si [[$ (id -u) -eq 0]]; luego
echo "Utilización del espacio doméstico (todos los usuarios)" du -sh / home / *
más
echo "Utilización del espacio doméstico ($ USER)" du -sh $ HOME
fi
dormir $ DELAY
continue
fi
si [[$ RESPUESTA == 0]]; luego romper
fi
más
echo "Entrada no válida". dormir $ DELAY
fi hecho
echo "Programa terminado".
echo "Utilización del espacio doméstico ($ USER)" du -sh $ HOME
fi
dormir $ DELAY
continue
fi
si [[$ RESPUESTA == 0]]; luego romper
fi
más
echo "Entrada no válida". dormir $ DELAY
fi hecho
echo "Programa terminado".
En esta versión del script, configuramos un ciclo infinito (uno que nunca termina por sí solo) mediante el uso de verdadero comando para proporcionar un estado de salida a mientras. Desde verdadero siempre saldrá con un estado de salida de cero, el bucle nunca terminará. Esta es una técnica de creación de scripts sorprendentemente común. Dado que el ciclo nunca terminará por sí solo, depende del programador proporcionar alguna forma de salir del ciclo cuando sea el momento adecuado. En este guión, el romper El comando se usa para salir del bucle cuando se elige la selección "0". los Seguir El comando se ha incluido al final de las otras opciones de secuencia de comandos para permitir una ejecución más eficiente. Mediante el uso continue, el script omitirá el código que no es necesario cuando se identifica una selección. Por ejemplo, si se elige e identifica la selección "1", no hay razón para probar las otras selecciones.