teste (Unix) - test (Unix)

teste
Outros nomes [
Desenvolvedor (s) Vários open-source e comerciais desenvolvedores
Sistema operacional Unix , semelhante ao Unix , Plan 9 , IBM i
Plataforma Plataforma cruzada
Modelo Comando
Licença coreutils : GPLv3 +

test é um utilitário de linha de comando encontrado em Unix , Plan 9 e sistemas operacionais semelhantes ao Unix que avalia expressões condicionais . test foi transformado em um comando shell embutido em 1981 com UNIX System III e ao mesmo tempo disponibilizado sob o nome alternativo [ .

Visão geral

O test comando no Unix avalia o expression parâmetro. Nas implementações de shell mais recentes, é um shell embutido , embora a versão externa ainda exista. Na segunda forma do comando, os [ ] (colchetes) devem ser circundados por espaços em branco (isso porque [ é um programa e os shells compatíveis com POSIX exigem um espaço entre o nome do programa e seus argumentos). Deve-se testar explicitamente os nomes de arquivo no C shell . A substituição do nome do arquivo ( globbing ) faz com que o script de shell seja encerrado.

O test comando não deve ser confundido com a [[ palavra reservada que foi introduzida com ksh88. O último não é um comando, mas parte da sintaxe ksh88 e não aplica a substituição de nome de arquivo a expressões glob.

A versão do test pacote GNU coreutils foi escrita por Kevin Braunsdorf e Matthew Bradburn. O comando de teste também foi transferido para o sistema operacional IBM i .

Sintaxe

test expression

ou

[ expression ]

Argumentos

Os seguintes argumentos são usados ​​para construir este parâmetro:

-e FileName - FileName exists

Todos os argumentos restantes retornam verdadeiro se o objeto (arquivo ou string) existir e a condição especificada for verdadeira.

-b Filename - Returns a True exit value if the specified FileName exists and is a block special file
-c FileName - FileName is a character special file
-d FileName - FileName is a directory

-f FileName - FileName is a regular file
-g FileName - FileName's Set Group ID bit is set
-h FileName - FileName is a symbolic link
-k FileName - FileName's sticky bit is set
-L FileName - FileName is a symbolic link
-p FileName - FileName is a named pipe (FIFO)
-r FileName - FileName is readable by the current process
-s FileName - FileName has a size greater than 0
-t FileDescriptor - FileDescriptor is open and associated with a terminal
-u FileName - FileName's Set User ID bit is set
-w FileName - FileName's write flag is on. However, the FileName will not be writable on a read-only file system even if test indicates true
-x FileName - FileName's execute flag is on
If the specified file exists and is a directory, the True exit value indicates that the current process has permission to change cd into the directory.

Extensões Korn Shell não padrão :

file1 -nt file2 - file1 is newer than file2
file1 -ot file2 - file1 is older than file2
file1 -ef file2 - file1 is another name for file2 - (symbolic link or hard link)

Argumentos de string

Em Perl , essas seções são invertidas: eq é um operador de string e == é um operador numérico e assim por diante para os outros.

-n String1 - the length of the String1 variable is nonzero
-z String1 - the length of the String1 variable is 0 (zero)
String1 = String2 - String1 and String2 variables are identical
String1 != String2 - String1 and String2 variables are not identical
String1 - true if String1 variable is not a null string

Argumentos numéricos

Integer1 -eq Integer2 - Integer1 and Integer2 variables are algebraically equal
-ne - not equal
-gt - greater than
-ge - greater or equal 
-lt - less than
-le - less or equal

Operadores

test argumentos podem ser combinados com os seguintes operadores:

! - Unary negation operator
-a - Binary AND operator
-o - Binary OR operator (the -a operator has higher precedence than the -o operator)
\(Expression\) - Parentheses for grouping must be escaped with a backslash \

Os operadores -a e -o , junto com parênteses para agrupamento, são extensões XSI e, portanto, não são portáteis. Em scripts shell portáteis, o mesmo efeito pode ser conseguido ligando várias chamadas de test juntamente com os && e || operadores e parênteses.

Status de saída

Este comando retorna os seguintes valores de saída:

0 - The Expression parameter is true
1 - The Expression parameter is false or missing
>1 - An error occurred

Exemplos

1. Para testar se um arquivo é inexistente ou vazio, digite:

 if test ! -s "$1"
 then
   echo $1 does not exist or is empty.
 fi

Se o arquivo especificado pelo primeiro parâmetro posicional para o procedimento de shell, $ 1, não existir ou for de tamanho 0, o comando de teste exibirá a mensagem. Se $ 1 existe e tem um tamanho maior que 0, o comando de teste não exibe nada.

Nota: Deve haver um espaço entre a função -s e o nome do arquivo.

As aspas em torno de $ 1 garantem que o teste funcione corretamente, mesmo se o valor de $ 1 for uma string nula. Se as aspas forem omitidas e $ 1 for a string vazia, o comando de teste exibirá a mensagem de erro:

test: argument expected.

2. Para fazer uma comparação complexa, digite:

 if [ "$#" -lt 2 ] || ! [ -e "$1" ]
 then
   exit
 fi

Se o procedimento shell receber menos de dois parâmetros posicionais ou se o arquivo especificado por $ 1 não existir, o procedimento shell será encerrado. A variável shell especial $ # representa o número de parâmetros posicionais inseridos na linha de comando que inicia este procedimento shell.

Veja também

Referências

Leitura adicional

links externos