>_Operadores


Comandos intermediários do GNU/Linux

Operadores


Conhecendo como um comando funciona, podemos utilizar operadores a fim de alterar as entradas e saídas dos comandos. Os operadores mais utilizados são:

Os operadores são: >, >>, <, 2> e | (o mais importante!).Os operadores > e >>
Os operadores > e >> são usados para redirecionar a saída de um programa para um arquivo. A sintaxe é muito simples que dá pena:

* comando > arquivo
* comando >> arquivo

O operador >

é usado para sobrescrever um arquivo com a saída do comando. Por exemplo:

$ ls > arqs
A saída não será nenhuma se tudo ocorreu bem. Agora ao dar “ls” normalmente você verá um arquivo a mais que é o ‘arqs’. Tente dar um cat:

$ cat arqs
(saída do cmd ‘ls’)

Você pode usar o comando echo para escrever mensagens personalizadas. Veja como:$ echo “É só um teste” > arqs
$ cat arqs
É só um teste

Algumas características:

* O arquivo será sobrescrito! Cuidado para não fazer nenhuma m…
* Caso não se tenha permissão para escrever no arquivo, vai dar erro (o que tu esperava?).
* Caso o arquivo não exista, ele será criado.

O operador >>
Seria a mesma coisa que o >, mas com uma diferença: ele não sobrescreve o arquivo. Neste caso você poderá escrever mais. Dê uma olhada:

$ rm teste
-> É bom, caso o arquivo exista poderá nos atrapalhar um pouco

$ echo “Os arquivos são:” >> teste
$ ls ~ >> teste
$ echo “Fim dos arquivos:” >> teste
$ cat teste
Os arquivos são:
(os arquivos do diretório $HOME)
Fim dos arquivos:

Tente fazer com o operador > e compare o resultado.
As características são a mesmas, com a diferença que o arquivo não será sobrescrito.

O operador <
A função deste operador é o contrário do >: ao invés de mandar a saída do comando para o arquivo, ele manda o arquivo como entrada do comando.

$ less
Vai
digitando
qualquer
coisa
aqui
^D

Então aparecerá o “less” listando o texto página a página. O ^D no final, quer dizer, “Ctrl+D”, significa “Fim de arquivo”.

Agora tente fazer um arquivo com o nome de “teste”, digite qualquer coisa.

$ less < teste
(saída do comando less)

Seria o mesmo que você digitar tudo que tem no arquivo como entrada, mas como o pessoal do Unix tem bom senso :), eles automatizaram isso. O ^D também é automatizado.

Este operador pode facilmente ser substituído pelo pipe (|), junto com o comando ‘cat’.

O operador 2>
Quando vai se testar o operador >, você pode facilmente verificar que ele não redireciona mensagens de erro. Por exemplo:

(supondo que o arquivo arq.teste não existe)

$ cat arq.teste > novo texto aqui
cat: arq.teste: file not found

$ cat novo texto aqui

O operador 2> tem esta função: redirecionar somente as mensagens de erro para um arquivo. Vejamos o mesmo exemplo acima:

$ cat arq.teste 2> aaa
$ cat novo texto aqui
cat: arq.teste: file not found

Poderemos também usar este operador em conjunto com o > ou >>, veja como:

$ comando > out 2> err

OBS: “out” e “err” podem variar

O pipe
Este é, com certeza, o mais importante de todos os operadores de redirecionamento. O pipe é bem complexo ao se comparar com os outros operadores, mas vale è pena conhecer.

A sintaxe:

$ comando1 | comando2

O que o pipe faz é redirecionar a saída do comando1 para entrada do comando2.

Imagine que o comando “comando1” mostre a frase “evandro couto” e o comando “comando2”  transforma cada espaço em um ‘-‘. Veja:
Resultado dos dois comando seria

# evandro-couto
Esta é uma noção. Veja alguns comandos que trabalham muito bem com o pipe: * echo
* cat
* less
* more
* sed
* awk
* etc
outros operadores
  • ; separa um comando do outro
  • 2>&1 transforma a StdErr em StdOut
  • && operador “e”, testa o valor da variável $?
  • || operador “ou”, testa o valor da variável $?
Exemplos:
Para executar três comandos em sequência, independente do resultado de cada um, utiliza-se o formato:
comando1 ; comando2 ; comando3
Executar o comando seguinte apenas se o anterior foi bem sucedido (se retormou 0);
comando1 && comando2 && comando3
Executar o comando seguinte apenas se o anterior não foi bem sucedido (se retornou diferente de 0):
comando1 || comando2 || comando3
Algumas variáveis embutidas do BASH
  • $!: PID do último processo executado
  • $$: PID do shell atual
  • $?: Retorna o valor 0 se o últim comando foi bem sucedido, caso contrário retorna o valor 1