3. PĈrÃpÃTuryyÃ4
◊
Q…‚t…h€hĈrÃp‚rp‡hÃrÃv‡r…ƒ…r‡h
p‚€hq‚†
◊
Gvtˆhtr€ÃqrÃ…‚t…h€hom‚
p‚€ƒyr‡hÃÃv‡r…ƒ…r‡hqh
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
◊
– possui variáveis
– construções condicionais e
interativas
– ambiente adaptável ao usuário
V€hÃqh†Ãyvtˆhtr†Ã‚…vtvhv†Ãqr
„ˆh…‡hÃtr…hom‚Ã#BG
Tv€ƒyvpvqhqrÃq‚ÃTuryy
– pipeline
– sistemas de arquivos
– sistema operacional UNIX
• O programa †uryy interpreta os comandos que você digita e os traduz para
comandos que o xr…ry compreende.
• Turyy) é uma linguagem de programação completa, possuindo variáveis,
construções condicionais, interativas e ambiente adaptável ao usuário. O Shell do
Unix é a ferramenta original de protótipo rápido que ensina conceitos-chaves como
modularidade, reutilização e desenvolvimento.
• Os comandos do Shell se comunicam entre si por meio de uma interface simples e
coerente chamada p‚qˆ‡‚Ãvƒryvr.
• O Shell permite que o usuário realize suas atividades sem afetar qualquer outro
processo que não lhe pertence. Quando um usuário conecta-se a um sistema Unix, o
sistema operacional inicia automaticamente uma cópia do Shell, sob a qual o usuário
poderá realizar qualquer função disponível.
• O shell utiliza o sistema de arquivos do UNIX que permite organizar arquivos em
pastas (diretórios). Esta hierarquia de diretórios e arquivos gera uma visão simples e
clara de toda a informação no sistema.
• O UNIX é transportável; ele roda em quase todo hardware de computadores
fabricados atualmente. Seu investimento não será desperdiçado, pois qualquer
programa escrito é largamente portável entre Unix’s de diferentes plataformas e
fornecedores.
4. Q…‚qˆ‡v‰vqhqr
◊
Gvtˆhtr€Ãv‡r…ƒ…r‡hqhÃÃm‚
p‚€ƒvyhqh
◊
V€Ãƒ…‚t…h€hq‚…Àpqv‚Âqr
qˆƒyvph…ˆÇ…vƒyvph…ƈh
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
ƒ…‚qˆ‡v‰vqhqr
8‚€ƒh…hom‚ÃqrÃ7…ˆprÃ8‚‘ÃhvÃq‚
Piwr‡v‰rÃ8
– Shell:
linha de código
– Linguagem O.O: linhas de código
– Linguagem C: linhas de código
• Não é de se espantar que o Shell possa duplicar ou triplicar a produtividade pois ele
pode automatizar a maior parte das tarefas recursivas, que compreendem de 50% a
80% das atividades intensamente humanas. A simplicidade dos arquivos do UNIX e
do projeto de sistema de arquivo possibilitam isso.
• É necessário alguns conhecimentos internos do Shell e do seu uso para se
beneficiados seus recursos. Mas, é preciso alguma inventividade para torná-lo mais
eficiente e produtivo.
5. Rˆhq‚Ȇh…
◊
D‡r…h‡v‰h€r‡r
– realizar uma operação simples, uma
única vez
– interagir com o comando
◊
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
PÆuryyÆp…vƒ‡Ãqr‰r…iÆr…ȇvyv“hq‚
†r€ƒ…rĈrÃs‚…Ãrpr††i…v‚Ã…rhyv“h…)
– procedimentos complexos usando
muitas linhas de comando
– procedimento do qual todos os
usuários poderão beneficiar-se
– uma tarefa numa data planejada
– integrar informações de vários
sistemas existentes
• A qualquer momento que você executa algum comando (ls, cat), você está usando
o Turyy interativamente: †‡qvƇq‚ˆ‡ÃrƇqr…… são todos direcionados para o terminal.
•ÃT‡qvÃÃÃ23Ƈhqh…‡Ãvƒˆ‡
•ÃT‡q‚ˆ‡Ã23Ƈhqh…‡Ã‚ˆ‡ƒˆ‡
•ÃT‡qr……Ã23Ƈhqh…‡Ãr……‚…
• Quando você começar a usar o Turyy interativamente e descobrir que algumas
tarefas exigem muita digitação, está na hora de você programar em TuryyÃp‚y‚phq‚
r††r†Ã comandos interativos em um arquivo. Você poderá reutilizar sempre que
precisar, melhorando ainda mais a sua produtividade.
• O Turyy pode extrair e manipular grandes quantidades de informações. Por que
pesquisar um relatório inteiro quando o Turyy pode verificar e recuperar informações
importantes para você com mínimo esforço ?
6. 8h…hp‡r…t†‡vph†Ãq‚Ã8Turyy
◊
@†p…v‡hÂ…Ã7vyyÃE‚’ÃhÃVv‰r…†vqhqr
qhÃ8hyvsy…vhÃÃ7r…xryr’
– BSD 4.3 e System V
◊
‚
q
h
o
h
‰
6
Ã
‘
v
y
y
r
u
T
8
Ã
‚
j
o
h
Tv€vyh…ÃjÃyvtˆhtr€Ã8
◊
8‚‡…‚yrÆ‚i…rÃh†Ã‡h…rsh†Ãr€
ƒ…v€rv…‚ÃrÆrtˆq‚Ãyh‚
◊
Cv†‡‚…’ÃrÃ6yvh†vt
◊
Pƒr…hq‚…r†Ãp‚qvpv‚hv†Ã22Ã3r‡p
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
@†‡…ˆ‡ˆ…hÃqrÃp‚‡…‚yrÃvsuvyrÃr‡p
◊
Wh…vi‰rv†Ãty‚ihv†ÃrÃy‚phv†Ã†r‡
†r‡r‰
• O uv†‡‚…’ armazena comandos à medida que são executados permitindo serem
reutilizados sema necessidade de redigitá-lo.
!!
= reexecuta o último comando
!n
= reexecuta o comando número “n” do histórico
!ftp
= reexecuta o último comando ftp
!echo:p = lista o último comando rpu‚ executado.
• O Turyyà 8 oferece aliasing, permitindo ao usuário criar nomes simbólicos para
nomes de comando.
Exemplos:
alias dir ‘ls -la | more’ ou alias rm ‘rm -i’
@‰v‡rÃp…vh…Àhv†ÃqrÃ!Ãhyvh†Ãƒ‚v†Ãp‚€ƒ…‚€r‡rÃhÃr…s‚…€hprÄÄ
• No Shell C, você poderá mover tarefas em primeiro plano para o segundo, conforme
a necessidade.
• Sempre que você precisar de respostas imediatas, execute os comandos em
primeiro plano.
Quando o comando for ocupar muito tempo de terminal, ou seja, levar muito tempo
para voltar a resposta, você poderá submetê-lo em segundo plano.
Exemplos: find / -name *.ps -printÉ
(É início do comando em 2o. plano)
jobs
(lista os comandos que estão sendo executados)
fg 1
(traz o comando para o 1o. plano)
8. ‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
◊
‡ÃrÃyÃh
TÃUÃ9Ã@ÃSÃS
‡ÃrÃyÃh
t…rƒÃvó6…‡uˆ…´Ãphƒv‡
Autor: Lowel Arthur
Rei Arthur e os Cavaleiros da
Távola
◊
†rqÃró††uryyTuryyt´Ãphƒv‡
• O Shell tem comandos que permitem extrair dados relevantes de um arquivo.
• Você pode pensar na maior parte dos comandos do Shell como filtros.
• Cada comando também possui duas saídas:
• saída-padrão -- †‡q‚ˆ‡ÃÃqrshˆy‡Ã‡ryh
• saída-de-erro -- †‡qr……ÃÃqrshˆy‡Ã‡ryh
• Cada comando filtra dados da entrada-padrão ou transforma-os direcionando-os à
saída-padrão. Quaisquer erros encontrados são direcionados à saída-de-erro.
• Filtros podem extrair, incluir ou alterar dados dependendo dos comandos utilizados.
• O comando †rqÃ(do exemplo acima)Ãabrirá o arquivo “capit1” como †‡qv e passará
o arquivo para †‡q‚ˆ‡ (terminal) enquanto muda todas as ocorrências de “shell” para
“Shell”.
• P7T) Se você m‚Ãredirecionar o resultado da execução dos comandos para um
arquivo, utilizando os operadores de redirecionamento, o resultado somente será
exibido na tela Ãqrshˆy‡Ãq‚Ƈq‚ˆ‡Ã
10. Pƒr…hq‚…r†
◊
1Ãh…„ˆv‰‚ÃÃÃÃqv…rpv‚hÈ€Ãh…„ÃƇqv
◊
3Ãh…„ˆv‰‚ÃÃÃÃqv…rpv‚hÃ
stdoutÃÈ€hÃ
ÃÃÃÃÉhÆhtqh
◊
stdoutÃhÈ€Ãh…„Ã
33Ãh…„ˆv‰‚ÃÃhr‘hÃ
ÃÃÃÃÃÃÃr‘v†‡r‡r
33ÉÃÃÃÃÃÃÃÃÃÃÃÃÃhr‘hÃ
◊
11Ãqryv€v‡hq‚…
◊
3ÄÃh…„ˆv‰‚ÃÃ
33ÄÃh…„ˆv‰‚Ã
◊
y
y
r
u
T
8
Ã
‚
j
o
h
◊
◊
‚
q
h
o
h
‰
6
Ã
‘
v
•É
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
stderrÃhÃstdout
direciona stdin do
shell até o delimitador
grava sobre noclobber/
cria novo arq.
grava sobre noclobber/
anexa novo arq.
reúne stderr e stdout e
canaliza resultados
• Você pode usar o redirecionamento de E/S para alterar o †‡qv†‡q‚ˆ‡ÃrƇqr……
Exemplo:
†rqÃró††uryyTuryyt´ÃÃphƒv‡ Ã3‰‚phƒv‡
• O †‡qr…… ainda estaria direcionado para o terminal, mas o resultado da
execução deste comando será gravado em novocapit1.
• Redirecionar †‡qr…… para um arquivo pode ser ocasionalmente útil para depurar um
comando Shell. Para combinar †‡qr…… com †‡q‚ˆ‡, inclua umÃÉÃapós o sinal de
redirecionamento:
Exemplo: †rqÃró††uryyTuryyt´Ãphƒv‡
Ã33ɉ‚phƒv‡
Se o arquivo ‚‰‚phƒv‡ existir, o Shell anexará o texto ao arquivo
• Senão, O Shell vai criá-lo. ( comando )
• O arquivo de saída terá todos os dados da saída-padrão e da saída-de-erro
criados pelo comando do shell. (comando )
•Ã ‚py‚iir…: variável que pode ser setada para evitar a destruição acidental de
arquivos existentes: (setenv noclobber)
Para modificar esta proteção, use o ponto de exclamação Ä.
Exemplo: Ãph‡ÃÃ3ÄÉ‚h…„
•Ã11 delimitador: este dispositivo de redirecionamento, usa linhas de dados qr‡…‚ do
comando do Shell como entrada. Em vez de ter um arquivo separado como entrada
para o comando, você poderá incluí-lo diretamente com o comando do Shell
Exemplo: Ãs‡ƒÃv‰Ãs‡ƒˆvph€ƒi…Ã11Ã@PAÄ
12. 8‚†‡…ˆv…ȀÆuryyÆp…vƒ‡
◊
@qv‡rÈ€Ãh…„ˆv‰‚)
vi meuprograma
◊
Q…v€rv…hÃyvuhÃqr‰rÃp‚‡r…)
#! /bin/csh
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
◊
Qh…hÃp‚€r‡h…È€hÃyvuh)
#
Qh††h…Âóph€vu‚´Ãq‚†Ãp‚€hq‚†)
/bin/rm arquivo
ou
rm arquivo
• #! /bin/csh
ÐÉ utilizado para que o Unix saiba que seu shell é
p†uryy
• É recomendável especificar o “caminho” do comandos, pois cada usuário pode criar
na sua área um alias para qualquer comando.
• Os comandos ficam geralmente no diretório /bin
• Outra opção seria colocar †phƒr ?
13. antes do comando, por exemplo c…€Ã Garante
que você estará utilizando a 1a. ocorrência encontrada no path definido no seu p†u…p
15. 9vph†ÃqrÃ…‚t…h€hom‚
◊
V‡vyv“rÃsvy‡…‚†ÃqrÃ…rqˆom‚
◊
V‡vyv“rÃp‚qˆ‡‚†Ãh‚Ãv‰p†Ãqr
h…„ˆv‰‚†Ã‡r€ƒ‚…i…v‚†
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
TrÆrˆÃ†uryyÃs‚…Ãsh“r…ÃAUQÃyr€i…r
†rÃqrÃhy‡r…h…ÂÃpu€‚qÃq‚Ãh…„ˆv‰‚
◊
Tr€ƒ…rȇvyv“rÃqryv€v‡hq‚…†
h…„ˆv‰‚†
◊
V‡vyv“rÃqryv€v‡hq‚…Ã~vp‚Ãr
qvsr…r‡rÃh…hƈiph€ƒ‚†
◊
P…thv“r†Ãqhq‚†Ãƒh…hÀhv‚…
rsvpvrpvhÃqhÀi„ˆvh
• Se o seu shell for fazer FTP, alterar a permissão do arquivo que contém o username
e a senha para “700”. @†‡rÃpÈ€ÃÃt‡r€Ã‚i…vth‡y…v‚Â…ÀrqvqhÃqrÆrtˆ…hoh
• Utilize filtros de redução,à t…rƒÃ pˆ‡Ã rà hx em primeiro lugar em um conduto,
reduzindo a quantidade de dados que deverão ser transferidos pelo Shell.
Exemplo: grep $1 arq1 | sort
• Utilize condutos ao invés de arquivos temporários para melhorar a eficiência do seu
shell
8‚€Ãh…„ˆv‰‚Çr€ƒ‚…i…v‚)Ã
cut -f1,5 arq1 /tmp/arq1tmp
sort /tmp/arq1tmp
rm /tmp/arq1tmp
8‚€Ãp‚qˆ‡‚)
cut -f1,f5 arq1 | sort
•Qualquer programa Shell com mais de duas páginas é muito complexo.
17. Pƒo}r†ÃqrÇr†‡r
◊
r
– sai imediatamente se houver código
de retorno falso
◊
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
‰
– verbose (maiores informações)
◊
‘
– gera saída dos comandos
executados
€
h
…
t
‚
…
Q
Ã
• Se você quiser gravar num arquivo a execução de um shell:
• Execute o comando †p…vƒ‡ (será criado um arquivo chamado typescript)
• Execute a shell
• Ao final da execução do shell tecle CTRL D ( Pronto, o arquivo typescript
conterá a execução da shell. )
• Para ler o arquivo typescript use o comando €‚…r
18. 8h…hp‡r…r†Ãr†ƒrpvhv†
◊
6†ƒh†Ãqˆƒyh†ÃóÃ
“string”
– mostra o string e substitui variáveis
(se existir)
◊
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
◊
6†ƒh†Ã†v€ƒyr†ÃõÃ
‘string’
– mostra o string e IP substitui
variáveis (se existir)
8…h†rÃÃgÃ
`comando(s)`
– o resultado do comando é usado em
output
transforma
caracter especial em caracter normal
7h……hÃv‰r…‡vqhÃc)Ã
• A utilização de caracteres especiais dentro de um string dará problemas. Para isso
utilize o recurso da “barra invertida”.
• Exemplos:
set dia = 19
echo “ Hoje é dia $dia”
resultado = Hoje é dia 19
set dia = 19
echo ‘ Hoje é dia $dia’
resultado = Hoje é dia $dia
set maquina = `hostname`
echo $maquina
Resultado: sc13.ccuec.unicamp.br
19. Hr‡hph…hp‡r…
◊
0ÃÃÃÃTrƒh…hq‚…ÃqrÃp‚€hq‚
†r„rpvhy
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
4ÃÃÃÃ8‚€ivhÃp‚€Ã„ˆhy„ˆr…
ph…hp‡r…Ãv†‚yhq‚
◊
ÃÃÃÃÃÃ8‚€ivhÃp‚€Ã„ˆhy„ˆr…
phqrvhÃqrÃph…hp‡r…
◊
bh“dÃ8‚€ivhÃp‚€Ãhyt‚Ĉr
p‚†v†‡hÃqrÃph…hp‡r…r†
hyship‡vp‚†Ã€v~†pˆy‚†
• Suponha que no seu diretório contenhas os arquivos:
• capit1
• capit2
• capit3
• capit4
• ls capit(*) -
aparecerá os 5 arquivos
• ls capit?
aparecerá os arquivos ( capit1, capi2, capit3, capit4 )
-
• ls capit[123]
aparecerá os arquivos (capit1, capi2, capit3)
20. Wh…vi‰rv†Ã‚Ã8Turyy
◊
By‚ihv†
– SETENV
‚
q
h
o
h
‰
6
Ã
‘
v
y
y
r
u
T
8
Ã
‚
j
o
h
– Exemplos:
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
†r‡r‰ÃU@SHɇ
†r‡r‰Ã9796U@Ã`#H9
†r‡r‰Ã9DTQG6`Ài„ˆvh)
•ÃNomes de Variáveis (locais ou globais) m‚ pode conter hífen:
nota-aluno (dará erro)
Y
•ÃÉ permitido o uso do underscore:
minha_var
nota_aluno
•ÃT@U@IW)ÃConfigura variáveis de ambiente ou globais. Estas variáveis serão válidas
enquanto a sessão estiver aberta.
21. G‚phv†
◊
6‡…viˆvq‚Éhy‚…r†Ãq‚Çvƒ‚ÃTUSDIB)
set var = expressão
@‘r€ƒy‚†)
†r‡Ã€†tÃ2óPyh´
†r‡Ãh‚Ã2à (('
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
†r‡Ãqv…fy‚tÃ2×r‘r…pvpv‚†
†r‡Ã€rˆqv…Ã2Ãgy†Ãhyg
†r‡Ãh€rÃ2ó8ˆ…†‚ÃqrÃ8Turyy´
6……h’)
†r‡Ã‰h…Ã2ÃhÃiÃp
Im‚Ȇh…Ãutsr€rÃqrÉh…vi‰rv†
Tr‡Ã‰h…ÃÃ2ÃÃr‘ƒ…r††m‚
• Seta variáveis locais, ou seja, elas atuam somente durante a execução do
Shell
• A variável recebe um valor string
• set var = (a b c ) è seta um array chamado ‰h… contendo h, i,
respectivamente na primeira, segunda e terceira posições.
p
,
Para saber quais variáveis estão setadas e quais são seus valores, utilize o
comandoÆr‡
Pi†)
22. G‚phv†
◊
6‡…viˆvq‚Éhy‚…r†Ãq‚Çvƒ‚ÃDIU@DSP)
5Éh…Ã2Ãr‘ƒ…r††m‚
@‘r€ƒy‚†)
5Ãh‚Ã2Ã (('
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
5Æ‚€hÃ2Ãljhy‚… ÃÃljhy‚…!
†rƒh…hq‚†Ãƒ‚…Ãi…hp‚
5ÃvÃ2Ã
5ÃwÆ‚€hà ÃhÉh…vi‰ry
5ÃÃƈi‡…hvà ÃhÉh…vi‰ry
5Ãh‚Ã2Ã!ÃÆ‚€hÃ!ÃhÉh…vi‰ryÃh‚
5à ÃÉh…Ãƈi‡…hvà ÃhÉh…vi‰ry
• Entre o @ e o nome da variável é necessário um espaço em branco.
• Já para incrementar ou decrementar, não pode existir espaço em branco entre a
variável e o sinal correspondente.
Ex: @ h++
@ p -• Para trabalhar com o conteúdo de uma variável devemos utilizar o sinal “$”.
• set ano = 1998
• echo $ano
• echo “O valor de soma e: $soma”
23. Hhvƒˆyhq‚Éh…vi‰rv†
◊
ljh…vi‰ry
substitui o nome da variável pelo seu
conteúdo
@‘r€ƒy‚†)
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
y†ÃÇqv…fy‚t
†r‡Ãyr‡…hÃ2Ãljh…b d
†r‡ÃxÃ2Ãljh…bÇvd
5ÃxÃ2ÃÇvÃÃ
†r‡ÃqvhÃ2à (
†r‡Ãƒh…€ Ã2ÃÇ
rpu‚óC‚wrÃpÃqvhÃÇqvh´
• Não deixe espaço em branco entre o cifrão ($) e o nome da variável.
27. ljh…vi‰rybd
◊
ljh…vi‰rybdÈÃÃljh…vi‰ryb’dˆ
ljh…vi‰rybd
– elementos posicionais
@‘r€ƒy‚†)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
†r‡Ã‚€rÃ2Àh…vhÃw‚†rÃw‚h‚
Ç‚€rb d
Ç‚€rb d
Ç‚€rb!d
• Se você ultrapassar o número de subscript, ou seja, tentar usar um elemento que
ultrapasse o número existente no array, o Cshell emitirá uma mensagem
Ð “Subscript out of range “
• Exemplos:
$nome[1]
(Maria)
$nome[1-3] (Maria José João)
$nome[2-]
(José João)
28. Qh††htr€ÃqrÃh…k€r‡…‚†
◊
ÇÆh…t‰
~€r…‚ÃqrÃh…tˆ€r‡‚†Ãƒh††hq‚†
p‚€‚Ãh…k€r‡…‚
◊
Ç ÃÇ!ÃÇ
h…tˆ€r‡‚†Ãƒ‚†vpv‚hv†
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
◊
◊
◊
Ç
‚€rÃq‚Ã…‚t…h€h
Ç
‡‚q‚†Ã‚†Ãh…tˆ€r‡‚†
ÇÇ
‚Ãq‚Ã…‚pr††‚Ãq‚Ãp‚€hq‚
p‚……r‡r
Çh…t‰bd
ÃÃÃÃÃp‚‡r~q‚Ãq‚Ãh…h€r‡…‚ÃÃh††hq‚
• csh
meuprogram
parm1
parm2
ÃÃÃÃÃÇÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÇ ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÇ!
Çh…„‰b d
Ð
ÃÇh…„‰b!d
• ÇÇÃÃ ÃMuito utilizado pelos utilitários de mail que gravam o arquivo em
/tmp/arq_número_do_processo
• Se você tem um shell script que recebe parâmetros de entrada, você pode usar
ÇÆh…t‰Ãno começo do programa para obter o número de argumentos (parâmetros)
recebidos, testando se esse era o número esperado.
Exemplo:
p†uÃÀrˆ†p…vƒ‡ÃÃh…€ Ãh…€!
ÆÄÃivp†u
if ($#argv != 2) then
echo “Número de parâmetros inválido “
exit
else
set nome = $1 ou set nome = $argv[1]
set ramal = $2 ou set nome = $argv[2]
endif
29. Wh…vi‰rv†Ãp‚urpvqh†
◊
◊
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
Çpq
◊
‚
q
h
o
h
‰
6
Ã
‘
v
Lj†r…
ǃh‡u
◊
Çu‚€r
◊
ǃ…‚€ƒ‡
◊
džuryy
◊
LJr…€
◊
Çu‚†‡h€r
€
h
…
t
‚
…
Q
Ã
• $user : Conteúdo do resultado do comando whoami (quem é o usuário da conta)
• $cwd : Conteúdo do resultado do comando pwd (diretório corrente)
• $path : Lista de diretórios a serem procurados pelo meus executáveis
• $home : Mostra qual é o diretório home
• $prompt : Mostra o que está setado como prompt
• set prompt = `pwd`
• set prompt = $cwd
• $shell : Mostra a shell que está sendo utilizada
• $term : Mostra qual o tipo de terminal que está sendo utilizado
• $hostname: Nome do computador ao qual estou logado
• O valor das variáveis acima podem ser encontrados ao digitarmos o comando †r‡
30. @‘ƒ…r††}r†ÃrÃPƒr…hq‚…r†
◊
8‚€ƒh…h…Éh…vi‰rv†Ãˆ€p…vph†Ã‚ˆ
†‡…vt†
22
vtˆhy
Ä2qvsr…r‡r
◊
8‚€ƒh…h…Æ‚€r‡rƇ…vt†
y
y
r
2—
vtˆhy
‚ u
q T
Ä—qvsr…r‡r
h
o 8
Ã
h ‚
Pƒr…hq‚…Ãyytvp‚
‰ j
o
6 h
Ã
hqÂ…)ÃÃÉÉÕ•
‘
v
€
h
…
V t
Pƒr…hq‚…Ãh…v‡€p‡vp‚
Ã
Ã
Ã
‚
Ã
…
Ã
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
Q
Ã
Ã
€hv‚…Àr‚…Ãvtˆhy)Ã3 1Ã32Ã12
◊
◊
◊
• if ($a == $b) then
echo “As variáveis são iguais”
else
echo “As variáveis são diferentes”
end
• if ($nome !~ “Curso Shell “) then
echo “ Você esta no curso errado !!!!!”
else
echo “ Bem vindo ao Curso de Shell”
end
• while (“$1” != “”)
end
• if ($i = $k) then
• if ( “$1” == “Maria” || “$2” == “João” ) then
31. vsÃÇurÃÃry†r
◊
vsÃr‘ƒ…r††m‚Çur
ƒ…‚pr††h
ry†r
ƒ…‚pr††h!
rqvs
y
y
r
vsÃÇhÃ22ÃÇiÇur
‚ u
q T
h
rpu‚ó‰h…vi‰rv†Ãvtˆhv†´
o 8
Ã
‚
ry†r
h
‰ j
o
6 h
rpu‚ó‰h…vi‰rv†Ãqvsr…r‡r†
Ã
‘
v
€
rqvs
h
…
V t
Ã
Ã
Ã
‚
Ã
…
vsÃÃrÃh…„fr‡…hqhÇur
Ã
Ã
Ã
Q
Ã
Ã
ÃÃÃÃÃÃÃÃÃrpu‚óÃPÃh…„ˆv‰‚Ãr‘v†‡r´
◊
◊
rq
• O ‡ur, obrigatoriamente, tem que estar na mesma linha de comando do
pode ter outro comando na linha.
vsÃ
e não
• Na linha doÃry†r não pode ter comandos
32. Pƒr…hq‚…r†ÃqrÇr†‡r
8‚qvom‚ ÃÃÃÃWr…qhqrv…hÆrÃ
rÃh…„ˆv‰‚ ÃÃÆrÃh…„ˆv‰‚Ãr‘v†‡r
…Ãh…„ˆv‰‚ ÃÃÃr‘v†‡v…Ãh…„ÃGrtt‰ry
y
y
r
‚ u
q T Ãh…„ˆv‰‚ÃÃÃr‘v†‡v…Ãh…„ÃB…h‰i‰ry
h
o 8
à ‘à h…„ˆv‰‚à à à à à à à à à à à r‘v†‡v…à h…„
h ‚
‰ j
@‘rpˆ‡i‰ry
o
6 h
Ã
‘
v
€
ÃÃÃr‘v†‡v…ÂÃqv…r‡y…v‚
h qÃqv…
…
V t
Ã
Ã
Ã
‚ “à h…„ˆv‰‚à à à à à à à à à à à à h…„r‘v†‡v…à rà m‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
‡v‰r…
Ã
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃqhq‚†Ã‡h€hu‚Ã2Ã
sÃà h…„ˆv‰‚à Ãà Ãà à à Ãà à à à r‘v†‡v…Çrq‚à ‚ˆ
m‚
ÃÃÃÃqhq‚†
if ( -e arq_entrada) then
echo “ O arquivo existe”
else
echo “ O arquivo NÃO existe”
end
if ( -d Mail) then
echo “Isto é um diretório”
else
echo “Isto é um arquivo”
end
if ( ÄÃ-d Mail) then
echo “Isto é um arquivo”
else
echo “Isto é um diretório”
end
33. Tv‡pu
◊
†v‡puƇ…vt
ph†rÉhy‚… )
hom‚Ã
i…rhx†Ã‚i…vth‡y…v‚
ph†rÉhy‚…)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
hom‚Ã!
i…rhx†
qrshˆy‡)
hom‚Ãqrshˆy‡
i…rhx†
rq†
Exemplo de um script utilizando o comando swich
set data = ‘ date | cut -c9-10‘
set texto = Relatorio do mes de
switch ($data)
case 01:
echo $texto Janeiro
breaksw
case 09:
echo $texto Setembro
breaksw
default:
echo Relatório Anual
breaksw
endsw
• Obs: A obrigatório a variável case ser string.
É obrigatório ter um i…rhx† para cada comando ph†r
34. A‚…rhpu
◊
s‚…rhpuÉh…vi‰ryÃr‘ƒ…r††m‚
p‚€hq‚Ãljh…vi‰ry
rq
@‘ƒ…r††m‚)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o ÃÃÃÃ6†Ãv†‡…ˆo}r†Ãqr‡…‚Ãq‚Ãs‚…rhpu
6 h
Ã
†r…m‚Ãr‘rpˆ‡hqh†Ã‡h‡h†Ã‰r“r†
‘
v
€
h
„ˆh‡‚†Ãs‚…r€Ã‚Ã~€r…‚Ãqr
…
V t
Ã
Ã
ryr€r‡‚†Ãƒ…r†r‡r†Ãr‡…r
Ã
‚
Ã
…
Ã
Ã
Ã
Q
ƒh…r‡r†r†
Ã
Ã
– resultado de um comando
– valores ou ocorrências de um array
Exemplos:
• Utilizando array:
set tabela = (maria joão)
foreach pessoa ($tabela[*])
echo $pessoa
end
• Utilizando o resultado de um comando)
foreach arquivo ( `ls -l | awk ‘{print $3, $4, $8)’`)
echo $arquivo
end
• ÃIm‚Ãhá comandoóAPS´Ãpara C Shell
36. Xuvyr
◊
uvyrÃ
rpu‚ó8r‡…‚ÃqrÃ8‚€ƒˆ‡hom‚´
rpu‚óTryrpv‚rÃhƒom‚
qr†rwhqh´
rpu‚ó ÃÃI‚‡vpr´
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
rpu‚óÃÃThv…´
rpu‚Ãó3ó
†r‡ÃS@TQÃ2ÃÇ1
†v‡puÃÇS@TQ
rq†
rq
while (1)
echo “ 1- Tabela de Orgaos “
echo “ 2 - Notice “
echo “ X - Sai “
echo -n “Selecione a opcao desejada -- “
set RESP = ($)
switch ($RESP)
case 1:
source jsi03e_carga; breaksw
case 2:
/usr/local/notice/manager ; breaksw
case X:
exit
default:
echo -n “ Opcao Invalida - Tecle enter “
set CONT = ($)
breaksw
endsw
end
• comando exit: sai do while sem ser pela condição definida na expressão
37. 8‚€hq‚†Ãq‚ÃTuryy
◊
P†Ãp‚€hq‚†Ã†uryyÆr…m‚À‚†‡…hq‚†
qv‰vqvq‚†Ãr€Ã‰i…vh†Ãph‡rt‚…vh†)
–
–
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
6…„ˆv‰‚†ÃrÃqv…r‡y…v‚†
Tryrom‚
–
8‚€ivhom‚ÃrÂ…qrhom‚
–
D€ƒ…r††m‚
–
Trtˆ…hoh
• Para cada comando existem várias opções. Neste curso tentaremos mostrar as
opções mais utilizadas.
• Para conhecer outras opções ou maiores detalhes utilize o comando €h)
nome_comando
€hÃ
• teclas para utilizar no comando man :
.próxima linha
ENTER
.próxima página
space bar
.página anterior
/caracter especial ou /string
.continuar a busca
n
.cancelar pesquisa
P7T
CTRL B
.procuro string
q ou CTRL C
: Nem todos os comandos usam as opções da mesma maneira.
38. 8‚€hq‚†
◊
◊
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
◊
◊
◊
◊
◊
◊
◊
◊
cd ls pwd mkdir
rmdir
cat cp csplit ln
6…„ˆv‰‚
mv rm split
awk cut grep sed
Tryrom‚
head ÃÃÃline tail uniq
wc
cat join paste
Eˆom‚
sort
P…qrhom‚
tr
dd
U…h†s‚…€hom‚ÃÃÃsed
cat echo
D€ƒ…r††m‚
chmod
Trtˆ…hoh
$ touch
Grv‡ˆ…h
sleep exit
Pˆ‡…‚†Ã
9v…r‡y…v‚Ã
• Os comandos de Diretórios e Arquivos já foram abordados anteriormente. Eles
podem ser utilizados sem restrições num shell.
Exemplos:
rm arquivo_old /dev/null
ls -la
/bin/cat arquivo
/bin/mv arqvelho arqnovo
/bin/pwd
/bin/mkdir meudir
• Alguns lembretes:
cd
altera o diretório corrente
ls
lista o conteúdo do diretório
pwd
mostra qual é o diretório corrente
mkdir
cria diretório
rmdir
deleta diretório
cp
copia arquivo
mv
renomeia arquivo
rm
deleta arquivo
39. D€ƒ…r††m‚
◊
@8CP
ÃÃÃÃÃr†p…r‰rÃh…tˆ€r‡‚†Ãr€Ã†‡q‚ˆ‡
Tv‡h‘r)
rpu‚Ãb‚ƒo}r†dƇ…vt
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
Pƒo}r†)
)Ãm‚Ãhqvpv‚hÈ€h‰hÃyvuh
‚Ƈq‚ˆ‡Ãh‡r†ÃqrÃv€ƒ…v€v…Â
†‡…vtÃqrv‘hq‚ÂÃpˆ…†‚…ÃhÃyvuh
qhÀr†htr€Ãr†p…v‡h
Exemplos:
echo -n “Entre com a opção desejada = “
Entre com a opção desejada
Ð__
set dia = `date +%A`
echoÃóHoje é $dia”
Hoje é Monday
echo ³Bom dia´
echo “Os arquivos são: “ *
echo “Essa pessoa $nome é muito legal” arq
40. D€ƒ…r††m‚
◊
86U
–
–
p‚ph‡rhÃrÃv€ƒ…v€r
m‚Ãhy‡r…hÃqhq‚†ÃU‚€hÃhƇqvÃr
hÃ…rƒ…‚qˆ“ÂƇq‚ˆ‡
–
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
‰h……rÂÃh…„ˆv‰‚ÃrÃm‚Ãi…hÃhÃphqh
‡ryhÃq‚Çr…€vhy
Tv‡h‘r)
ph‡Ãb‚ƒo}r†dÃbÃÃsvyr ÃÃÃsvyr!Ãd
Pƒo}r†)
)Ãyv†‡hÃh†Ãyvuh†Ãq‚Ãh…„ˆv‰‚
ˆ€r…hq‚h†
• Exemplos
capt1 capit2 livro
livro irá conter capit1,2
ph‡
capt3 livro
anexa capit3 no livro
ph‡
capit1
lista capit1 no terminal
ph‡
-n capit1
lista capit1 numerando as linhas
ph‡
arq1
ph‡Ã
direciona o stdin para o terminal e stdout
para arq1, assim tudo que for digitado
será gravado no arq1. Para encerrar
tecle CTRL D.
42. Grv‡ˆ…h
◊
Ç1
–
qv…rpv‚hÂÇr…€vhyÃp‚€‚Ƈqv
@‘r€ƒy‚)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
†r‡Ã‚ƒom‚Ã2ÃÇ1
Exemplos:
echo -n “Digite a opcao: “
set opcao = $
if ($opcao 9) then
echo “Opcao Invalida. Tecle enter para continuar”
$
endif
• Existem duas maneiras de trabalhar com este comando
• set opção = $
( neste caso, eu estou guardando o que o usuário digitou
•$
( Está é uma maneira de deixar a msg na tela até o usuário digitar alguma tecla.
44. Tryrom‚
◊
C@69
–
†ryrpv‚hÃh†Ã Ã…v€rv…h†Ãyvuh†
qrÈ€Ãh…„ˆv‰‚
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
Tv‡h‘r)
urhqÃb‚ƒo}r†dƇqvÃÃÃ3ÃÃƇq‚ˆ‡
Pƒo}r†)
pÃ)Æryrpv‚hÃh†ÃÃ…v€rv…h†
p‚yˆh†Ãq‚Ƈqv
)Æryrpv‚hÃh†ÃÃ…v€rv…h†
yvuh†Ãq‚Ƈqv
• Exemplos
head -5 arquivo
(lista as 5primeiras linhas do arquivo
45. Tryrom‚
◊
U6DG
–
†ryrpv‚hÃh†Ã Ãyvuh†Ãsvhv†Ãqr
ˆ€Ãh…„ˆv‰‚
Tv‡h‘r)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
‡hvyÃÃb‚ƒo}r†dÃƇqvÃÃ3ÃƇq‚ˆ‡
Pƒo}r†)
)Æryrpv‚hÃh†ÃÃ~y‡v€h†Ãyvuh†
q‚Ƈqv
ÃÃÃÃs)À‚†‡h…Ãh†Ãyvuh†Ã„ˆrÆm‚
hqvpv‚hq‚†Ãh‚Ãh…„ˆv‰‚
• Exemplos
tail -5 arquivo
(lista as 5 últimas linhas do arquivo)
tail -f /var/messages
46. Tryrom‚
◊
T@9
–
rqv‡hÃrÃhy‡r…hÃqhq‚†
Tv‡h‘r)
†rqÃb‚ƒo}r†dƇqvÃÃÃ3ÃÃƇq‚ˆ‡
Pƒo}r†)
y
ró†p…vƒ‡´)
y
r
‚ u
‚qrÆp…vƒ‡Ãƒ‚qrÆr…)
q T
h
󆆇…vtfh‡vth†‡…vtf‚‰ht´
o 8
Ã
h ‚ ³†‡…vtĈrÃr…‡rprÃjÃyvuhĈrÃqr‰r…i
‰ j
o
†r…Ãqryr‡hqhq´
6 h
Ã
‘
v
€
³††‡…vtÃhÆr…Ãqryr‡hqht´
h
…
V t
Ã
sÃh…„ˆv‰‚)Ãp‚‡p€Ã‚†Ã†p…vƒ‡†Ãh
Ã
Ã
‚
Ã
…
Ã
†r…r€Ãr‘rpˆ‡hq‚†ÃIm‚Ȇh…
Ã
Ã
Q
Ã
Ã
h†ƒh†Ãqr‡…‚Ãq‚Ãh…„ˆv‰‚
Im‚Ȇh…ƇqvÃp‚€‚Ƈq‚ˆ‡
• O comando †rq muda a informação dentro de um arquivo ou tabela. Este comando
também deleta linhas de arquivos. Portanto pode ser utilizado como um programa
que atualiza campos ou deleta linhas.
• Exemplos:
•Ã†rqÃrós/café/chá/g´Ãentrada
Altera a palavra phsp para pui em todas as ocorrências (g) no stdin
•Ã†rqÃró/João/d´Ãentrada
Deleta todas as linhas do stdin que contém a palavra E‚m‚
•Ã†rqÃr ³s/devedor//g´Ãentrada
Altera a palavra qr‰rq‚… por nada (//), ou seja, sed deletou a palavra
•Ã†rqÃrÓs/cha/café”
r
“s/limao/mate/” arq_sala arqsaida
•Ã†rqÃsÃarqcom entrada arqsaida
Executa os comandos que estão no arquivo a…„p‚€.
arqcom:
s/shell/Shell/g - altera todas as ocorrências por (g)
s/Terça/terça/ - altera 1 ocorrência por linha
P7T
:Na ‚ƒom‚Ãs não usar aspas dentro do arquivo
49. Tryrom‚
◊
BS@Q
Pƒo}r†)
‰)Ãyv†‡hÇ‚qh†Ãh†Ãyvuh†Ãq‚
h…„ˆv‰‚Ãr‘pr‡‚Ãj†Ã„ˆrÃp‚‡p€Ãh
†‡…vt
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
eyr‡…h)Ãyv†‡hÇ‚qh†Ãh†Ãyvuh†Ã„ˆr
vvpvr€Ãp‚€ÃhÃyr‡…hˆÆ‡…vt
T‡…vt)
ljh…vi‰ryà ³†‡…vtÃp‚€ƒ‚†‡h´
†‡…vt
³€r‡hph…hp‡r…r†´ÃÃÃ4ÃÃbh“dÃ
◊
t…rƒÃurhqÃyvrÆrqÇhvyÃrÈv„
‚ƒr…h€Ãr€Ãyvuh†
• Exemplos:
grep -v “Amélia” arq1 - lista todas as linhas do arqu1 exceto às
que contém a string “Amélia”
grep ^R arq1 - lista todas as linhas do arq1que começam com R
grep ”[a-z]” arq1 -
50. Tryrom‚
◊
8VU
–
†ryrpv‚hÃp‚yˆh†
Tv‡h‘r)
pˆ‡ÃÃb‚ƒo}r†dƇqv
Pƒo}r†)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
p‘’)ÃqrsvrÃp‚yˆhÃvvpvhyÑÃr
p‚yˆhÃsvhyÃ’
q8uh…)ÃqrsvrÃqryv€v‡hq‚…
s‘’)ÃqrsvrÃph€ƒ‚ÃvvpvhyÑÃr
ph€ƒ‚ÃsvhyÃ’
†)ƈƒ…v€rÃyvuh†Ã„ˆrÃm‚
p‚‡p€Ãqryv€v‡hq‚…
Pi…vth‡‚…vh€r‡rÃqr‰rÆr…Ȇhq‚
p‚€Ãhƒom‚Ãq
P7T)ÃPÃp‚€hq‚Ãpˆ‡Ã‡…hihyuhÃp‚€
ÃÃÃÃÃÃÃÃÃÃp‚yˆh†
• O comando pˆ‡ corta arquivos em colunas. Também pode operar em cada
caractere ou campo, ou alguma combinação de ambos. Quando o arquivo tem algum
separador entre campos você pode selecioná-los através de pˆ‡
• Exemplos:
cut -f1,5 -d: arquivo- mostra campos de 1 a 5 (inclusive)
cut -c1-72 arquivo - mostra coluna de 1 a 72 ( inclusive)
cut -d: -s -f3,5 arquivo - mostra campos de 3 a 5 exceto as linhas que não
contém delimitador
OBS: Não é permitido o uso da opção p junto com a opção q.
51. Tryrom‚
◊
X8
–
p‚‡hÃyvuh†Ãƒhyh‰…h†Ãr
ph…hp‡r…r†ÃqrÃh…„ˆv‰‚†
Tv‡h‘r)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
pÃb‚ƒo}r†dƇqv
Pƒo}r†)
p)Ãp‚‡hÃph…hp‡r…r†
y)Ãp‚‡hÃyvuh†
)Ãp‚‡hÃhyh‰…h†
• Exemplos:
grep -l Maria arqu* | wc -l - lista a qtd de linhas que contém a variável
Maria
cat arq l wc -l
- lista a qtd de linhas do arquivo arq
52. Tryrom‚
◊
TQGDU
–
p‚…‡hÂƇqvÃr€Ãh…„ˆv‰‚†
€r‚…r†Ãp‚‡rq‚È€Ã~€r…‚
r†ƒrptsvp‚ÃqrÃyvuh†
Tv‡h‘r)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
†ƒyv‡ÃÃb‚ƒo}r†dƇqvÃÃbƒ…rsv‘‚d
Pƒo}r†)
)Ãr†ƒrpvsvphÂÃ~€r…‚ÃqrÃyvuh†
qrÃphqhÃh…„ˆv‰‚ÃqrÆhtqhÃ9rshˆy‡
Ãyvuh†Ãƒ‚…Ãh…„ˆv‰‚
ƒ…rsv‘‚)Ã…rsv‘‚Ãq‚†Ã†‡q‚ˆ‡†
p…vhq‚†ÃPƈsv‘‚Ær…iÃhhÃhiÃh‡p
““ÃPÃqrshˆy‡Ãq‚Ã…rsv‘‚ÃpÑ
• O comando †ƒyv‡Ãcria o nome do 1o. arquivo do output combinando o prefixo mais
o sufixo aa, ab (p/ o 2o.) até zz.
• Exemplos:
split -10 arquivo (gera arquivos xaa, xab, …) cada um contendo 10 linhas
split -5 arquivo capit (gera arquivos capitaa, capitab,…) cada um contendo
5 linhas
O split quebra por quantidade de linhas e não por quantidade de arquivos.
56. P…qrhom‚
◊
TPSU
Pƒo}r†)
€)Ãwˆ‡hÇ‚q‚†Ã‚†Ãh…„ˆv‰‚†Ãqr
r‡…hqhȀÆyÃP†Ãh…„ˆv‰‚†Ãqr
r‡…hqhÃqr‰r€Ãr†‡h…
pyh††vsvphq‚†
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
)Â…qrhÂÃh…„ˆv‰‚
ˆ€r…vph€r‡r
…)Â…qrhÂÃh…„ˆv‰‚Ãr€Ã‚…qr€
qrp…r†pr‡r
ˆ)Ãqryr‡hÃyvuh†Ãqˆƒyvphqh†
‡)ÃqrsvrÃqryv€v‡hq‚…
xÃbph€ƒ‚fvvpvhyp‚yˆhfvvpvhyd
b‚ƒom‚d
ÃÃÃbÃph€ƒ‚fsvhyp‚yˆhfsvhyd
b‚ƒom‚dÃ)ÃÃqrsvrÃhÃpuh‰rÃq‚Æ‚…‡
• As opções válidas para a ‚ƒom‚Ãx são: b,d,f,n,r
• Os valores default para a opção -k:
cpo ini
começo da linha
col ini
1a. coluna do campo
cpo fim
final da linha
col fim
última coluna do campo
• Exemplos:
sort -k2,2f -k3 arquivo
sort -k1.1 -k2.4 arquivo
sort -rt’ ‘ -k3b -k4 arquivo
57. U…h†s‚…€hom‚
◊
US
–
‡…h†s‚…€hÃph…hp‡r…Â…Ãph…hp‡r…
Tv‡h‘r)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
‡…õ†‡…vtfh‡vth¶Ãµ†‡…vtf‚‰h¶
1†‡qv3Ƈq‚ˆ‡
• O comando
‡…Ã traduz os dados de entrada caractere por caractere, com base em
tabelas de conversão (string) especificadas pelo usuário.
• Exemplos:
tr
‘(A-Z)’ ‘(a-z)’ arq1 arq1min
tr ‘(:)’
‘(t)’ cad1 cad1t
59. Eˆom‚
◊
EPDI
–
wˆ‡hÃq‚v†Ãh…„ˆv‰‚†Ãp‚€ivhq‚
yvuhÃhÃyvuhÃP†Ãh…„ˆv‰‚†Ãqr‰r€
r†‡h…Â…qrhq‚†
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
Tv‡h‘r)
w‚vÃb‚ƒo}r†dÃÃh…„ˆv‰‚
ÃÃÃh…„ˆv‰‚!
Pƒo}r†)
‡8uh…)ÃqrsvrÃqryv€v‡hq‚…
hÂÃh…„ˆv‰‚)Ã…‚qˆ“È€hÃyvuh
qrÆhtqhÃh…hÃphqhÃyvuhÃq‚
h…„ˆv‰‚Ãr†ƒrpvsvphq‚Ãry‚Ã
h…„ˆv‰‚Àr†€‚Ãh…h†Ãph€ƒ‚†
q‚Ãw‚vĈrÃm‚Ãph†h€Ãp‚€
ruˆ€hÃyvuhÃq‚ˆ‡…‚Ãh…„ˆv‰‚
qrÃr‡…hqh
• Quando o w‚v encontra registros que se combinam nos 2 arquivos de entrada ele
cria um único registro contendo algum ou todos os campos dos dois registros. Para
utilizá-lo, os dois arquivos devem estar ordenados (utilize †‚…‡).
P7T
: Obrigatoriamente a opçãoÃh tem que vir antes da opção ‡.
60. Eˆom‚
◊
EPDI
Pƒo}r†)
‚ÂÃh…„ˆv‰‚ph€ƒ‚)Ãh†Ãyvuh†
qrÆhtqhÆm‚Ãp‚€ƒ‚†‡h†Ãƒryh
yv†‡hÃq‚†Ãph€ƒ‚†Ãr†ƒrpvsvphqh†
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
hÉh…vi‰ry
h…„ˆv‰‚ph€ƒ‚)Ãh…hÃqrsvv…
€hv†Ãph€ƒ‚†Ã†rƒh…r‚†Ãƒ‚…
i…hp‚ˆÉt…tˆyh
Ãph€ƒ‚ˆÃ!Ãph€ƒ‚)Ãsh“ÂÃw‚v
qrÃ!Ãh…„ˆv‰‚†Ãˆ†hq‚ÂÃph€ƒ‚
r†ƒrpvsvphq‚ÃhÉh…vi‰ryÃph€ƒ‚
q‚Ãh…„ˆv‰‚à à ˆÃh…„ˆv‰‚Ã!Ã!
• Exemplos:
h…„fr‡ )
Aldo:HC
h…„fr‡!)
Aldo:enfermeiro:7234
Bruno:IMECC
João:digitador:7111
João:CCUEC
Ricardo:médico:7323
join -t: arq_ent1 arq_ent2 arq_saida
h…„†hvqh)
vazio
join -a1-t: arq_ent1 arq_ent2 arqsaida
h…„†hvqh)
Aldo:HC:enfermeiro:7234
Bruno:IMECC:__________
João:CCUEC:digitador:7111
join -o 1.1 1.2 2.3 -t”:” arq_ent1 arq_ent2 arqsaida
h…„†htqh)
Aldo:HC:7234
João:CCUEC:7111
61. Eˆom‚
◊
Q6TU@
–
hr‘hÀ~y‡vƒy‚†Ãh…„ˆv‰‚†Ãp‚yˆh
ƒ‚…Ãp‚yˆh
Tv‡h‘r)
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
ƒh†‡rÃb‚ƒo}r†dÃÃh…„ˆv‰‚
h…„ˆv‰‚!
Pƒo}r†)
q8uh…)ÃqrsvrÃqryv€v‡hq‚…
†)Ãwˆ‡hÃyvuh†Ã†ˆi†r„ˆr‡r†Ãq‚
h…„ˆv‰‚
• Exemplos :
h…„fr‡ )
Aldo:HC
h…„fr‡!)
Bruno:IMECC
Aldo:enfermeiro:7234
João:digitador:7111
paste -d “/” arq_ent1 arq_ent2 arq_saida
Aldo:HC/Aldo:enfermeiro:7234
h…„f†hvqh)ÃÃ
Bruno:Imecc/João:digitador:7111
paste -s -d “/” arq_ent1 arq_ent2
h…„f†hvqh)ÃÃ
Aldo:HC/Bruno:Imecc
Aldo:Enfermeiro:7234/João:digitador:7111
62. Tryrom‚ÃrÃD€ƒ…r††m‚
◊
6XF
–
yvtˆhtr€ÃqrÃ…‚pr††h€r‡‚Ãr
ƒ…‚pˆ…hÃqrÃhq…}r†Ã@p‚‡…h
yvuh†Ã‚†Ãh…„ˆv‰‚†ÃqrÃr‡…hqh
„ˆrÃp‚€ivh€Ãp‚€Ãˆ€Ãƒhq…m‚
r†ƒrpvsvphq‚ÃrÃr‡m‚Ãr‘rpˆ‡hÃh†
ho}r†Ãqrsvvqh†
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
Tv‡h‘r)
hxÃb‚ƒo}r†dõƒhq…m‚¶Ã”sÃt€
µƒt€¶–Ƈqv
Pƒo}r†)
A8uh…)ÃqrsvrÃqryv€v‡hq‚…
sÃt€)Ãh…„ˆv‰‚ĈrÃp‚‡p€Ãh†
ho}r†ÃhÆr…r€Ãr‘rpˆ‡hqh†Ãƒry‚
p‚€hq‚Ãhx
µƒt€¶)Æm‚Ãh†Ãho}r†ÃhÆr…r€
r‘rpˆ‡hqh†Ãƒry‚Ãhx
awk -F: ‘{print $5 $1}’ arq_fun
awk -F: ‘{print $2 “ “ $1}’ arq_fun
awk -F: {‘$1 ~/e|a/’} arq_fun
awk -F: ‘{print NR,NF,$0}’ arq_fun
awk -F: ‘{print $1 “matr“; print $2 “nome”}’ arq_fun
awk -F: ‘{printf “%15s %10sn”, $1, $3}’ arq1
awk -F: ‘/smith+ern/’ arq1
awk -F: ‘/amel??/’ arq_fun
awk -F: ‘{printf (“nome eh %s ramal %5dn “, $2,$4)} arq_fun
awk -F: ‘$3 ~/Oct/ {print $2 $3} ‘ arq1
63. Tryrom‚ÃrÃD€ƒ…r††m‚
◊
Uvƒ‚†ÃqrÃhq…}r†
µ†‡…vt¶
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
µ†‡…vt †‡…vt!¶
µ†‡…vt 4¶
µ†‡…vt •†‡…vt!¶
µ†‡…vt bpuh… puh…!d¶
µ†‡…vt bcepuh… puh…!d¶
Tipos de padrões:
•Ãµ†‡…vt¶ : grava em stdout todas as linhas do stdin que contém pelo menos uma
ocorrência do string.
•Ãµ†‡…vt †‡…vt!¶ : grava em stdout as linhas que contém o string1 seguido por um
ou mais caracteres que precede o sinal de + e termina com o string2.
•Ãµ†‡…vt 4¶Ã: grava em stdout as linhas que contém o string1 seguido por nenhum
ou um caracter que precede o sinal ?
•Ãµ†‡…vt
•†‡…vt!¶
: grava em stdout as linhas que contém o string1 e/ou o string2.
•Ãµ†‡…vt bpuh… puh…!d¶ : grava em stdout as linhas que contém o string1 seguido
por qualquer caracter que esteja entre char1 e char2 inclusive (char1 e char2 devem
estar em ordem)
•Ãµ†‡…vt bcepuh… puh…!d¶ : grava em stdout as linhas que contém o string1 seguido
por qualquer caracter que m‚ esteja entre char1 e char2 inclusive (char1 e char2
devem estar em ordem).
64. Tryrom‚ÃrÃD€ƒ…r††m‚
◊
Uvƒ‚†ÃqrÃhq…}r†
µÇ ×puh… ¶
µÇ ×epuh… ¶
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
µÇ!×puh… Ƕ
µÇ Ã22󆇅vt ´¶
µÇ Ã32ópuh… ´¶
µÇ Ã22󆇅vt ´ÃÉÉÃÇ!ÃÃ22󆇅vt!´¶
Tipos de padrões:
•Ã µÇ à —puh… ¶ : grava em stdout todos os registros que contém no 1o. campo o
caracter char1 ou um string .
•ÃµÇ ×epuh… ¶ : grava em stdout todos os registros que m‚ contém no 1o. campo o
caracter char1 ou um string.
•Ã µÇ!à —puh… Ƕ : grava em stdout todos os registros que contém o último caracter
igual a char1 ou string.
•Ã µÇ à 22à ³†‡…vt
igual ao string1
•ÃµÇ Ã32ópuh…
igual a char1
´Ã µ
´Ãµ
: grava em stdout todos os registros que contém o 1o. campo
: grava em stdout todos os registros que o 1o. campo é maior ou
•ÃµÇ Ã22󆇅vt ´ÃÉÉÃÇ!ÃÃ22󆇅vt!´Ã ‘ : grava em stdout todos os registros que o
1o. campo é igual ao string1 e o 2o. é igual o string2.”
66. Tryrom‚ÃrÃD€ƒ…r††m‚
◊
Uvƒ‚†ÃqrÃho}r†
–
8‚ph‡rhom‚ÃqrÃph€ƒ‚†)
µ”ƒ…v‡ÃÇ Ã22ÃÇ ÃÇ!–¶
–
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
D€ƒ…v€v…ÃyvuhÃr€Ãi…hp‚)
µ”ƒ…v‡Ã³Ã´–¶
–
D€ƒ…r††m‚Ãs‚…€h‡hqhÃqrÃph€ƒ‚†
‰h…vi‰rv†Ã‚ˆÃp‚†‡h‡r†)
µ”ƒ…v‡sóÈ
$†c´ÃÇ –¶
µ”ƒ…v‡sóÈ!qÃÈ$†c´ÃÇÇ!
Ç –¶
µ”ƒ…v‡sóÈ!†ÃÈ#qcóIPH@´
³S6H6G´–¶
seqüência
significado
n
nova linha
b
backspace
t
tab
71. 8‚€hq‚ÉvÃr€Ã€‚q‚
ih‡pu
◊
V‡vyv“hq‚ÂÃrqv‡‚…Év)
ÃÃÉvÃÃh…„ˆv‰‚ÃÃ1ÃÃp‚€hq‚†f‰vÃ3ÉÄ
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
qr‰ˆyy
◊
h…„ˆv‰‚Ãp‚€hq‚†f‰v)
/FIM
dd
^[
:x
• Comandos vi:
‰v
abre o arquivo e executa os comandos gravados no arquivo comandos_vi
3ÉÄÃqr‰ˆyy - se a execução do vi der algum erro ele joga fora as
mensagens de erro
- representa a tecla ESC (digitar CTRL v CTRL [ )
ebÃ
)‘
- sai do editor vi e salva o arquivo
72. A‚…€h‡‚Ãq‚Ãp‚€hq‚Ãqh‡r
gqh‡rÃÈ hgÃÃ23ÃUˆr
gqh‡rÃÈ 6gÃÃ23ÃUˆr†qh’
gqh‡rÃÈ igÃÃ23ÃTrƒ
y
y
r
‚ u
q T
h
o 8
Ã
h ‚
‰ j
o
6 h
Ã
‘
v
€
h
…
V t
Ã
Ã
Ã
‚
Ã
…
Ã
Ã
Ã
Q
Ã
Ã
gqh‡rÃÈ 7gÃÃ23ÃTrƒ‡r€ir…
gqh‡rÃÈ pgÃÃ23 ÃUˆrÃTrƒÃ à $)$')##Ã
gqh‡rÃÈ qgÃÃ23Ã ÃÃÃÃÃqvh
gqh‡rÃÈ 9gÃÃ23Ã( ('Àr†qvhh‚
gqh‡rÃÈ wgÃÃÃ23Ã!$#
gqh‡rÃÈ €gÃ23Ã(ÃÃÃÃÀr†
gqh‡rÃÈ ƒgÃÃ23ÃQH
gqh‡rÃÈ VgÃ23Ã%
gqh‡rÃÈ ’gÃÃ23Ã('ÃÃÃÃÃÃh‚
O default do comando date é :
%a %b %d %T %Z %Y
74. 8‚€hq‚†Ã‰v
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
DID8D6I9PÃPÃWD
vi filename
abre ou cria um arquivo
vi +18 filename
abre arquivo na linha 18
vi +/”frigorífico” filename
abre o arquivo na 1a. ocorrência de “frigorífico”
view filename
abre o arquivo somente para leitura
8PH6I9PTÃ9@Ã8VSTPS
h
move à esquerda
j
move para baixo
k
move para cima
l
move à direita
w
move uma palavra à direita
W
move uma palavra à direita (além da pontuação)
b
move uma palavra à esquerda
B
move uma palavra à esquerda (além da pontuação)
Return
move uma linha abaixo
Back Space
move um caracter à esquerda
Space Bar
move um caracter à direita
H
move para o início da tela
M
move para o meio da tela
L
move para o fim da tela
Ctrl-F
avança uma tela
Ctrl-D
avança meia tela
Ctrl-B
retorna uma tela
Ctrl-U
retorna meia tela
75. 8‚€hq‚†Ã‰v
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
DIT@SDI9PÃ86S68U@SÃ@ÃGDIC6T
a
inseri caracter à direita do cursor
A
inseri caracter à direita do cursor e sinaliza fim de inha
I
inseri caracter à esquerda do cursor
I
inseri caracter à esquerda do cursor e sinaliza fim de inha
o
inseri linha abaixo do cursor
O
inseri linha acima do cursor
6GU@S6I9PÃPÃU@YUP
cw
altera palavra ( ou parte da palavra à direita do cursor
cc
altera linha
C
altera parte da linha à direita do cursor
s
substitui string que o cursor está posicionado
r
repete string que o cursor está com um outro caracter
r-Return
para linha
J
junta a linha corrente com a linha acima
xp
muda o caracter que o cursor está posicionado com o
caracter à direita
-
altera letra (upper ou lower)
u
desfaz o comando anterior
U
desfaz todas as alterações da linha
:u
desfaz o comando anterior da última linha
76. 8‚€hq‚†Ã‰v
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
9@G@U6I9PÃÃU@YUP
x
deleta caracter
dw
deleta palavra (ou parte da palavra à direita do cursor)
dd
deleta linha
D
deleta parte da linha à direita do cursor
:5,10 d
deleta da linha 5 à linha 10
8PQD6I9PÃPVÃHPW@I9PÃU@YUP
yy ou Y
marca linha a ser copiada
p
copia a linha marcada abaixo da linha corrente
P
copia a linha marcada acima da linha corrente
dd
deleta linha (em vez de mover)
:1,2 co 3
copia as linhas 1-2 e coloca-as depois da linha 3
:4,5 m 10
move as linhas 4-5 e coloca-as depois da linha 10
T@U6I9PÃGDIC6ÃIVH@S696
:set nu
mostra as linhas numeradas
:set nonu
inibe a numeração das linhas
QSP8VS6I9PÃVH6ÃGDIC6
G
vai para a última linha do arquivo
21G
vai para a linha 21
77. 8‚€hq‚†Ã‰v
‚
q
h
o
h
‰
6
Ã
‘
v
V
Ã
Ã
Ã
Ã
Ã
Ã
Ã
Ã
y
y
r
u
T
8
Ã
‚
j
o
h
€
h
…
t
‚
…
Q
Ã
QSP8VS6I9PÃ@Ã6GU@S6I9P
/string/
procura a string
?string?
procura a string no texto acima
n
procura a próxima ocorrência da string
:g/search-string/s//replace-string/gc
procura e altera, consultando antes de cada ocorrência
GDHQ6I9PÃ6ÃU@G6
Ctrl L
limpa a tela
DIT@SDI9PÃVHÃ6SRVDWPÃIVHÃ6SRVDWP
:r filename
inseri o arquivo depois do cursor
:34 r filename
inseri o arquivo após a linha 34
T6GW6I9PÃ@Ã86I8@G6I9P
:w
salva as alterações (no buffer)
:w filename
grava o buffer no arquivo
:wq ou :zz
salva as alterações e sai do vi
:q!
sai do vi sem salvar as alterações