sábado, 28 de enero de 2012

Shell Script Enero 5. Leer un número indeterminado de argumentos, ejecutar, crear copia de seguridad, parámetros con letras, fichero de ayuda

#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#5. Implementar un shell-script bajo Linux que realice lo siguiente: El script tendrá el siguiente formato ej5.sh [opciones] [argumentos] Al ejecutar el shell-script, eśte deberá mostrar un saludo (Buenos días) con el nombre del usuario que lo ejecuta.
#Las opciones que puede recibir el shell son las siguientes:
#Sin opciones ni argumentos, deberá mostrar el contenido del propio shell-script.
#-m Comprobará que los argumentos (tras -m) son ficheros, en cuyo caso muestra su contenido por pantalla.
#-x Deberá comprobar que los argumentos (tras -x) son programas ejecutables, en cuyo caso los ejecutará.
#-b Con esta opción se borrarán todos los ficheros y directorios que se le pasen como parámetro. Antes de ser eliminados, creará una copia de seguridad de los mismos en el directorios $HOME/backup.
#-help Mostrará el contenido de un fichero de texto, de nombre ayuda.hlp, en el que se explicará el funcionamiento del shell-script.
#Se valorará es uso de funciones y llamadas a shell-scripts externos, si procede.

function error {
    echo "¡¡Horror!! Uso "$0" -[|m|x|b|help] [argumentos] "
    exit
}

echo $#

if [[ $# -eq 0 ]]
then
    echo "Contenido del archivo."
    cat enero05
elif [[ $# -gt 0 ]]
then
    #Decir buenos días, nombre del usuario
    nombreusuario=`id -un`
    echo "Buenos días, $nombreusuario"
    #si el primer parámetro es -m
    if [[ $1 == "-m" ]]
    then
        echo "Entrando en -m"
        #la siguiente línea muestra todos los parámetros en una línea, pero no me gusta mucho, voy a probar otra opción       
        #echo $*
        #esta manera es muy limpia
        #primero se quita de en medio el primer parámetro, que es la -m
        shift
        #y luego va sacando cada parámetro hasta que la lista de parámetros esta vacía
        #ni hay que contar parámetros ni nada
        while [[ $1 != "" ]]
        do
            archivo=$1           
            if [ -f $archivo ]
            then
                echo "LISTANDO ARCHIVO $archivo..."
                cat $archivo
            else
                echo "El archivo $archivo no existe"
            fi
            #pasa al siguiente parámetro, esto es, borra el primero y pasa todos los demas hacia adelante, así que el 2º pasa a ser el 1º
            shift
        done
    elif [[ $1 == "-x" ]]
    then
        echo "Entrando en -x"
        shift
        while [[ $1 != "" ]]
        do
            archivo=$1           
            if [ -f $archivo ]
            then
                echo "EJECUTANDO $archivo..."
                $archivo               
            else
                echo "El archivo $archivo no es ejecutable."
            fi
        shift
        done
    elif [[ $1 == "-b" ]]
    then
        echo "Entrando en -b"
        shift
        #comprobar si existe carpeta de backup y, si no, crearla
        nombreusuario=`id -un`
        echo $nombreusuario
        carpeta=`cat /etc/passwd | grep $nombreusuario | cut -d: -f6`
        echo $carpeta
        if [ -d $carpeta/backup1 ]
        then
            echo "La carpeta backup existe"
        else
            echo "Creando carpeta backup en carpeta de usuario"
            mkdir $carpeta/backup1
        fi
        while [[ $1 != "" ]]
        do
            archivo=$1           
            if [ -f $archivo ]
            then
                echo "BORRANDO $archivo..."
                cp $archivo $carpeta/backup1
                #esto lo comento para evitar que borre archivos
                #rm $archivo
            else
                echo "El archivo $archivo no existe."
            fi
        shift
        done
    elif [[ $1 == "-help" ]]
    then
        cat ayuda.hlp

    else
        error
    fi
   
   
else
    error
fi

No hay comentarios:

Publicar un comentario