script que ordena un texto ascendentemente o descendentemente [bash]

Iniciado por minette1988, 7 Mayo 2010, 12:38 PM

0 Miembros y 1 Visitante están viendo este tema.

minette1988

Hola, el siguiente script recibe como primer parámetro un archivo de texto y ordena las líneas de dicho archivo ascendentemente al pasarle una "A" como segundo parámetro o descendentemente al pasarle una "Z". Cuando lo ejecuto me sale esto: [: 16: missing ]

Código (bash) [Seleccionar]
#!/bin/bash

if [ $# -ge 2 ]
then
     if [ -f $1 ] && [ $2 = "A"]
     then
        `cat $1 | sort -d#`
     else
         if [ -f $1 ] && [ $2 = "Z" ]
         then
            `cat $1 | sort -r`
         fi
     fi
else
    echo "Error: Falta pasar argumentos"
fi   

minette1988

El archivo de texto a ordenar es este:
ayer fui al estadio.
bonitas ideas las que tú tienes.
entro al segundo palo y gol.

Acabo de corregir un pequeño fallo, pero me da el siguiente error: script1: 16: ayer: not found
Código (bash) [Seleccionar]
#!/bin/bash

if [ $# -ge 2 ]
then
     if [ -f $1 ] && [ $2 = "A" ]
     then
        `cat $1 | sort -d`
     else
         if [ -f $1 ] && [ $2 = "Z" ]
         then
            `cat $1 | sort -r`
         fi
     fi
else
    echo "Error: Falta pasar argumentos"
fi   

leogtz

Me pregunto para qué utilizas `` si no te lo piden, es decir, no necesitas sustituir variables, solo ejecuta y ya, mira esto:

Tu script funciona bien así:

Código (bash) [Seleccionar]
#!/bin/bash

if [ $# -ge 2 ]
then
     if [ -f $1 ] && [ $2 = "A" ]
     then
        cat $1 | sort -d
     else
         if [ -f $1 ] && [ $2 = "Z" ]
         then
            cat $1 | sort -r
         fi
     fi
else
    echo "Error: Falta pasar argumentos"
fi


Código (bash) [Seleccionar]
leo@lein:~/Escritorio$ bash shell.sh file.txt A

ayer fui al estadio.
bonitas ideas las que tú tienes.
entro al segundo palo y gol.
leo@lein:~/Escritorio$ bash shell.sh file.txt Z
entro al segundo palo y gol.
bonitas ideas las que tú tienes.
ayer fui al estadio.

leo@lein:~/Escritorio$
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

minette1988

Tenías razón, muchas gracias. Una pregunta al ejecutar un script ¿también se cuenta como parámetro el nombre del script?. Gracias.

leogtz

No te entiendo qué quieres decir con eso de "se cuenta", explicame, por favor.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

cgvwzq

Se refiere a que si el contador "$#" tiene en cuenta el nombre del script.

Puedes comprobarlo facilmente...

Código (bash) [Seleccionar]

if [ $# = 1 ]; then
  echo "Lo cuenta"
fi


Y lo ejecutas sin paso de parametros: "sh prueba.sh".

Edito: Si se tiene en cuenta, es la variable $0.
Some stuff:

  • www.a] parsed as www.a]
  • Bypass elhacker's img filter with ALT attribute!
  • ¿Para cuándo SQLi I y II? WZ



leogtz

#6
Pues NO, no lo tiene en cuenta:

leo@lein:~/Escritorio$ cat shell.sh
#!/usr/bin/bash
echo -e "$#";


leo@lein:~/Escritorio$ bash shell.sh
0
leo@lein:~/Escritorio$


Como  argumento posicional el mismo archivo ($0) no es tomado en cuenta.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com