Código:
Gracias por vuestra visita. #! /bin/bash # Ejercicio que empaqueta una serie de archivos o directorios y los comprime, # también los introduce en la carpeta CopiasSeguridad si_existe(){ #Función que dice si un argumento existe local f="$1" [[ -a "$f" ]] && return 0 || return 1 } if [ "$#" = "1" ]; then #Si el número de argumentos es uno pues... if ( si_existe "$1" ) ; then #comprobamos que existeel argumento tar -cvf copia.tar "$1" #empaquetamos gzip copia.tar #comprimimos if ( si_existe "CopiasSeguridad") then #Vemos si ya existe la carpeta destino mv copia.tar.gz CopiasSeguridad #Como existe lo movemos directamente else # Si no creamos CopiasSeguridad y lo metemos dentro mkdir CopiasSeguridad mv copia.tar.gz CopiasSeguridad fi else printf "El directorio no existe\nForzaré la salida del script, a mí nadie me vacila\n" #Si no existe el directorio o archivo fozamos la salida del script exit fi else if [ "$#" = "0" ]; then printf "Numero de argumentos incorrecto, que quieres que haga con 0 argumentos\n" #Si no introducimos argumentos forzamos la salida exit else #Si el nº de argumentos es mayor que 1 hacemos esto: > copia.tar #Creamos un copia.tar vacío if ( si_existe "$1" ) then #Vemos si existe el primer argumento tar -cvfcopia.tar "$1" #Empaquetamos el primer argumento else printf "El archivo o directorio $1 no existe, no lo añadiré a CopiasSeguridad, lo siento\n" #Si no existe forzamos la salida fi for (( CONTADOR=2; CONTADOR<="$#"; CONTADOR++ )) ; do #Este bucle me va empaquetando uno a uno cada uno de los argumentos if ( si_existe "$CONTADOR" ) then tar -rvfcopia.tar "$CONTADOR" #Creo que el error está aquí else printf "El archivo o directorio $CONTADOR no existe, no lo añadiré a CopiasSeguridad, lo siento\n" fi done gzip copia.tar #Comprimimos if ( si_existe "CopiasSeguridad") then mv copia.tar.gz CopiasSeguridad #Movemos nuestro archivo compreso a CopiasSeguridad else mkdir CopiasSeguridad #Creamos la carpeta y luego la movemos mv copia.tar.gz CopiasSeguridad fi fi fi