Comando Linux test
Manual completo de comandos Linux
testEs un comando integrado en el sistema Linux/Unix utilizado para la evaluación de condiciones. Se usa principalmente en scripts de shell para realizar diversas pruebas y operaciones de comparación. Puede verificar atributos de archivos, comparar cadenas y valores numéricos, y es una herramienta indispensable para escribir scripts de shell.
Sintaxis básica
test EXPRESSION # 或者使用方括号格式(更常用) [ EXPRESSION ]
Nota: cuando se utiliza el formato de corchetes, debe haber un espacio entre la expresión y los corchetes, es decir
[空格EXPRESSION空格]
Clasificación de funciones principales
1. Pruebas de archivos
Verifica varios atributos de archivos o directorios:
| Expresión | Significado |
|---|---|
-e 文件 |
El archivo existe |
-f 文件 |
Es un archivo normal (no un directorio ni un archivo de dispositivo) |
-d 文件 |
Es un directorio |
-s 文件 |
El tamaño del archivo no es cero (no está vacío) |
-r 文件 |
El archivo es legible |
-w 文件 |
El archivo es escribible |
-x 文件 |
El archivo es ejecutable |
-L 文件 |
El archivo es un enlace simbólico |
Ejemplo:
Ejemplo
echo "Este es un archivo normal"
fi
2. Comparación de cadenas
Compara la relación entre dos cadenas:
| Expresión | Significado |
|---|---|
-z "字符串" |
La longitud de la cadena es 0 |
-n "字符串" |
La longitud de la cadena no es 0 |
"串1" = "串2" |
Las cadenas son iguales |
"串1" != "串2" |
Las cadenas no son iguales |
Ejemplo:
Ejemplo
if [ -z "$username" ]; then
echo "El nombre de usuario no puede estar vacío"
fi
3. Comparación numérica
Compara la relación de magnitud entre dos números enteros:
| Expresión | Significado |
|---|---|
n1 -eq n2 |
Igual a (equal) |
n1 -ne n2 |
Diferente de (not equal) |
n1 -gt n2 |
Mayor que (greater than) |
n1 -ge n2 |
Mayor o igual que |
n1 -lt n2 |
Menor que (less than) |
n1 -le n2 |
Menor o igual que |
Ejemplo:
Ejemplo
echo "Actualmente es el usuario root"
fi
4. Operadores lógicos
Combina múltiples condiciones de prueba:
| Operador | Significado | Ejemplo |
|---|---|---|
! |
Negación lógica | [ ! -f file ] |
-a |
Y lógico (AND) | [ -f file -a -r file ] |
-o |
O lógico (OR) | [ -d dir -o -f file ] |
Forma moderna recomendada(usando&&y||):
Ejemplo
[ -d dir ] || [ -f file ] # Es un directorio o es un archivo
Uso avanzado
1. Evaluación de condiciones compuestas
Ejemplo
echo "El archivo existe y es legible"
fi
2. Combinación con la sentencia if
Ejemplo
echo "Iniciando servicio..."
elif [ "$1" = "stop" ]; then
echo "Deteniendo servicio..."
else
echo "Parámetro inválido"
fi
3. Uso en asignación de variables
Ejemplo
Errores comunes y precauciones
Problemas con los espacios:
Ejemplo
[ "$var"="value" ] # Error, falta un espacio
Comillas en variables de cadena:
Ejemplo
[ -n $var ] # Cuando $var está vacío, se produce un error
Comparación numérica y comparación de cadenas:
Ejemplo
[ "10" > "2" ] # Error, esto es una comparación de cadenas (orden lexicográfico)
Ruta en las pruebas de archivos:
Ejemplo
[ -f $file ] # Se producirá un error cuando la ruta contenga espacios
Ejemplos de aplicación práctica
Ejemplo 1: Comprobar si existe el directorio de respaldo
Ejemplo
if [ ! -d "$backup_dir" ]; then
mkdir -p "$backup_dir"
echo "Creando directorio de respaldo:"$backup_dir"
fi
Ejemplo 2: Validar la entrada del usuario
Ejemplo
if [ "$age" -lt 0 -o "$age" -gt 120 ]; then
echo "Entrada de edad inválida"
exit 1
fi
Ejemplo 3: Script de inicio de servicio
Ejemplo
if [ "$1" = "start" ]; then
if [ -f "/var/run/service.pid" ]; then
echo "El servicio ya está en ejecución"
else
echo "Iniciando servicio..."
# Comando de inicio
fi
elif [ "$1" = "stop" ]; then
# Lógica de detención
else
echo "Uso: $0 {start|stop}"
fi
Resumen
testEl comando es una herramienta fundamental en la programación de scripts de shell. Dominarlo permite:
- Implementar lógica de ramificación condicional
- Verificar el estado de archivos y directorios
- Comparar cadenas y valores numéricos
- Construir condiciones de evaluación complejas
Recuerde los puntos clave:
- El formato de corchetes es más común, pero preste atención a los espacios
- Las referencias a variables deben ir entre comillas dobles
- Distinga entre los operadores de comparación de cadenas y de comparación numérica
- Use la forma moderna
&&y||en lugar de-ay-o