Unix / Linux - Operadores básicos de shell
Existem vários operadores suportados por cada shell. Discutiremos em detalhes sobre o shell Bourne (shell padrão) neste capítulo.
Vamos agora discutir os seguintes operadores -
- Operadores aritméticos
- Operadores Relacionais
- Operadores booleanos
- Operadores de string
- Operadores de teste de arquivo
O shell Bourne originalmente não tinha nenhum mecanismo para realizar operações aritméticas simples, mas também usa programas externos awk ou expr.
O exemplo a seguir mostra como adicionar dois números -
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
O script acima irá gerar o seguinte resultado -
Total value : 4
Os seguintes pontos devem ser considerados ao adicionar -
Deve haver espaços entre operadores e expressões. Por exemplo, 2 + 2 não está correto; deve ser escrito como 2 + 2.
A expressão completa deve ser colocada entre ‘ ‘, chamado de crase.
Operadores aritméticos
Os seguintes operadores aritméticos são suportados pelo Bourne Shell.
Assumir variável a contém 10 e variável b detém 20 então -
Operador | Descrição | Exemplo |
---|---|---|
+ (Adição) | Adiciona valores em qualquer lado do operador | `expr $ a + $ b` dará 30 |
- (Subtração) | Subtrai operando direito do operando esquerdo | `expr $ a - $ b` dará -10 |
* (Multiplicação) | Multiplica os valores em ambos os lados do operador | `expr $ a \ * $ b` dará 200 |
/ (Divisão) | Divide operando esquerdo pelo operando direito | `expr $ b / $ a` dará 2 |
% (Módulo) | Divide operando esquerdo pelo operando direito e retorna o resto | `expr $ b% $ a` dará 0 |
= (Atribuição) | Atribui o operando direito no operando esquerdo | a = $ b atribuiria o valor de b em a |
== (Igualdade) | Compara dois números, se ambos forem iguais, retorna verdadeiro. | [$ a == $ b] retornaria falso. |
! = (Não Igualdade) | Compara dois números, se ambos forem diferentes, retorna verdadeiro. | [$ a! = $ b] retornaria verdadeiro. |
É muito importante entender que todas as expressões condicionais devem estar entre colchetes com espaços ao redor delas, por exemplo [ $a == $b ] está correto enquanto, [$a==$b] está incorreto.
Todos os cálculos aritméticos são feitos com números inteiros longos.
Operadores Relacionais
Bourne Shell oferece suporte aos seguintes operadores relacionais que são específicos para valores numéricos. Esses operadores não funcionam para valores de string, a menos que seu valor seja numérico.
Por exemplo, os operadores a seguir funcionarão para verificar uma relação entre 10 e 20, bem como entre "10" e "20", mas não entre "dez" e "vinte".
Assumir variável a contém 10 e variável b detém 20 então -
Operador | Descrição | Exemplo |
---|---|---|
-eq | Verifica se os valores de dois operandos são iguais ou não; se sim, então a condição se torna verdadeira. | [$ a -eq $ b] não é verdade. |
-ne | Verifica se os valores de dois operandos são iguais ou não; se os valores não forem iguais, a condição se torna verdadeira. | [$ a -ne $ b] é verdade. |
-gt | Verifica se o valor do operando esquerdo é maior que o valor do operando direito; se sim, então a condição se torna verdadeira. | [$ a -gt $ b] não é verdade. |
-lt | Verifica se o valor do operando esquerdo é menor que o valor do operando direito; se sim, então a condição se torna verdadeira. | [$ a -lt $ b] é verdadeiro. |
-ge | Verifica se o valor do operando esquerdo é maior ou igual ao valor do operando direito; se sim, então a condição se torna verdadeira. | [$ a -ge $ b] não é verdade. |
-le | Verifica se o valor do operando esquerdo é menor ou igual ao valor do operando direito; se sim, então a condição se torna verdadeira. | [$ a -le $ b] é verdade. |
É muito importante entender que todas as expressões condicionais devem ser colocadas entre colchetes com espaços ao redor. Por exemplo,[ $a <= $b ] está correto enquanto, [$a <= $b] está incorreto.
Operadores booleanos
Os seguintes operadores booleanos são suportados pelo Bourne Shell.
Assumir variável a contém 10 e variável b detém 20 então -
Operador | Descrição | Exemplo |
---|---|---|
! | Esta é uma negação lógica. Isso inverte uma condição verdadeira em falsa e vice-versa. | [! false] é verdadeiro. |
-o | Isso é lógico OR. Se um dos operandos for verdadeiro, a condição se torna verdadeira. | [$ a -lt 20 -o $ b -gt 100] é verdade. |
-a | Isso é lógico AND. Se ambos os operandos forem verdadeiros, a condição se torna verdadeira, caso contrário, é falsa. | [$ a -lt 20 -a $ b -gt 100] é falso. |
Operadores de string
Os seguintes operadores de string são suportados pelo Bourne Shell.
Assumir variável a contém "abc" e variável b segura "efg" então -
Operador | Descrição | Exemplo |
---|---|---|
= | Verifica se os valores de dois operandos são iguais ou não; se sim, então a condição se torna verdadeira. | [$ a = $ b] não é verdade. |
!= | Verifica se os valores de dois operandos são iguais ou não; se os valores não forem iguais, a condição se torna verdadeira. | [$ a! = $ b] é verdade. |
-z | Verifica se o tamanho do operando da string fornecido é zero; se tiver comprimento zero, ele retornará verdadeiro. | [-z $ a] não é verdade. |
-n | Verifica se o tamanho do operando da string fornecido é diferente de zero; se o comprimento for diferente de zero, ele retornará verdadeiro. | [-n $ a] não é falso. |
str | Verifica se strnão é a string vazia; se estiver vazio, retornará falso. | [$ a] não é falso. |
Operadores de teste de arquivo
Temos alguns operadores que podem ser usados para testar várias propriedades associadas a um arquivo Unix.
Assuma uma variável file contém um nome de arquivo existente "teste", cujo tamanho é 100 bytes e tem read, write e execute permissão em -
Operador | Descrição | Exemplo |
---|---|---|
-b file | Verifica se o arquivo é um arquivo especial de bloco; se sim, então a condição se torna verdadeira. | [-b $ file] é falso. |
-c file | Verifica se o arquivo é um arquivo especial de caracteres; se sim, então a condição se torna verdadeira. | [-c $ file] é falso. |
-d file | Verifica se o arquivo é um diretório; se sim, então a condição se torna verdadeira. | [-d $ file] não é verdade. |
-f file | Verifica se o arquivo é um arquivo comum em oposição a um diretório ou arquivo especial; se sim, então a condição se torna verdadeira. | [-f $ file] é verdadeiro. |
-g file | Verifica se o arquivo tem seu conjunto de bits de ID de grupo (SGID) definido; se sim, então a condição se torna verdadeira. | [-g $ arquivo] é falso. |
-k file | Verifica se o arquivo tem o bit sticky definido; se sim, então a condição se torna verdadeira. | [-k $ file] é falso. |
-p file | Verifica se o arquivo é um canal nomeado; se sim, então a condição se torna verdadeira. | [-p $ file] é falso. |
-t file | Verifica se o descritor de arquivo está aberto e associado a um terminal; se sim, então a condição se torna verdadeira. | [-t $ file] é falso. |
-u file | Verifica se o arquivo tem seu conjunto de bits Set User ID (SUID); se sim, então a condição se torna verdadeira. | [-u $ arquivo] é falso. |
-r file | Verifica se o arquivo é legível; se sim, então a condição se torna verdadeira. | [-r $ file] é verdadeiro. |
-w file | Verifica se o arquivo é gravável; se sim, então a condição se torna verdadeira. | [-w $ file] é verdadeiro. |
-x file | Verifica se o arquivo é executável; se sim, então a condição se torna verdadeira. | [-x $ file] é verdadeiro. |
-s file | Verifica se o tamanho do arquivo é maior que 0; se sim, então a condição se torna verdadeira. | [-s $ file] é verdadeiro. |
-e file | Verifica se o arquivo existe; é verdadeiro mesmo se o arquivo for um diretório, mas existir. | [-e $ file] é verdadeiro. |
Operadores Shell C
O link a seguir lhe dará uma breve ideia sobre operadores C Shell -
Operadores Korn Shell
O link a seguir ajuda a entender os Operadores Shell Korn -