Ayuda por Compasion con un shell

Bueno el caso es que tengo que hacer el siguiente sh pero no termina de salirme, y desesperado pido vuestra ayuda para ver si entre todos podemos sacar el resltado.

Repito lo mismo dos veces, y no lo tengo pasado por funcion todavia, cuando vaya todo bien lo cambiare, pero hasta entonces no quiero andar tocando mas para ver los problemas por separado.

Tambien me faltan por validar una serie de opciones, por ejemplo la desencriptacion solo funciona si se sobreescribe en archivo fuente, pero todo eso ya lo arreglare mas adelante.

Como las dos partes son iguales cambiando la parte del paste, fijaros mas en la parte que desencripta (-d) que es la que esta mas desarrollada

Bueno os cuanto de que va todo esto.

Este sh lo que debe hacer es encriptar un archivo linea por linea mediante una encriptacion por transposicion de columnas.

bien si nosotros ponemos sh fich.sh -e

Y el archivoaencriptar tiene por ejemplo el siguiente texto:

Esto es la primera linea
Esto es la segunda linea

Se crearia una matriz con 6 columnas de cada linea tal que asi

Esto e
s la p
rimera
linea

Se traspone asi C4 C2 C5 C6 C1 C3

os e
a p
eira
nlea

bueno y asi hasta el fianl luego se hace una linea y queda ilegible, se añade un salto de linea y seva por la otra.

Para desencriptar, pues lo mismo, nos da como resultado la matriz traspuesta y debemos introducir un salto de linea e ir a por la siguiente, al final de la desencriptacion da como resultado el mismo archivo

Esto es la primera linea
Esto es la segunda linea

---------------------------------------------------

bueno hasta aqui como debia hacerlo, pero el caso es que no lo hace y necesito tenerlo para el miercoles y de ahi mi desesperacion.

Para encriptar todavia no le tengo peusto que me lo ponga despues de tenerlo en una matriz en lineas.

Lo que pasa cuendo ejecuto el sh para desencriptar es que como resultado me da esto.

Esto es la primera linea Esto es la segunda linea

Yo creo que me pasa eso pq no tengo en la encriptacion puesta que pasa de la matriz al un archivo linea a linea con las lineas encriptadas, pero es que ese paso no he logrado hacerlo ni en un lado ni en otro [mamaaaaa] [mamaaaaa] [mamaaaaa]

Creo que me explicado fatal, asi que por favor si me quereis ayudar pregntadme lo que querais que yo os respondo en seguida

Antes de nada solo por haber llegado hasta aqui.........MUCHISIMAS GRACIAS [amor]


#!/bin/bash   
if [ "$1" = "-e" ]
then
   if [ -f $2 -a -r $2 ]
   then
      if [ "$3" != "" ]
      then
         if [ -f $3 -a -w $3 ]
         then
            echo "Si continua sobrescribira el archivo $3 ? S/N "
            read resul
            if [ "$resul" = "n"  ]
            then
               exit
            else
               if [ "$resul" = "s"  ]
               then
                  echo "El archivo $2 esta siendo encriptado"
               fi
            fi
         fi
      
         NUMLINEAS=`wc -l $2 | tr -s " " | cut -d" " -f2`
         I=1
         while [ $I -le $NUMLINEAS ]
         do   
            head -$I $2 | tail -1 > Linea.tmp   
            cat Linea.tmp | tr -d "\n" > Linea.tmp
            NUMCARACT=`wc -c Linea.tmp | tr -s " " | cut -d" " -f2`
            NUMCAC=`expr $NUMCARACT / 6`
            NUMBACK=`expr $NUMCARACT % 6`
            if [ $NUMBACK -ne 0 ]
            then
               NUMCAC=`expr $NUMCAC + 1`
            fi
            MATRIS=`expr $NUMCAC "*" 6`
            RELOADED=`expr $MATRIS - $NUMCARACT`
            Z=1
            while [ $Z -lt $RELOADED  ]
            do
               echo -e " \c" >> Linea.tmp
               Z=`expr $Z + 1`
            done
            echo " " >> Linea.tmp
            X=1
            Y=6
            while [ $X -le $NUMCARACT  ]
            do
               cat Linea.tmp | cut -c$X-$Y >> Linea2.tmp
               A=1   
            while [ $A -le 6 ]
            do
               cat Linea2.tmp | cut -c$A > Line$A.tmp      
               A=`expr $A + 1`
            done
            X=`expr $X + 6`
            Y=`expr $Y + 6`
         done
         I=`expr $I + 1`
      done
      rm Linea2.tmp
      rm Linea.tmp
      paste Line4.tmp Line2.tmp Line5.tmp Line6.tmp Line1.tmp Line3.tmp | tr -d "\t">> $3
      else
         if [ -w $2 ]
         then
            echo "Si continua se sobreescribira el archivo $2 ? S/N"
            read resul
            if [  "$resul" = "n"  ]
            then
               exit
            else
               if [ "$resul" = "s" ]
               then
                  echo "El archivo $2 esta siendo encriptado sobre si mismo"
               fi
            fi
         fi
      fi
   fi   
