Shell Script II
      Carlos Melo
 Sistemas Operacionais
Direcionadores
  Direcionadores de fluxo fazem o que o nome sugere:
 direcionam o fluxo da saída dos programas, enviando-as para
 locais diferentes da saída padrão. Esses locais podem ser
 arquivos, dispositivos, processos e outros programas.
  O direcionadores utilizados no GNU/Linux são: > (maior):
 Direciona a saída do comando para um arquivo, substituindo o
 seu conteúdo, caso o arquivo já exista;
  >> (maior-maior): Direciona a saída do comando para um
    arquivo, adicionando o texto ao final do arquivo, caso ele já
    exista;
  < (menor): Passa o conteúdo do arquivo como argumento
    para o comando;
  2> (dois-maior): Direciona as saídas de erro geradas pelo
    programa para um arquivo, substituindo seu conteúdo, caso
    o arquivo já exista;
Direcionadores
  2>> (dois-maior-maior): Direciona as saídas de erro
    geradas pelo programa para um arquivo, adicionando o
    texto ao final do arquivo, caso ele já exista;
  &> (e-maior): Direciona todas as saídas (normal e de
   erro) para um arquivo, substituindo seu conteúdo, caso
   ele já exista;
  &>> (e-maior-maior): Direciona todas as saídas (normal e
   de erro) para um arquivo, adicionando o texto ao final
   do arquivo, caso ele já exista;
  | (barra vertical ou pipe): Utiliza a saída do primeiro
     comando como argumento do segundo comando.
O direcionador >

O direcionador > direciona a saída padrão de um comando
  para um arquivo. Caso o arquivo exista, o seu conteúdo é
  substituído.

  $ ps aux > processos.list

  Agora, nada é impresso no terminal. Por que? Porque a
  saída foi direcionada para o arquivo processos.list.
  Verifique o conteúdo do arquivo.
O direcionador 2>

  Uma restrição ao uso do direcionador > é que ele não funciona para
 mensagens de erro. Por exemplo, vamos usar o comando ps aux
 usando como parâmetro um processo inexistente.
 $ ls diretorio_inexistente > diretorios.list
 Observe que, mesmo usando o direcionador >, a mensagem de erro
 foi exibida. Se visualizarmos o conteúdo do arquivo ls_out veremos
 que nada foi gravado.
 Para gravar as mensagens de erro, devemos usar o direcionador 2>:
 $ ls diretorio_inexistente 2> diretorios.list
 Agora sim, nenhuma mensagem de erro foi exibida na tela, porque
 ela foi enviada para o arquivo diretorios.list, verifique o resultado.
O direcionador <

    Uma função muito útil dos direcionadores é utilizar o conteúdo
  de arquivos como parâmetros de comandos. Para isso
  utilizamos o direcionador <. Como exemplo, vamos criar um
  lista de programas que devem ser executados em seqüência,
  no arquivo lista.exec, da seguinte forma:
$ cat lista.exec
   ls
   cat arquivo_inexistente

  Agora, utilizamos o comando exec para executar os comandos
  listados no arquivo lista.exec, da seguinte forma:
$ exec < lista.exec
O direcionador <<
 Temos ainda o direcionador <<, utilizado para marcar o fim de
exibição de um bloco. Um dos usos mais freqüentes desse
direcionador é em conjunto com o comando cat.

O comando abaixo termina o comando cat quando for digitada a
palavra "fim":

$ cat << fim
> O comando só termina
> quando for digitada
> a palavra especificada
> depois do direcionador
> <<, nesse caso, a palavra
> é "fim"
> fim
Exemplo:

  Poderiámos usar isso para inserir texto em um arquivo
 sem precisar usar nenhum editor de texto. Vamos
 inserir, por exemplo, uma linha ao final do arquivo
 /etc/fstab:

 $ cat << FIM >> /etc/fstab
 > /dev/sda /mnt/usb vfat rw,user,noauto,sync 0 0
 > FIM
O direcionador |

   Por fim, temos o último direcionador, o |, também
  conhecido como pipe (duto, cano), utilizado para
  direcionar a saída de um comando para outro comando, e
  é utilizado todo o tempo para a realização de todo tipo de
  tarefas e procedimentos.
   Um dos usos mais comuns do | é com os comandos ls e
  more (ou less), para ver o conteúdo de um
  diretório, quando este não cabe na tela, como o diretório
  /etc, por exemplo. Para que possamos ver todos os
  arquivos, direcionamos a saída do ls para o more, que faz
  a paginação do conteúdo:
  $ ls /etc | more
Fim

Dúvidas?

Shell script ii direcionadores

  • 1.
    Shell Script II Carlos Melo Sistemas Operacionais
  • 2.
    Direcionadores Direcionadoresde fluxo fazem o que o nome sugere: direcionam o fluxo da saída dos programas, enviando-as para locais diferentes da saída padrão. Esses locais podem ser arquivos, dispositivos, processos e outros programas. O direcionadores utilizados no GNU/Linux são: > (maior): Direciona a saída do comando para um arquivo, substituindo o seu conteúdo, caso o arquivo já exista; >> (maior-maior): Direciona a saída do comando para um arquivo, adicionando o texto ao final do arquivo, caso ele já exista; < (menor): Passa o conteúdo do arquivo como argumento para o comando; 2> (dois-maior): Direciona as saídas de erro geradas pelo programa para um arquivo, substituindo seu conteúdo, caso o arquivo já exista;
  • 3.
    Direcionadores 2>>(dois-maior-maior): Direciona as saídas de erro geradas pelo programa para um arquivo, adicionando o texto ao final do arquivo, caso ele já exista; &> (e-maior): Direciona todas as saídas (normal e de erro) para um arquivo, substituindo seu conteúdo, caso ele já exista; &>> (e-maior-maior): Direciona todas as saídas (normal e de erro) para um arquivo, adicionando o texto ao final do arquivo, caso ele já exista; | (barra vertical ou pipe): Utiliza a saída do primeiro comando como argumento do segundo comando.
  • 4.
    O direcionador > Odirecionador > direciona a saída padrão de um comando para um arquivo. Caso o arquivo exista, o seu conteúdo é substituído. $ ps aux > processos.list Agora, nada é impresso no terminal. Por que? Porque a saída foi direcionada para o arquivo processos.list. Verifique o conteúdo do arquivo.
  • 5.
    O direcionador 2> Uma restrição ao uso do direcionador > é que ele não funciona para mensagens de erro. Por exemplo, vamos usar o comando ps aux usando como parâmetro um processo inexistente. $ ls diretorio_inexistente > diretorios.list Observe que, mesmo usando o direcionador >, a mensagem de erro foi exibida. Se visualizarmos o conteúdo do arquivo ls_out veremos que nada foi gravado. Para gravar as mensagens de erro, devemos usar o direcionador 2>: $ ls diretorio_inexistente 2> diretorios.list Agora sim, nenhuma mensagem de erro foi exibida na tela, porque ela foi enviada para o arquivo diretorios.list, verifique o resultado.
  • 6.
    O direcionador < Uma função muito útil dos direcionadores é utilizar o conteúdo de arquivos como parâmetros de comandos. Para isso utilizamos o direcionador <. Como exemplo, vamos criar um lista de programas que devem ser executados em seqüência, no arquivo lista.exec, da seguinte forma: $ cat lista.exec ls cat arquivo_inexistente Agora, utilizamos o comando exec para executar os comandos listados no arquivo lista.exec, da seguinte forma: $ exec < lista.exec
  • 7.
    O direcionador << Temos ainda o direcionador <<, utilizado para marcar o fim de exibição de um bloco. Um dos usos mais freqüentes desse direcionador é em conjunto com o comando cat. O comando abaixo termina o comando cat quando for digitada a palavra "fim": $ cat << fim > O comando só termina > quando for digitada > a palavra especificada > depois do direcionador > <<, nesse caso, a palavra > é "fim" > fim
  • 8.
    Exemplo: Poderiámosusar isso para inserir texto em um arquivo sem precisar usar nenhum editor de texto. Vamos inserir, por exemplo, uma linha ao final do arquivo /etc/fstab: $ cat << FIM >> /etc/fstab > /dev/sda /mnt/usb vfat rw,user,noauto,sync 0 0 > FIM
  • 9.
    O direcionador | Por fim, temos o último direcionador, o |, também conhecido como pipe (duto, cano), utilizado para direcionar a saída de um comando para outro comando, e é utilizado todo o tempo para a realização de todo tipo de tarefas e procedimentos. Um dos usos mais comuns do | é com os comandos ls e more (ou less), para ver o conteúdo de um diretório, quando este não cabe na tela, como o diretório /etc, por exemplo. Para que possamos ver todos os arquivos, direcionamos a saída do ls para o more, que faz a paginação do conteúdo: $ ls /etc | more
  • 10.