Programación Bash Evaluacion de Cadenas y Archivos

Programación Bash

El autor del contenido que voy a postear ahora es Ariel de eslinux.com, es un tema bastante util en bash y lo saco del su manual de bash que escribio en el 2004, como añadido a la guia bash..

– Evaluación de cadenas de
caracteres.

-z CADENA

verdadero si la longitud de la cadena es cero (nula).

-n CADENA

verdadero si la longitud de la cadena es distinta de cero (no nula).

CADENA1 = CADENA2

verdadero si las cadenas son iguales.

CADENA1 != CADENA2

verdadero si las cadenas son distintas.

CADENA


verdadero si la cadena es no nula.

Ejemplos:

$ STR=\»abcd\»
$ test \»$STR\» = abcd
$ echo $?
0
$ test \»$STR\» != abcd
$ echo $?
1
$ test -z \»\»
$ echo $?
0
$ test -n \»\»
$ echo $?
1
$ test \»\»
$ echo $?
1

Veamos un ejemplo que aclara algunos errores comunes.

$STR = \»abcd \»
$ test $STR = \»abcd \»
$ echo $?
1
$ test \»$STR\» = \»abcd \»
$ echo $?
0

Vemos que STR es \»abcd \», (con un
espacio al final), en el primer test lo comparamos con \»abcd \»
(también con un espacio al final) y debería dar verdadero
pero dio falso, ¿ a que se debe ?

Esto se produce porque el interprete primero realiza la sustitución
del valor de la variable STR y luego remueve el espacio que tiene al final
STR, porque supone que están demás, ósea que el comando
test ejecutado queda así : test \»abcd\» = \»abcd \»
y efectivamente es falso.

Para que esto no suceda, en el segundo test la variable STR
aparece entre comillas (\»$STR\»), de esta manera el interprete
no le quita el espacio final y test recibe el parámetro correctamente
dando la comparación verdadera, esta es la forma correcta de hacerlo.

– Evaluación de números enteros.

Suponemos que INT1 e INT2 contienen caracteres
que representan números enteros.

INT1 -eq INT2

verdadero si INT1 es igual a INT2

INT1 -gt INT2

verdadero si INT1 es mayor que INT2 (greater than)

INT1 -lt INT2

verdadero si INT1 es menor que INT2 (less than).

INT1 -ge INT2

verdadero si INT1 es mayor o igual que INT2 (greater than or equal).

INT1 -le INT2

verdadero si INT1 es menor o igual que INT2 (less than or equal).

$ num1=0222
$ test \»$num1\» -eq 222
$ echo $?
0
$ test \»$num1\» -gt 222
$ echo $?
1

– Evaluación de archivos.

Veamos los mas importantes:

Suponemos que FILE contiene el path y nombre de un archivo.

-b FILE

Verdadero si el archivo existe y es un dispositivo de bloques.

-c FILE

Verdadero si el archivo existe y es un dispositivo de caracteres.

-d FILE

Verdadero si el archivo existe y es un directorio.

-e FILE

Verdadero si el archivo existe.

-f FILE

Verdadero si el archivo existe y es un archivo ordinario

-r FILE

Verdadero si el archivo existe y tenemos permiso de lectura.

-w FILE

Verdadero si el archivo existe y tenemos permiso de escritura.

-x FILE

Verdadero si el archivo existe y tenemos permiso de ejecución.

Nos vemos espero les sirva la info. Meritos para el autor.