else
   if [ "$1" = "-d" ]
   then
      if [ -f $2 -a -r $2 ]
      then
         if [ "$3" != "" ]
         then
            if [ -f $3 -a -w $3 ]
            then
               echo "Si continua sobreescribira el archivo $3 ? S/N"
               read resul
               if [ "$resul" = "n" ]
               then
                  exit
               else
                  if [ "$resul" = "s" ]
                  then
                     echo "Se desencriptara  $2 sobre el mismo"
                     NUMLINEAS=`wc -l $2 | tr -s " " | cut -d" " -f2`
                     I=1
                     while [ $I -le $NUMLINEAS ]
                     do
                        head -$I $2 | tail -1 > Linea.tmp
                        cat Linea.tmp | tr -d "\n" > Linea.tmp
                        NUMCARACT=`wc -c Linea.tmp | tr -s " " | cut -d" " -f2`
                        NUMCAC=`expr $NUMCARACT / 6`
                        NUMBACK=`expr $NUMCARACT % 6`
                        if [ $NUMBACK -ne 0 ]
                        then
                           NUMCAC=`expr $NUMCAC + 1`
                        fi
                        MATRIS=`expr $NUMCAC "*" 6`
                        RELOADED=`expr $MATRIS - $NUMCARACT`
                        Z=1
                        while [ $Z -lt $RELOADED ]
                        do
                           echo -e " \c" >> Linea.tmp
                           L=`expr $Z + 1`
                        done
                        echo "" >> Linea.tmp
                        X=1
                        Y=6
                        while [ $X -le $NUMCARACT ]
                        do
                           cat Linea.tmp | cut -c$X-$Y >> Linea2.tmp
                           A=1
                              while [ $A -le 6 ]
                              do
                                 cat Linea2.tmp | cut -c$A > Line$A.tmp
                                 A=`expr $A + 1`
                              done
                           X=`expr $X + 6`
                           Y=`expr $Y + 6`
                           done
                        I=`expr $I + 1`

                  paste Line5.tmp Line2.tmp Line6.tmp Line1.tmp Line3.tmp Line4.tmp | tr -d "\t" | tr -d "\n" > mr.txt
                  echo "" >> mr.txt
                  cat rm.txt > $3
      done

                  fi
                  
               
               fi
            fi
         fi
      fi
   fi
   if [ "$1" != "-d" -o "$1" != "-d" ]
   then
      echo "Los parametros que ha introducido son erroneos"
      echo "use -e para encriptar y -d para desencriptar"
   fi
fi
No lo hago nuca pero estoy desesperadito, asi que subiendo :(:(

Sigo esperando vuestra ayuda auqneu sea chaval eres un patan
eres un patán ;)

Y en vez de encerrar el código entre bloques PHP , enciérralo entre bloques CODE. Se verá muusho mejor.

No entiendo mu bien tu pregunta. LLega a encriptar? al descricptar te sale lo antiguo pero sin el salto de línea???

Explocalo mejor plis
Escrito originalmente por billyberjas
eres un patán ;)

Y en vez de encerrar el código entre bloques PHP , enciérralo entre bloques CODE. Se verá muusho mejor.

No entiendo mu bien tu pregunta. LLega a encriptar? al descricptar te sale lo antiguo pero sin el salto de línea???

Explocalo mejor plis


pues si que soy un patan lo habia metido en codigo PHP, ya decia yo que se veia mal :( lo dicho un patan, pero no me extraño como llevaba tantas horas delante del shell con los colorines XD

Bueno respondiendo a la pregunta este codigo, encripta y deja el texto encriptado en una matriz de seis columnas.

Y desencripta dicha matriz pero deja todo en una linea y con un salto de linea al final de esta

Es decir que el texto de ejemplo de arriba lo queda asi:

Esto es la primera linea Esto es la segunda linea $

En vez de :

Esto es la primera linea$
Esto es la segunda linea$

Y es pq esta mal pero no se como arreglarlo pq por mas que pruebo nada.

el probela esta aqui

paste Line5.tmp Line2.tmp Line6.tmp Line1.tmp Line3.tmp Line4.tmp | tr -d "\t" | tr -d "\n" > mr.txt
echo "" >> mr.txt
cat rm.txt > $3


Me coje lo ultimo y claro solo se queda con un salto de linea, y por mas que miro y remiro no me sale.

Y mucho mas no se decir, pq sino sabria la solucion XD y asi no es :(((((

Bueno pues cualquier ayuda es bienvenida

Y muchas gracias Billyberjas ;)

Adios a tos
pozí, el problema está en los pastes ;)

si te fijas rm.txt (que en el post está bailado el nombre un par deveces) contiene ya las lineas "pegadas", y si le pones una nueva linea, se la vas a añadir al final....

Tienes q buscarte la vida para añadir el "\n" al final de cada iteración del bucle (en el q no me he metido a verlo)...

Nu sé si me excplico...pero seguro q te haces una idea.

El paste está "pasteando" TODO el documento.
Escrito originalmente por billyberjas
pozí, el problema está en los pastes ;)

si te fijas rm.txt (que en el post está bailado el nombre un par deveces) contiene ya las lineas "pegadas", y si le pones una nueva linea, se la vas a añadir al final....

Tienes q buscarte la vida para añadir el "\n" al final de cada iteración del bucle (en el q no me he metido a verlo)...

Nu sé si me excplico...pero seguro q te haces una idea.

El paste está "pasteando" TODO el documento.


Lo primero muchisimas gracias billyberjas

Ok, comprendido, me hago a la idea, a ver como me curro un metodo que me plante el salto de linea cada vez que termina un linea, he probado a piñon y no va, me temo que va tener que ser usando contadores.

Bueno pues lo dicho gracias y me pondre manos a la obra mañana.

Adios a tos
5 respuestas