Consultas, desarrollo de programas y petición de presupuestos:

jueves, 12 de julio de 2012

Gestion de multiples argumentos en Scripts: For

¿como se hacen bucles en scripts?
El bucle For
for variable in lista_valores;
do
…....
…....
done
¿como me hago un bucle para que me recorra todos los argumentos que me ha dado el usuario?
Con $@ contiene la lista de argumentos (no incluye el nombre del programa, y empieza por 1, $0 contiene el nombre del programa)
for ARG in $@;
do
echo $ARG
done
ARG ira tomando valores 1,2,3...


Otro ejemplo
for ARG in manolito pepito juanito
do
echo $ARG
done

En la primera vuelta la variable ARG vale manolito
En la segunda vuelta la variable ARG vale pepito
En la tercera vuelta la variable ARG vale juanito


Hacer un script como el archivo lsl
lsl.sh -d directorio1 directorioN
lsl.sh -a
lsl.sh -ca
lsl.sh -ac

lsl ls
Lsl.sh -a Ls -a -l (-ele)
Lsl.sh -c (no tengo que mostrar la información Ls -a -1 (-uno)
Lsl.sh directorios1 directoriosn Ls directorios1 dirctoriosn
















#!/bin/bash
ERROR=””
DIR=""
ARGUMENTO_A=""
ARGUMENTO_C=""
for ARG in $@
do
    if [ "$ARG" = "-c" ]
    then
    ARGUMENTO_C="-1"
    else
        if [ "$ARG" = "-a" ]
            then
            ARGUMENTO_A="-a"    
           else
                if [ "$ARG" = "-ac" ]
                then
                ARGUMENTO_C="-1"
                ARGUMENTO_A="-a"
                else
                    if [ "$ARG" = "-ca" ]
                    then
                    ARGUMENTO_C="-1"
                    ARGUMENTO_A="-a"
                    else
                        if [ -d $ARG ]
                        then
                        DIR="$DIR $ARG"
                        else
                        ERROR=”$ERROR $ARG
                        fi
                    fi
                fi
            fi
    fi
done

if [ "ARGUMENTO_C" = "" ]
    then
    ARGUMENTO_C="-l"
    #MENOS L PARA QUE MUESTRE DATOS EXTENSOS
fi

if [ “$ERROR” = “” ]
    ls --color $ARGUMENTO_A $ARGUMENTO_C $DIR
    else
    ECHO “Argumentos no validos $ERROR” no son válidos”
    exit
fi

Nota:
cuidado con los espacios dentro de las comparaciones y las “” al copiar y pegar

Ejercicio:
Hacer un script que te haga una copia de seguridad de tus datos en el servidor del progresor.

#!/bin/bash
tar cfvz copia.bak.tar.gz /home/julio/.codelite/julio/*
scp copia.bak.tar.gz julio@192.168.36.2:/home/julio/copia.workspace.tar.gz

tar cfvz copia.src.tar.gz /home/julio/src/*
scp copia.src.tar.gz julio@192.168.36.2:/home/julio/copia.src.tar.gz

El problema de hacerlo asi es que tenemos que poner nuestra contraseña.


Solucion para solo hacerlo una vez.
servidor cliente
Clave DSA: parte la tiene el cliente de la clave y es publica




Despues de haber hecho el paso 1 tenemos que poner disponibles las clave publica en un solo directorio.


Nos vamos al servidor:
ssh julio@192.168.36.2


mkdir .ssh


cat id_dsa.pub>>.ssh/authorized_keys
(esta añadiendo al final del autorized_keys, el id_dsa.pub)


Podemos tener varias claves publicas dependiendo si nuestro acceso es por distintos ordenadores.




A partir de este momento, no nos pide la contraseña para entrar en el servidor.


1º generar tus claves en tu ordenador:
ssh-keygen -t dsa //genera las claves
crear un fichero (.ssh/id_dsa) con nombre por defecto con las claves (ENTER)
passphrase: sustituto de la contraseña, lo dejo vacio ya no me lo piede

id_dsa: clave privada
id_dsa.pub: clave publica


La tenemos que llevar al mismo sitio del servidor. (copiar)
scp .ssh/id_dsa.pub usuario@192.168.36.2:id_dsa.pub
(si estamos en home), si estamos en directorio .ssh, ponemos:
scp id_dsa.pub usuario@192.168.36.2:id_dsa.pub


Clave RSA: mas antigua






No hay comentarios:

Publicar un comentario en la entrada