test es una utilidad de línea de comandos que se encuentra en Unix , Plan 9 y sistemas operativos similares a Unix que evalúa expresiones condicionales . test se convirtió en un comando integrado de shell en 1981 con UNIX System III y al mismo tiempo se puso a disposición con el nombre alternativo [ . [1]
Otros nombres | [ |
---|---|
Desarrollador (es) | Varios desarrolladores comerciales y de código abierto |
Sistema operativo | Unix , similar a Unix , Plan 9 , IBM i |
Plataforma | Multiplataforma |
Tipo | Mando |
Licencia | coreutils : GPLv3 + |
Descripción general
El test
comando en Unix evalúa el expression
parámetro. En las implementaciones de shell más recientes, es un shell incorporado , aunque la versión externa todavía existe. En la segunda forma del comando, los [ ]
(corchetes) deben estar rodeados de espacios en blanco (esto se debe a que [
es un programa y los shells compatibles con POSIX requieren un espacio entre el nombre del programa y sus argumentos). Uno debe probar de forma explícita para nombres de archivo en el shell C . La sustitución del nombre de archivo ( globbing ) hace que se cierre el script de shell.
El test
comando no debe confundirse con la [[
palabra reservada que se introdujo con ksh88. Este último no es un comando, sino que forma parte de la sintaxis ksh88 y no aplica la sustitución del nombre de archivo a las expresiones globales.
La versión de coreutils de GNUtest
incluida fue escrita por Kevin Braunsdorf y Matthew Bradburn. [2] El comando de prueba también se ha trasladado al sistema operativo IBM i . [3]
Sintaxis
expresión de prueba
o
[ expresión ]
Argumentos
Los siguientes argumentos se utilizan para construir este parámetro:
-e FileName - FileName existe
Todos los argumentos restantes devuelven verdadero si el objeto (archivo o cadena) existe y la condición especificada es verdadera.
-b Nombre de archivo: devuelve un valor de salida verdadero si el Nombre de archivo especificado existe y es un archivo especial de bloque -c Nombre de archivo - Nombre de archivo es un carácter archivo especial -d Nombre de archivo - Nombre de archivo es un directorio-f Nombre de archivo - Nombre de archivo es un archivo normal -g Nombre de archivo - El bit de ID de grupo establecido de Nombre de archivo está establecido -h Nombre de archivo - Nombre de archivo es un enlace simbólico -k Nombre de archivo - El bit adhesivo de Nombre de archivo está establecido -L Nombre de archivo - Nombre de archivo es un enlace simbólico -p Nombre de archivo - FileName es una canalización con nombre (FIFO) -r FileName - FileName es legible por el proceso actual -s FileName - FileName tiene un tamaño mayor que 0 -t FileDescriptor - FileDescriptor está abierto y asociado con un terminal -u FileName - Nombre de FileName's Set User El bit de ID está establecido
-w FileName: el indicador de escritura de FileName está activado. Sin embargo, el nombre de archivo no se podrá escribir en un sistema de archivos de solo lectura incluso si la prueba indica verdadero
-x FileName: el indicador de ejecución de FileName está activadoSi el archivo especificado existe y es un directorio, elTrue
valor de salida indica que el proceso actual tiene permiso para cambiarcd
al directorio.
Extensiones no estándar de Korn Shell :
file1 -nt file2 - file1 es más reciente que file2fichero1 -ot fichero2 - archivo1 es más antiguo que archivo2archivo1 -ef archivo2 - fichero1 es otro nombre de archivo 2 - ( enlace simbólico o enlace duro )
Argumentos de cadena
En Perl , estas secciones están invertidas: eq
es un operador de cadena y ==
es un operador numérico, y así sucesivamente para los demás.
-n Cadena1: la longitud de la variable Cadena1 es distinta de cero -z Cadena1: la longitud de la variable Cadena1 es 0 (cero)String1 = String2 - variables de String1 y String2 son idénticosString1 ! = String2 - Las variables String1 y String2 no son idénticasString1: verdadero si la variable String1 no es una cadena nula
Argumentos numéricos
Entero1 -eq Entero2 - Las variables Entero1 y Entero2 son algebraicamente iguales -ne - no igual -gt - mayor que -ge - mayor o igual -lt - menor que -le - menor o igual
Operadores
test
Los argumentos se pueden combinar con los siguientes operadores:
! - Operador de negación unario -a - Operador AND binario -o - Operador OR binario (el-a
operador tiene mayor precedencia que el-o
operador) \ (Expresión \) - Los paréntesis para agrupar deben escaparse con una barra invertida\
Los operadores -a
y -o
, junto con los paréntesis para agrupar, son extensiones XSI [4] y, por lo tanto, no son portables. En secuencias de comandos shell portátiles, el mismo efecto se puede conseguir mediante la conexión de múltiples invocaciones de test
junto con los &&
y ||
operadores y paréntesis.
Estado de salida
Este comando devuelve los siguientes valores de salida:
0 - El parámetro Expresión es verdadero 1 - El parámetro Expresión es falso o falta > 1 - Ocurrió un error
Ejemplos de
1. Para probar si un archivo no existe o está vacío, escriba:
si prueba ! -s " $ 1 ", entonces echo $ 1 no existe o está vacío. fi
Si el archivo especificado por el primer parámetro posicional del procedimiento de shell, $ 1, no existe o es de tamaño 0, el comando de prueba muestra el mensaje. Si $ 1 existe y tiene un tamaño mayor que 0, el comando de prueba no muestra nada.
Nota: Debe haber un espacio entre la función -s y el nombre del archivo.
Las comillas alrededor de $ 1 aseguran que la prueba funcione correctamente incluso si el valor de $ 1 es una cadena nula. Si se omiten las comillas y $ 1 es la cadena vacía, el comando de prueba muestra el mensaje de error:
prueba: argumento esperado.
2. Para hacer una comparación compleja, escriba:
si [ " $ # " -lt 2 ] || ! [ -e " $ 1 " ] luego salga de fi
Si el procedimiento de shell tiene menos de dos parámetros posicionales o el archivo especificado por $ 1 no existe, se cierra el procedimiento de shell. La variable de shell especial $ # representa el número de parámetros posicionales ingresados en la línea de comando que inicia este procedimiento de shell.
Ver también
- Lista de comandos de Unix
- Shell de Unix
- buscar (Unix)
Referencias
- ^ http://www.in-ulm.de/~mascheck/bourne/#system3 Bourne Shell cambia con System III
- ^ prueba (1) - coreutils - Debian buster - Debian Manpages
- ^ IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . Consultado el 5 de septiembre de 2020 .
- ^ IEEE Std 1003.1, 2004, documentación paratest
Otras lecturas
- Robbins, Arnold; Nelson HF Beebe (2005). "6.2.4 El comando de prueba". Secuencias de comandos clásicas de Shell: comandos ocultos que desbloquean el poder de Unix . O'Reilly Media, Inc. págs. 120-128. ISBN 978-0-596-55526-9.
- Ian Shields (20 de febrero de 2007). "Consejo de Linux: funciones de comparación y prueba de bash" . IBM DeveloperWorks .
- William Shotts (2013). "27 - Control de flujo: ramificación con if". La línea de comandos de Linux . Sin prensa de almidón. págs. 381–390. ISBN 978-1-59327-389-7. (Descarga gratis)
enlaces externos
- - Referencia de comandos y utilidades, la especificación única de UNIX , número 7 de The Open Group
- - Manual de comandos de usuario de Linux
- - Manual del programador de Plan 9 , Volumen 1