test es una utilidad de línea de comandos que se encuentra en Unix , Plan 9 y sistemas operativos similares a Unix y 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]
Descripción general
El testcomando en Unix evalúa el expressionparámetro. En las implementaciones de shell más recientes, es un comando incorporado de shell , aunque todavía existe la versión externa. 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). Se deben probar explícitamente los nombres de archivo en el shell C. La sustitución de nombres de archivo ( globbing ) hace que el script de shell salga.
El testcomando no debe confundirse con la [[palabra reservada que se introdujo con ksh88. Esta última no es un comando sino parte de la sintaxis de ksh88 y no aplica la sustitución de nombre de archivo a expresiones glob.
La versión testincluida en GNU coreutils fue escrita por Kevin Braunsdorf y Matthew Bradburn. [2] El comando está disponible como un paquete separado para Microsoft Windows como parte de la colección UnxUtils de puertos Win32 nativos de utilidades comunes de GNU similares a Unix. [3] El comando de prueba también ha sido portado al sistema operativo IBM i . [4]
Sintaxis
test expressiono[ expression ]
Argumentos
Los siguientes argumentos se utilizan para construir este parámetro. Todos los argumentos devuelven Truesi el objeto (archivo o cadena) existe y la condición especificada es verdadera.
Para el -xargumento, si el archivo especificado existe y es un directorio, el Truevalor de salida indica que el proceso actual tiene permiso para cambiar cdal directorio.
No estándarCáscara de maízextensiones
file1 -nt file2 - el archivo1 es más nuevo que el archivo2 file1 -ot file2 - el archivo1 es más antiguo que el archivo2 file1 -ef file2 - file1 es otro nombre para file2 - ( enlace simbólico o enlace duro )
Argumentos de cadena
En Perl , estas secciones están invertidas: eqes un operador de cadena y ==es un operador numérico, y así sucesivamente para los demás.
-n String1 - la longitud de la variable String1 es distinta de cero -z String1 - la longitud de la variable String1 es 0 (cero) String1 = String2 - Las variables String1 y String2 son idénticas String1 != String2 - Las variables String1 y String2 no son idénticas String1 - verdadero si la variable String1 no es una cadena nula
Argumentos numéricos
Integer1 -eq Integer2 - Las variables Integer1 y Integer2 son algebraicamente iguales -ne - no igual -gt - mayor que -ge - mayor o igual -lt - menor que -le - menor o igual
Operadores
testLos argumentos se pueden combinar con los siguientes operadores:
! - Operador de negación unario -a - Operador AND binario -o - Operador OR binario (el-aoperador tiene mayor precedencia que el-ooperador ) \(Expresión\) - Los paréntesis para agrupar deben escaparse con una barra invertida\
Los operadores -ay -o, junto con los paréntesis para agrupar, son extensiones XSI [5] y, por lo tanto, no son portables. En los scripts de shell portables, se puede lograr el mismo efecto conectando múltiples invocaciones de testcon los operadores &&y ||y los 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
1. Para comprobar 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 tiene un tamaño de 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 que rodean $1 garantizan 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 " ] entonces salir fi
Si se proporcionan menos de dos parámetros posicionales al procedimiento de shell o el archivo especificado por $1 no existe, el procedimiento de shell finaliza. La variable especial de shell $# representa la cantidad de parámetros posicionales ingresados en la línea de comandos que inicia este procedimiento de shell.
Véase también
Referencias
- ^ http://www.in-ulm.de/~mascheck/bourne/#system3 Cambios en Bourne Shell con System III
- ^ test(1) — coreutils — Debian buster — Páginas de manual de Debian
- ^ "Puertos Win32 nativos de algunas utilidades GNU". unxutils.sourceforge.net .
- ^ IBM . "Programación Qshell para IBM System i versión 7.2" (PDF) . IBM . Consultado el 5 de septiembre de 2020 .
- ^ IEEE Std 1003.1, 2004, documentación para pruebas
Lectura adicional
- Robbins, Arnold; Nelson HF Beebe (2005). "6.2.4 El comando test". Scripting clásico de shell: comandos ocultos que liberan 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 para Linux: funciones de prueba y comparación de Bash". IBM DeveloperWorks .
- William Shotts (2013). "27 – Control de flujo: ramificación con if". La línea de comandos de Linux. No Starch Press. págs. 381–390. ISBN 978-1-59327-389-7.(Descarga gratuita)
Enlaces externos
- – Referencia de shell y utilidades, la especificación única de UNIX , versión 4 de The Open Group
- – Manual de comandos de usuario de Linux
- – Manual del programador de Plan 9 , volumen 1