#!/bin/bash #/** #@file System.lib #@brief Librería o clase System #@class System #@brief Funciones básicas del sistema. #@version 0.9 #@warning License: GNU GPLv3+ #*/ #/** # ogEcho [loglevel] message... #@brief Muestra mensajes en consola y lo registra en fichero de incidencias. #@arg \c str_loglevel nivel de registro de incidencias. #@arg \c str_message mensaje (puede recibir más de 1 parámetro. #@return Mensaje mostrado. #@note El nivel de ayuda \c (help) no se registra en el fichero de incidencias. #@version 0.9 - Primera versión para OpenGNSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-07-23 #*/ function ogEcho () { # Variables locales local LOGLEVEL LOGFILE DATETIME #/// Selección del nivel de registro (opcional). case "$1" in help) shift ;; info) LOGLEVEL=$1; shift ;; warning) LOGLEVEL=$1; shift ;; error) LOGLEVEL=$1; shift ;; *) ;; esac #/// Registro de incidencias. #[ -w "$OGLOGFILE" ] && LOGFILE="-f $OGLOGFILE" #DATETIME=$(date +"%F %T") # pendiente en cliente Initrd if [ -n "$LOGLEVEL" ]; then logger -s -t "OpenGNSys $LOGLEVEL" $LOGFILE "$DATETIME $*" else echo "$*" fi } ##### PRUEBAS # ogGetHostname function ogGetHostname () { local HOST #/// Tomar nombre de la variable \c HOSTNAME HOST="$HOSTNAME" #/// Si no, tomar del DHCP, opción \c host-name [ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} END {print host} ' /var/lib/dhcp3/dhclient.leases) #/// Si no, tomar del parámetro del kernel \c hostname [ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} $1~/hostname/ {print $2}' /proc/cmdline) [ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" echo $HOST } # ogGetIpAddress function ogGetIpAddress () { local IP IP=$(awk '/fixed-address/ {gsub(/;/,""); host=$2} END {print host} ' /var/lib/dhcp3/dhclient.leases) echo $IP; } #/** # ogRaiseError errcode ["errmessage" ...] #@brief Devuelve el mensaje y el código de error correspondiente. #@arg \c int_errcode código de error. #@arg \c str_errmessage mensajes complementarios de error. #@return Mensaje de error. #@warning No definidas #@note Mensajes internacionales del fichero de idiomas. #@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-07-21 #*/ function ogRaiseError () { # Variables locales local MSG CODE #/// Obtener código y mensaje de error. CODE=$1 case "$CODE" in $OG_ERR_FORMAT) MSG="$MSG_ERR_FORMAT \"$2\"" ;; $OG_ERR_NOTFOUND) MSG="$MSG_ERR_NOTFOUND \"$2\"" ;; $OG_ERR_PARTITION) MSG="$MSG_ERR_PARTITION \"$2\"" ;; $OG_ERR_LOCKED) MSG="$MSG_ERR_LOCKED \"$2\"" ;; $OG_ERR_IMAGE) MSG="$MSG_ERR_IMAGE \"$2\"" ;; $OG_ERR_NOTOS) MSG="$MSG_ERR_NOTOS \"$2\"" ;; $OG_ERR_NOTEXEC) MSG="$MSG_ERR_NOTEXEC \"$2\"" ;; *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;; esac #/// Mostrar mensaje de error y salir con el código indicado. ogEcho error "${FUNCNAME[1]}: $MSG" >&2 return $CODE } #/** # ogHelp ["function" ["format" ["example" ... ]]] #@brief Muestra mensaje de ayuda para una función determinda. #@arg \c str_function Nombre de la función. #@arg \c str_format Formato de ejecución de la función. #@arg \c str_example Ejemplo de ejecución de la función. #@return Salida de ayuda. #@note Si no se indican parámetros, la función se toma de la variable \c $FUNCNAME #@note La descripción de la función se toma de la variable compuesta por \c MSG_FUNC_$función incluida en el fichero de idiomas. #@note Pueden especificarse varios mensajes con ejemplos. #@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-07-27 #*/ function ogHelp () { # Variables locales. local FUNC MSG #/// Mostrar función, descripción y formato. FUNC="${1:-${FUNCNAME[${#FUNCNAME[*]}-1]}}" MSG="MSG_HELP_$FUNC" ogEcho help "$MSG_FUNCTION $FUNC: ${!MSG}" [ -n "$2" ] && ogEcho help " $MSG_FORMAT: $2" #/// Mostrar ejemplos. shift 2 while [ $# -gt 0 ]; do ogEcho help " $MSG_EXAMPLE: $1" shift done }