Logo de AulaDigital

Bash Prog Intro COMO 11

Programación en BASH - COMO de introducción: Tablas Página siguiente Página anterior Índice general

11. Tablas

11.1 Operadores de comparación de cadenas

s1 = s2

s1 coincide con s2

s1 != s2

s1 no coincide con s2

s1 < s2

s1 es alfabéticamente anterior a s2, con el locale actual

s1 > s2

s1 es alfabéticamente posterior a s2, con el locale actual

-n s1

s1 no es nulo (contiene uno o más caracteres)

-z s1

s1 es nulo

11.2 Ejemplo de comparación de cadenas

Comparando dos cadenas

        #!/bin/bash
        S1='cadena'
        S2='Cadena'
        if [ $S1!=$S2 ];
        then
                echo "S1('$S1') no es igual a S2('$S2')"
        fi
        if [ $S1=$S1 ];
        then
                echo "S1('$S1') es igual a S1('$S1')"
        fi
        

Cito aquí el consejo de un correo enviado por Andreas Beck, referido al uso de if [ $1 = $2 ].

Esto no es buena idea, porque si $S1 o $S2 son vacíos, aparecerá un parse error. Es mejor: x$1=x$2 or "$1"="$2"

11.3 Operadores aritméticos

+ (adición)

- (sustracción)

* (producto)

/ (división)

% (módulo)

11.4 Operadores relacionales aritméticos

-lt (<)

-gt (>)

-le (<=)

-ge (>=)

-eq (==)

-ne (!=)

Los programadores de C tan sólo tienen que corresponder el operador con su paréntesis.

11.5 Comandos útiles

Esta sección ha sido reescrita por Kees (véanse agradecimientos)

Algunos de estos comandos contienen lenguajes de programación completos. Sólo se explicarán las bases de estos comandos. Para una descripción más detallada, eche un vistazo a las páginas man de cada uno.

sed (editor de flujo)

Sed es un editor no interactivo. En vez de alterar un fichero moviendo el cursor por la pantalla, se utiliza una serie de instrucciones de edición de sed, y el nombre del fichero a editar. También se puede describir a sed como un filtro. Miremos algunos ejemplos:

        $sed 's/a_sustituir/sustituto/g' /tmp/petete
        

Sed sustituye la cadena 'a_sustituir' por la cadena 'sustituto', leyendo del fichero /tmp/petete. El resultado se envía a stdout (normalmente la consola), pero se puede añadir '> captura' al final de la línea de arriba para que sed envíe la salida al fichero 'capture'.

        $sed 12, 18d /tmp/petete
        

Sed muestra todas las líneas de /tmp/petete excepto la 12 y la 18. El fichero original no queda alterado por este comando.

awk (manipulación de bases de datos, extracción y proceso de texto)

Existen muchas implementaciones del lenguaje de programacin AWK (los intérpretes más conocidos son gawk de GNU, y el 'nuevo awk' mawk). El principio es sencillo: AWK busca un patrón, y por cada patrón de búsqueda que coincida, se realiza una acción.

Si tenemos un fichero /tmp/petete con las siguientes líneas:

"prueba123

prueba

pprruueebbaa"

y ejecutamos:

        $awk '/prueba/ {print}' /tmp/petete
        

test123

test

El patrón que busca AWK es 'prueba' y la acción que realiza cuando encuentra una línea en /tmp/petete con la cadena 'prueba' es `print'.

        $awk '/prueba/ {i=i+1} END {print i}' /tmp/petete
        

3

Cuando se utilizan muchos patrones, se puede reemplazar el texto entre comillas por '-f fichero.awk', y poner todos los patrones y acciones en 'fichero.awk'.

grep (impresión de líneas que coinciden con un patrón de búsqueda)

Ya hemos visto ejemplos del comando grep en los capítulos anteriores, que muestra las líneas que concuerdan con un patrón. Pero grep puede hacer más que eso.

        $grep "busca esto" /var/log/messages -c
        

12

Se ha encontrado 12 veces la cadena "busca esto" en el fichero /var/log/messages.

[vale, este ejemplo es falso, el fichero /var/log/messages está alterado :-)]

wc (cuenta líneas, palabras y bytes)

En el siguiente ejemplo, vemos que la salida no es lo que esperábamos. El fichero petete utilizado en este ejemplo contiene el texto siguiente:

"programación en bash
como de introducción"

        $wc --words --lines --bytes /tmp/petete
        

2 5 41 /tmp/petete

Wc no tiene en cuenta el orden de los parámetros. Wc siempre los imprime en un orden estándar, que es, como se puede ver: líneas, palabras, bytes y fichero.

sort (ordena líneas de ficheros de texto)

Esta vez, el fichero petete contiene el texto siguiente:

"b
c
a"

        $sort /tmp/petete
        

Esto es lo que muestra la salida:

a
b
c

Los comandos no deberían ser tan fáciles :-)

bc (un lenguaje de programación de cálculos matemáticos)

Bc acepta cálculos desde la línea de comandos (entrada desde un fichero, pero no desde una redirección o una tubería), y también desde una interfaz de usuario. La siguiente demostración expone algunos de los comandos. Note que ejecuto bc con el parámetro -q para evitar el mensaje de bienvenida.

   $bc -q
        

1 == 5

0

0.05 == 0.05

1

5 != 5

0

2 ^ 8

256

sqrt(9)

3

while (i != 9) {

i = i + 1;

print i

}

123456789

quit

tput (inicializa una terminal o consulta la base de datos de terminfo)

Una pequeña demostración de las capacidades de tput:

        $tput cup 10 4
        

La línea de comandos aparece en (y10,x4).

        $tput reset
        

Limpia la pantalla y la línea de comandos aparece en (y1,x1). Observe que (y0,x0) es la esquina superior izquierda.

        $tput cols
        
80

Muestra el número de caracteres que caben en la dirección x.

Es muy recomendable familiarizarse con estos programas (al menos). Hay montones de programillas que le permitirán hacer virguerías en la línea de comandos.

[algunos ejemplos están copiados de las páginas man o los PUFs]


Página siguiente Página anterior Índice general