s1 coincide con s2
s1 no coincide con s2
s1 es alfabéticamente anterior a s2, con el locale actual
s1 es alfabéticamente posterior a s2, con el locale actual
s1 no es nulo (contiene uno o más caracteres)
s1 es nulo
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"
+ (adición)
- (sustracción)
* (producto)
/ (división)
% (módulo)
-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
Los programadores de C tan sólo tienen que corresponder el operador con su paréntesis.
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]