Estaciones de trabajo en línea OnWorks Linux y Windows

Logotipo

Alojamiento gratuito en línea para estaciones de trabajo

<Anterior | Contenido | Siguiente>

Una aplicación más completa

Después de una larga pausa, vamos a reanudar el trabajo en nuestro página_info_del_sistema programa. Nuestra próxima adición agregará varias opciones de línea de comando al programa de la siguiente manera:

Archivo de salida. Agregaremos una opción para especificar un nombre para un archivo que contenga la salida del programa. Se especificará como -f presentar or --expediente presentar.

Modo interactivo. Esta opción solicitará al usuario un nombre de archivo de salida y determinará si el archivo especificado ya existe. Si es así, se le preguntará al usuario antes de que se sobrescriba el archivo existente. Esta opción será especificada por -i or --interactivo.

Ayuda. Ambos -h or --ayuda se puede especificar para hacer que el programa genere un mensaje de uso informativo.

Aquí está el código necesario para implementar el procesamiento de la línea de comandos:



uso () {

echo "$ PROGNAME: uso: $ PROGNAME [-f file | -i]" return

}

# procesar opciones de línea de comando interactivo =

uso () {

echo "$ PROGNAME: uso: $ PROGNAME [-f file | -i]" return

}

# procesar opciones de línea de comando interactivo =


nombre de archivo =


mientras que [[-n $ 1]]; hacer caso $ 1 en

-f | --expediente)

Turno

nombre de archivo = $ 1

;;

nombre de archivo =


mientras que [[-n $ 1]]; hacer caso $ 1 en

-f | --expediente)


-i | --interactive) interactivo = 1

;;

-h | --help) salida de uso

;;

*) uso> & 2

salir de 1

;;

-i | --interactive) interactivo = 1

;;

-h | --help) salida de uso

;;

*) uso> & 2

salir de 1

;;


esac

turno hecho

esac

turno hecho


imagen

Primero, agregamos una función de shell llamada personal para mostrar un mensaje cuando se invoca la opción de ayuda o se intenta una opción desconocida.

A continuación, comenzamos el ciclo de procesamiento. Este bucle continúa mientras el parámetro posicional

$ 1 no está vacío. Al final del ciclo, tenemos un comando de cambio para avanzar los parámetros de posición para asegurar que el ciclo eventualmente terminará.

Dentro del bucle, tenemos un case declaración que examina el parámetro posicional actual para ver si coincide con alguna de las opciones admitidas. Si se encuentra un parámetro compatible, se actúa sobre él. Si se encuentra una opción desconocida, se muestra el mensaje de uso y el script termina con un error.

La -f El parámetro se maneja de una manera interesante. Cuando se detecta, provoca una Turno que ocurra, lo que avanza el parámetro posicional $1 al argumento de nombre de archivo proporcionado al -f .

A continuación, agregamos el código para implementar el modo interactivo:



# modo interactivo


si [[-n $ interactivo]]; entonces mientras sea cierto; hacer

read -p "Ingrese el nombre del archivo de salida:" nombre de archivo si [[-e $ nombre de archivo]]; luego

read -p "'$ filename' existe. ¿Sobrescribir? [y / n / q]>" case $ REPLY en

Y | y) descanso

# modo interactivo


si [[-n $ interactivo]]; entonces mientras sea cierto; hacer

read -p "Ingrese el nombre del archivo de salida:" nombre de archivo si [[-e $ nombre de archivo]]; luego

read -p "'$ filename' existe. ¿Sobrescribir? [y / n / q]>" case $ REPLY en

Y | y) descanso


;;

Q | q) echo "Programa terminado". Salida

;;

*) Seguir

;;

esac

elif [[-z $ nombre de archivo]]; entonces continua

más

break

fi

done

fi

;;

Q | q) echo "Programa terminado". Salida

;;

*) Seguir

;;

esac

elif [[-z $ nombre de archivo]]; entonces continua

más

break

fi

done

fi


Si interactivo La variable no está vacía, se inicia un bucle sin fin, que contiene la solicitud de nombre de archivo y el código de manejo de archivos existente subsiguiente. Si el archivo de salida deseado ya existe, se le pide al usuario que lo sobrescriba, elija otro nombre de archivo o salga del programa. Si el usuario opta por sobrescribir un archivo existente, break se ejecuta para terminar el bucle. Note como el case La instrucción solo detecta si el usuario elige sobrescribir o salir. Cualquier otra opción hace que el bucle continúe y vuelve a solicitar al usuario.

Para implementar la función de nombre de archivo de salida, primero debemos convertir el código de escritura de página existente en una función de shell, por razones que se aclararán en un momento:



write_html_page () {cat << - _EOF_

$ TITLE

$ TITLE

$ TIMESTAMP

$ (report_uptime)

$ (report_disk_space)

$ (report_home_space)

_EOF_ volver

}


# página html de salida


if [[-n $ nombre de archivo]]; luego

write_html_page () {cat << - _EOF_

$ TITLE

$ TITLE

$ TIMESTAMP

$ (report_uptime)

$ (report_disk_space)

$ (report_home_space)

_EOF_ volver

}


# página html de salida


if [[-n $ nombre de archivo]]; luego


si toca $ nombre de archivo && [[-f $ nombre de archivo]]; luego write_html_page> $ filename

más

echo "$ PROGNAME: No se puede escribir el archivo '$ filename'"> & 2 salir 1

fi más

escribir_html_pagina

fi

si toca $ nombre de archivo && [[-f $ nombre de archivo]]; luego write_html_page> $ filename

más

echo "$ PROGNAME: No se puede escribir el archivo '$ filename'"> & 2 salir 1

fi más

escribir_html_pagina

fi


El código que maneja la lógica del -f La opción aparece al final de la lista que se muestra arriba. En él, probamos la existencia de un nombre de archivo y, si se encuentra uno, se realiza una prueba para ver si el archivo es realmente modificable. Para hacer esto, un contacto se realiza, seguido de una prueba para determinar si el archivo resultante es un archivo normal. Estas dos pruebas se encargan de situaciones en las que se ingresa un nombre de ruta no válido (contacto fallará) y, si el archivo ya existe, es un archivo normal.

Como podemos ver, el escribir_html_pagina Se llama a la función para realizar la generación real de la página. Su salida se dirige a la salida estándar (si la variable nombre del archivo está vacío) o redirigido al archivo especificado.


Top OS Cloud Computing en OnWorks: