(ES)(Bash scripting) Expresiones del comando test
Cada vez que incluimos en nuestros scripts bash bloques if o estructuras while, les pasamos una expresión. Bash internamente procesa esta expresión con el comando test devolviendo 1 o 0 dependiendo si la expresión es cierta o no. En esta entrada voy a recopilar las expresiones aceptadas por el comando test. Es interesante tenerlas a mano, pues en muchas ocasiones nos pueden evitar tener que programar a mano estas comprobaciones.
#!/bin/bash
#023.es
###########
# STRINGS #
###########
#Devuelve 0 si la cadena no es nula
test $string; echo $?
string="hola"
test $string; echo $?
#Devuelve 0 si la longitud del string es 0
test -z $string; echo $?
#Devuelve 0 si la longitud del string NO es 0
test -n $string; echo $?
string2="adios"
#Devuelve 0 si los strings son iguales
test $string = $string2 ; echo $?
###########
# ENTEROS #
###########
int1=2
int2=5
#Devuelve 0 si los enteros son iguales
test $int1 -eq $int2; echo $?
#Devuelve 0 si los enteros NO son iguales
test $int1 -ne $int2; echo $?
#Devuelve 0 si int1 es menor estricto que int2
test $int1 -lt $int2; echo $?
#Devuelve 0 si int1 es menor o igual que int2
test $int1 -le $int2; echo $?
#Devuelve 0 si int1 es mayor estricto que int2
test $int1 -gt $int2; echo $?
#Devuelve 0 si int1 es mayor o igual que int2
test $int1 -ge $int2; echo $?
############
# FICHEROS #
############
touch archivo
touch archivo2
#Devuelve 0 si archivo existe
test -e archivo; echo $?
#Devuelve 0 si archivo existe y el legible
test -r archivo; echo $?
#Devuelve 0 si archivo existe y se puede escribir en el
test -w archivo; echo $?
#Devuelve 0 si archivo existe y es ejecutable
test -x archivo; echo $?
#Devuelve 0 si archivo existe y es un archivo regular
test -f archivo; echo $?
#Devuelve 0 si archivo existe y es un directorio
test -d archivo; echo $?
#Devuelve 0 si archivo existe y es un dispositivo de caracteres
test -c archivo; echo $?
#Devuelve 0 si archivo existe y es un dispositivo de bloques
test -b archivo; echo $?
#Devuelve 0 si archivo existe y es un pipe
test -p archivo; echo $?
#Devuelve 0 si archivo existe y es socket
test -S archivo; echo $?
#Devuelve 0 si archivo existe y es un enlace blando (simbólico)
test -L archivo; echo $?
#Devuelve 0 si archivo existe y el propietario es el usuario actual
test -O archivo; echo $?
#Devuelve 0 si archivo existe y el propietario es el grupo actual
test -G archivo; echo $?
#Devuelve 0 si archivo existe y tiene activo el sticky bit
test -k archivo; echo $?
#Devuelve 0 si archivo existe y tiene un tamaño mayor que 0
test -s archivo; echo $?
#Devuelve 0 si archivo es más nuevo que archivo2 (fecha de modificación)
test archivo -nt archivo2; echo $?
#Devuelve 0 si archivo es más antiguo que archivo2 (fecha de modificación)
test archivo -ot archivo2; echo $?
Además, la orden test admite el uso de operadores lógicos:
! niega una expresión
-a operador and
-o operador or
() Se permite la agrupación de expresiones con paréntesis
Estas expresiones se pueden evaluar tanto con la orden test como con los dobles corchetes:
$ [[ 3 -lt 9 ]]; echo $?
0
Article automatically imported from my old wordpress blog. Here only for reference. Possible format errors and probable missing images. Sorry about that.