expr - Definição e uso do comando

Neste artigo será apresentado o comando expr. Este comando é utilizado para cálculos feitos em linha de comando em Shell Scripts. Funciona com expressões numéricas, expressões lógicas ou expressões regulares e Strings.

[ Hits: 21.802 ]

Por: Perfil removido em 29/06/2015


Introdução



O comando expr está presente no conjunto de utilitários coreutils da GNU. Assim como o comando bc, com certas diferenças, pode ser utilizado para cálculos feitos em linha de comando. Ele pode efetuar cálculos com expressões numéricas inteiras, expressões lógicas (ou booleanas), expressões regulares (regex) e strings.

Ele não é completo como a calculadora de mesa bc, portanto, possui algumas limitações, como cálculos com frações, mas é suficiente em recursos para Shell Script.

Neste artigo, serão apresentados exemplos que ilustram como este simples comando pode ser poderoso e quais os usos que podem ser feitos com sua sintaxe.

Cálculos com expressões numéricas

Os cálculos são feitos usando-se uma sintaxe simples. Obedece à sintaxe de precedência das velhas expressões numéricas (primeiro parêntesis, depois multiplicação e divisão, por último adição e subtração) aprendidas nos primeiros anos da escola.

A sintaxe pede que seja deixado um "espaço em branco" entre o número e o operador, para que estes não sejam interpretados como uma String.

Por exemplo:

expr 5 + 4
Retorna: 9

expr 5 - 4
Retorna: 1

expr 5 * 4
Retorna erro.

A partir daqui percebe-se que deve-se colocar o operador entre aspas simples ou duplas, mesmo o operador + e o operador - que não apresentou este erro. Os operadores e os parêntesis também podem ser usados colocando a barra invertida \.

expr 5 '*' 4
Retorna: 20

Também pode ser escrito com:

expr 5 \* 4
E também retorna: 20

Parêntesis também devem estar com aspas simples ou duplas, ou com a barra invertida. Sem o uso de um ou de outro, é acusado erro.

expr '(' 5 '+' 4 ')' '*' 2
Retorna 18, porque os cálculos dentro de parêntesis são prioridade.

Agora sem os parêntesis:

expr 5 '+' 4 '*' 2
Retorna 13, porque a operação * tem a precedência sobre a operação +.

E o que ocorre nas divisões não-exatas?

expr 15 '/' 4
Retorna 3, que é a parte inteira deste quociente. O operador / não apresentou erro quando foi usado sem aspas.

Apesar de não operar com decimais (para isto é melhor o comando bc), opera com inteiros negativos:

expr -5 '*' -4
Retorna: 20

Também opera módulo (resto de divisão inteira):

expr 15 '%' 4
Retorna: 3

Ainda há uma diferença na operação de módulo se forem usados valores negativos:

expr -15 % 4
Retorna: -3

expr -15 % -4
Retorna: -3

expr 15 % -4
Retorna: 3

Concluindo: pode-se dizer que expr não faz cálculos de exponenciação, nem de raiz quadrada ou outra raiz, nem frações decimais ou em outra base. Para isto, é melhor usar o comando bc.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Cálculos com expressões lógicas
   3. Cálculos com expressões regulares e strings
   4. Resumo e revisão
   5. Saída de erros
Outros artigos deste autor

Como fazer seu programa Kylix chamar uma aplicação externa

Migrando para Linux sem medo

Regulamentação das profissões na área de informática

Instalação e configuração do fluxbox-devel

Distribuições Linux no Samsung Chromebook ARM (XE303C12)

Leitura recomendada

Como matar um processo - kill, killall, pkill e xkill

Debugando shell scripts

Introduzindo prazerosamente aos poucos... o shell script

Recursos avançados do bash que você não aprende na escola

Shell - Funções

  
Comentários
[1] Comentário enviado por fabio em 29/06/2015 - 16:29h

Muito bom o artigo! Esse comando é uma mão-na-roda.

[2] Comentário enviado por morvan em 06/07/2015 - 11:06h

Bom dia.
Excelente artigo. Ferramenta muito útil, ainda que pouquíssimo conhecida | utilizada; eu a utilizo, por exemplo, em scripts (claro) e também quando preciso calcular tamanho de partições (normalmente, os CD de Recuperação são muito parcimoniosos de ferramentas, como calculadora, gráfica, no caso, daí recorro ao Console do Sistema).
Morvan, Usuário GNU-Linux #433640. Seja Legal; seja Livre. Use GNU-Linux.

[3] Comentário enviado por removido em 09/07/2015 - 02:50h

Obrigado a todos.

Faltou uma coisa: o limite dos cálculos numéricos é apenas até números de 64 bits, positivos e negativos, com bit identificador de sinal.
--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts