Guia Introdutório do Linux VI

Continuamos nossa série de artigos para iniciantes em Linux. Seguiremos com o uso de comandos. Desta vez veremos como conectar e expandir comandos, como enviar comandos para o background (também veremos o que é isso, se você ainda não souber) e como usar expressões aritméticas.

[ Hits: 58.156 ]

Por: Juliao Junior em 10/08/2007


Conectando comandos



Uma característica poderosa da shell é a capacidade de redirecionar a saída e entrada de dados de um comando para outros comandos ou arquivos. Para permitir que comandos sejam 'enviados' para outros comandos, a shell usa os metacaracteres.

Falamos sobre eles no artigo anterior desta série. Qualquer coisa, dê uma olhada no Guia Introdutório V. Como dito anteriormente, um metacaracter é um caracter digitado normalmente, mas que possui significado especial para a shell.

Conectando comandos

O metacaracter pipe (|) conecta a saída de um comando para a entrada de outro. Isto permite que você tenha um comando trabalhando com dados e então tenha outro comando trabalhando com os resultados desta atividade. Veja um exemplo de uma linha de comando usando pipe:

$ cat /home/usuário/livros | sort | less

Este comando lista o conteúdo do arquivo '/home/usuário/livros' e conecta/envia sua saída para o comando 'sort'. O comando sort toma a lista de livros deste arquivo e analisa cada linha, passando a organizar alfabeticamente pelo início de cada linha. Então tal saída é conectada/enviada para o comando 'less' (como já vimos em artigos anteriores, permite lermos o resultado uma página por vez).

Comandos em seqüência

Algumas vezes você vai desejar que uma seqüência de comandos sejam executados, um por vez, numa determinada ordem. Pode-se fazer isso por digitar os diversos comandos na mesma linha e separando-os por ponto e vírgula (;). Veja um exemplo:

$ date ; ls -sh | less

No exemplo acima, primeiro é impresso na tela a data (date), depois é listado o conteúdo do diretório atual, juntamente com o tamanho de cada item (-sh), e a saída de tal listagem é enviada para o comando 'less', para ser vista uma página por vez.

Comandos no background

Alguns comandos podem demorar para realizar a tarefa que você pediu. Nestes casos você possivelmente não vai querer ficar sentado em frente ao computador, esperando. Então podemos ter nossos comandos rodando no 'background', rodando 'por trás', sem vermos seus efeitos diretamente na tela. Fazemos isso por usar o símbolo '&'.

Comandos para formatar texto são exemplos comuns dos casos onde você vai querer rodar em background. Também é possível criar scripts, algo como mini-programas para rodar em background e checar continuamente certos eventos, como se o HD está lotado, ou se um usuário em particular está logado.

Eis um exemplo de execução de uma linha de comando em background:

$ latex principal.tex &

Explicando a linha acima: latex é uma linguagem poderosa para editoração; 'principal.tex' é o arquivo usado no exemplo para gerar um longo livro de centenas e centenas de páginas, tomando certo tempo, dependendo da configuração da máquina. No fim da sentença, '&' é usado para indicar que a linha de comando deve ser executada em background. Pronto! Após clicar ENTER, o prompt já estará disponível para você novamente, enquanto a linha de comando está sendo executado no background.

    Próxima página

Páginas do artigo
   1. Conectando comandos
   2. Usando expressões aritméticas
   3. Alterando seu shell
Outros artigos deste autor

Programação: Uso de funções

Baixando ISOs-Linux em altíssima velocidade

Trabalhando com arquivos e diretórios

Guia introdutório do Linux IV

Manual de XHTML

Leitura recomendada

Atualizando versões do openSUSE pela internet

Gentoo - Instalação partindo de LiveCD/USB do Sabayon LXDE

Instalação do Archlinux por outro sistema já instalado

nFluxOS, diferentes versões de Debian/Ubuntu e Slackware/Arch Linux

X Window, Controladores de Janelas e Ambientes Desktop

  
Comentários
[1] Comentário enviado por juninho (RH.com) em 10/08/2007 - 09:03h

Tenho acompanhado este seu trabalho de ajudar novos usuários, e tenho adorado, principalmente pela forma que explica, faz parecer mais simples ainda.

Continue escrevendo, está perfeito.

Parabéns.

[2] Comentário enviado por coffnix em 10/08/2007 - 10:35h

Parabéns pelos excelentes artigos! abração

[3] Comentário enviado por weslleyalves em 10/08/2007 - 19:28h

Parabéns, sempre que o curso aperta lah escola a gente recorre aos seus artigos. ;)

[4] Comentário enviado por fcamara em 02/06/2009 - 15:41h

Editor VI - Guia de Referência
Aurélio Marinho Jargas (http://aurelio.net)


Entrar e Sair

vi arquivo.txt <ENTER>
:q <ENTER>
Entrar, Inserir Texto, Salvar e Sair

vi arquivo.txt <ENTER>
i
Minha primeira frase no VI.
<ESC>
:wq <ENTER>
Entrar, Alterar Texto e Sair sem Salvar

vi arquivo.txt <ENTER>
dd
:q! <ENTER>
Entrar, Alterar Texto, Salvar em Outro Arquivo e Sair

vi arquivo.txt <ENTER>
yy
p
:w arquivo-novo.txt <ENTER>
:q <ENTER>
Configurar o VI

vi ~/.vimrc <ENTER>
i
set vb ru nu <ENTER>
set ic is hls scs
<ESC>
:wq <ENTER>
Repetir a Primeira Linha 2 Vezes e Apagar a Última

vi arquivo.txt <ENTER>
gg
yy
p
p
G
dd
Repetir Comandos

vi arquivo.txt <ENTER>
A
FIM
<ESC>
j
.
j
.
Abrir Dois Arquivos Simultaneamente

vi arquivo.txt <ENTER>
:split ~/.vimrc <ENTER>
Ctrl+W
Ctrl+W
:q <ENTER>
:q <ENTER>
Obter Ajuda

vi arquivo.txt <ENTER>
:help <ENTER>


Comandos de Arquivo
:q Sai do VI
:w Salva alteraçoes feitas
:wq Salva aterações e sai do VI
:q! Sai sem salvar
:w abc Grava arquivo com o nome 'abc'
:r abc Insere o conteúdo do arquivo 'abc'
:e abc Edita o arquivo 'abc'
Modo de Inserção
i Entra no modo de Inserção
a Entra no modo de Inserção, após o cursor
o Entra no modo de Inserção, em uma nova linha
<ESC> Sai do modo de Inserção
Copiar, Cortar e Colar
yy Copia a linha inteira
5yy Copia as 5 próximas linhas
dd Apaga a linha
5dd Apaga 5 linhas
x Apaga uma letra
5x Apaga 5 letras
p Cola o trecho copiado ou apagado
V Seleção visual de linhas
Pulos
gg Pula para a primeira linha
G Pula para a última linha
44G Pula para a linha número 44
w Pula para a próxima palavra
b Pula para a palavra anterior
{ Pula para o parágrafo anterior
} Pula para o próximo parágrafo
( Pula para a frase anterior
) Pula para a próxima frase
f. Pula até o próximo ponto (.), na mesma linha
`` Desfaz o pulo, volta
Apagando com esperteza
dgg Apaga até o início do arquivo
d0 Apaga até o início da linha atual
dw Apaga a palavra
d4b Apaga as quatro palavras anteriores
df. Apaga até o próximo ponto
d) Apaga até o fim da frase
Outros
J Junta a próxima linha com a atual
u Desfaz o último comando
Ctrl+R Refaz o último comando desfeito
. Repete o comando anterior
hjkl Movimenta o cursor
/ Pesquisa um texto
n Vai para o próximo resultado da pesquisa
:%s/a/b/g Troca 'a' por 'b' em todo o texto
:!cmd Executa o comando externo 'cmd'
:r!cmd Insere o resultado do comando externo 'cmd'





Mais informações em http://aurelio.net/doc/vim

[5] Comentário enviado por doradu em 03/02/2010 - 17:16h

lembrou-me os tempos do DOS

[6] Comentário enviado por anonimoculto em 03/06/2018 - 11:14h

Vale atenção ao shell que se usa.

No bash, o shell padrão na maioria das distribuições, as expressões matemáticas são calculadas com a forma usando parêntesis duplos: $((2018-1500)). Parêntesis simples são para agrupar comandos e executá-los em um subshell.

Logo, usando-se $(2007-1500) obter-se-á um erro, pois o sistema tentará passar ao comando echo a saída do comando "2007-1500" ; que não existe. O shell retornará: "2007-1500: command not found".

Assim, de forma correta no bash:

$((expressão))

echo "O Brasil foi descoberto há $((2007-1500)) anos."
echo "Nessa escola há $(ls | wc -w) alunos"

É possível utilizar:

$[expressão]

para se processar a operação matemática; mas isto equivale sintaticamente a dizer ao shell para executar o comando interno test ; que avalia operações e condições, e exibir o resultado desse teste. [ ] em bash é sinônimo para "test".

[ 20 -eq 10 ] significa testar se 20 é igual a 10; o que retorna falso (ou seja, 1 é armazenado na variável ?, que pode ser exibida com o comando: echo $? ).

Atenção para o espaço após a "[".

Há uma versão mais avançada de test, dele distinta, representada por parêntesis duplos, com recursos similares e com alguns recursos a mais que o test.

[[ 10 -lt 20 ]] testa se 10 é menor (less then) 20; com código de saída 0 (verdadeiro) neste caso: echo $? --> 0.
[[ "maria" < "lais" ]] testa para ordenamento alfabético; falso pois lais vem antes de maria alfabeticamente: echo $? --> 1.
[[ $maria < $lais ]] testa para ordenamento alfabético os conteúdos das variáveis maria e lais (e não maria e lais propriamente ditos).

mas $[[ 2007-1500 ]] não funciona como desejado, contudo:

" bash: [ 2007 - 1500 ]: syntax error: operand expected (error token is "[ 2007 - 1500 ]") "

O bash usa chaves simples para lidar com variáveis:

${maria} representa o conteúdo da variável "maria".
${maria[2]} representa o conteúdo da lista ordenada (array) "maria" com índice "2".
${maria[@]} o conteúdo de todo o array.

Atenção que, assim como os parêntesis, as chaves também agrupam comandos quando há um " ; " antes da chave de fechamento. Ha espaço entre { e os comandos.

if [[ 10 -lt 20 ]]; then { echo "10 é menor que 20"; echo "E aqui a listagem do diretório corrente $(PWD)"; ls -la ; } else echo "neste exemplo esta parte (else) não é executada"; fi

A saber no exemplo acima, diferente do encontrado em outras linguagens de programação, "if" não é capaz de realizar cálculos ou testes; simplesmente analisa o sucesso ou insucesso ($?) de um teste ou comando ( [[ ]] no caso ).

Maiores detalhes no manual do bash.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts