Você está na página 1de 75

81,;$YDQoDGR

3URJUDPDomR&6KHOO

DXWRUDV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



&ULVWLDQD0XQKR](XJrQLR

/LOOLDP3DOHUPR

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3


2TXHp6KHOO"

3URJUDPDTXHFRQHFWDHLQWHUSUHWD
FRPDQGRV

/LQJXDJHPGHSURJUDPDomR
FRPSOHWDLQWHUSUHWDGD

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



possui variveis
construes condicionais e
interativas
ambiente adaptvel ao usurio
8PDGDVOLQJXDJHQVRULJLQDLVGH
TXDUWDJHUDomR */
6LPSOLFLGDGHGR6KHOO

pipeline
sistemas de arquivos
sistema operacional UNIX


O programa VKHOO interpreta os comandos que voc digita e os traduz para


comandos que o NHUQHO compreende.
6KHOO uma linguagem de programao completa, possuindo variveis,
construes condicionais, interativas e ambiente adaptvel ao usurio. O Shell do
Unix a ferramenta original de prottipo rpido que ensina conceitos-chaves como
modularidade, reutilizao e desenvolvimento.
Os comandos do Shell se comunicam entre si por meio de uma interface simples e
coerente chamada FRQGXWR SLSHOLQH .
O Shell permite que o usurio realize suas atividades sem afetar qualquer outro
processo que no lhe pertence. Quando um usurio conecta-se a um sistema Unix, o
sistema operacional inicia automaticamente uma cpia do Shell, sob a qual o usurio
poder realizar qualquer funo disponvel.
O shell utiliza o sistema de arquivos do UNIX que permite organizar arquivos em
pastas (diretrios). Esta hierarquia de diretrios e arquivos gera uma viso simples e
clara de toda a informao no sistema.
O UNIX transportvel; ele roda em quase todo hardware de computadores
fabricados atualmente. Seu investimento no ser desperdiado, pois qualquer
programa escrito largamente portvel entre Unixs de diferentes plataformas e
fornecedores.

3URGXWLYLGDGH

/LQJXDJHPLQWHUSUHWDGDQmR
FRPSLODGD

8PSURJUDPDGRUPpGLRSRGH
GXSOLFDURXWULSOLFDUVXD

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



SURGXWLYLGDGH

&RPSDUDomRGH%UXFH&R[ SDLGR
2EMHWLYH&

Shell:
 linha de cdigo
Linguagem O.O:  linhas de cdigo
Linguagem C:  linhas de cdigo

No 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.
necessrio 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.

4XDQGRXVDU

,QWHUDWLYDPHQWH

realizar uma operao simples, uma


nica vez
interagir com o comando

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



2VKHOOVFULSWGHYHUiVHUXWLOL]DGR
VHPSUHTXHIRUQHFHVViULRUHDOL]DU

procedimentos complexos usando


muitas linhas de comando
procedimento do qual todos os
usurios podero beneficiar-se
uma tarefa numa data planejada
integrar informaes de vrios
sistemas existentes

A qualquer momento que voc executa algum comando (ls, cat), voc est usando
o 6KHOO interativamente: VWGLQVWGRXWHVWGHUU so todos direcionados para o terminal.
6WGLQ

!VWDQGDUWLQSXW

6WGRXW

!VWDQGDUWRXWSXW

6WGHUU

!VWDQGDUWHUURU

Quando voc comear a usar o 6KHOO interativamente e descobrir que algumas


tarefas exigem muita digitao, est na hora de voc programar em 6KHOOFRORFDQGR
HVVHV comandos interativos em um arquivo. Voc poder reutilizar sempre que
precisar, melhorando ainda mais a sua produtividade.

O 6KHOO pode extrair e manipular grandes quantidades de informaes. Por que


pesquisar um relatrio inteiro quando o 6KHOO pode verificar e recuperar informaes
importantes para voc com mnimo esforo ?

&DUDFWHUtVWLFDVGR&6KHOO

(VFULWDSRU%LOO-R\QD8QLYHUVLGDGH
GD&DOLIyUQLD%HUNHOH\

BSD 4.3 e System V

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

6LPLODUjOLQJXDJHP&

&RQWUROHVREUHDVWDUHIDVHP
SULPHLURHVHJXQGRSODQR

+LVWRU\H$OLDVLQJ

2SHUDGRUHVFRQGLFLRQDLV

P
Q D
U
8
J



R

U



3



!HWF

(VWUXWXUDGHFRQWUROH LIZKLOHHWF

9DULiYHLVJOREDLVHORFDLV VHW
VHWHQY

O KLVWRU\ armazena comandos medida que so executados permitindo serem


reutilizados sema necessidade de redigit-lo.
!!

=> reexecuta o ltimo comando

!n

=> reexecuta o comando nmero n do histrico

!ftp

=> reexecuta o ltimo comando ftp

!echo:p => lista o ltimo comando HFKR executado.


O 6KHOO & oferece aliasing, permitindo ao usurio criar nomes simblicos para
nomes de comando.
Exemplos:

alias dir ls -la | more ou alias rm rm -i

(YLWHFULDUPDLVGHDOLDVSRLVFRPSURPHWHDSHUIRUPDQFH

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

( incio do comando em 2o. plano)

jobs

(lista os comandos que esto sendo executados)

fg 1

(traz o comando para o 1o. plano)

)LOWURV

67'287
67',1

),/752

 WHFODGR

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3


WHOD

67'(55
WHOD

JUHSL$UWKXUFDSLW

Autor: Lowel Arthur


Rei Arthur e os Cavaleiros da
Tvola

VHGHVVKHOO6KHOOJFDSLW

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 tambm possui duas sadas:
sada-padro --> VWGRXW GHIDXOWWHOD
sada-de-erro --> VWGHUU GHIDXOWWHOD
Cada comando filtra dados da entrada-padro ou transforma-os direcionando-os
sada-padro. Quaisquer erros encontrados so direcionados sada-de-erro.
Filtros podem extrair, incluir ou alterar dados dependendo dos comandos utilizados.
O comando VHG(do exemplo acima)abrir o arquivo capit1 como VWGLQ e passar
o arquivo para VWGRXW (terminal) enquanto muda todas as ocorrncias de shell para
Shell.
2%6 Se voc QmRredirecionar o resultado da execuo dos comandos para um
arquivo, utilizando os operadores de redirecionamento, o resultado somente ser
exibido na tela GHIDXOWGRVWGRXW

5HGLUHFLRQDPHQWR

&ULDUDUTXLYRV

$QH[DUDUTXLYRV

8VDUDUTXLYRVH[LVWHQWHVFRPR

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



HQWUDGDSDUDRVKHOO

5HXQLUGRLVIOX[RVGHVDtGD

8VDUSDUWHGRFRPDQGRVKHOOFRPR
HQWUDGD

2SHUDGRUHV

DUTXLYRGLUHFLRQDXPDUTSVWGLQ

!DUTXLYRGLUHFLRQD

stdoutSXPD

QRYDVDtGD

stdoutDXPDUT

!!DUTXLYRDQH[D

H[LVWHQWH

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

!! DQH[D

GHOLPLWDGRU

!DUTXLYR

!!DUTXLYR

P
Q D
U
8
J



R

U



3



stderrDstdout

direciona stdin do
shell at o delimitador

grava sobre noclobber/


cria novo arq.
grava sobre noclobber/
anexa novo arq.

rene stderr e stdout e


canaliza resultados

Voc pode usar o redirecionamento de E/S para alterar o VWGLQVWGRXWHVWGHUU


Exemplo:

VHGHVVKHOO6KHOOJFDSLW!QRYRFDSLW

O VWGHUU ainda estaria direcionado para o terminal, mas o resultado da


execuo deste comando ser gravado em novocapit1.
Redirecionar VWGHUU para um arquivo pode ser ocasionalmente til para depurar um
comando Shell. Para combinar VWGHUU com VWGRXW, inclua um aps o sinal de
redirecionamento:
Exemplo: VHGHVVKHOO6KHOOJFDSLW!! QRYRFDSLW
Se o arquivo QRYRFDSLW existir, o Shell anexar o texto ao arquivo
Seno, O Shell vai cri-lo. ( comando >>)
O arquivo de sada ter todos os dados da sada-padro e da sada-de-erro
criados pelo comando do shell. (comando &)
 QRFOREEHU: varivel que pode ser setada para evitar a destruio acidental de
arquivos existentes: (setenv noclobber)
Para modificar esta proteo, use o ponto de exclamao  .
Exemplo: FDW!QRYRDUT
 delimitador: este dispositivo de redirecionamento, usa linhas de dados GHQWUR 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: IWSQLYIWSXQLFDPSEU(2)

&RQGXWR

0HLRGHFRQGXomRSDUDWUDQVSRUWDU
GDGRVGHXPFRPDQGRSDUDRXWUR

2UHVXOWDGRGDH[HFXomRGHXP
FRPDQGRSRGHVHUXWLOL]DGRFRPR
SDUkPHWURGHHQWUDGDQDH[HFXomR

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



GHRXWURFRPDQGR
&RQHFWDVWGRXWGHXPFRPDQGRj
VWGLQGHRXWUR
([HPSORV

cat meuarq | grep palavra | wc -l


ls -al | grep -i *.txt



Os comandos do 6KHOO podem ser reutilizados, acoplados e moldados para lidar


com as mais difcieis aplicaes de informao.
Alm de eliminar arquivos temporrios, o conduto permite que dois comandos
operem ao mesmo tempo.



&RQVWUXLUXPVKHOOVFULSW

(GLWHXPDUTXLYR

vi meuprograma

3ULPHLUDOLQKDGHYHFRQWHU

#! /bin/csh
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



3DUDFRPHQWDUXPDOLQKD

#
3DVVDURFDPLQKRGRVFRPDQGRV

/bin/rm arquivo

ou

\rm arquivo



#! /bin/csh

utilizado para que o Unix saiba que seu shell

FVKHOO

recomendvel especificar o caminho do comandos, pois cada usurio pode criar


na sua rea um alias para qualquer comando.

Os comandos ficam geralmente no diretrio /bin


Outra opo seria colocar VFDSH ? antes do comando, por exemplo ?UP Garante
que voc estar utilizando a 1a. ocorrncia encontrada no path definido no seu FVKUF



'LFDVGHSURJUDPDomR

2VVKHOOVFULSWVGHYHPHVWDUVHPSUH
HPXPGLUHWyULRFRPXP

Exemplo: /usr/sys/nome-sistema

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



$UTXLYRVGHFRQWUROHTXHVmR
JHUDGRVSHORVKHOOGHYHPHVWDUHP
XPGLUHWyULRWHPSRUiULRVHSDUDGRV
GRVVKHOOVFULSWV





'LFDVGHSURJUDPDomR

8WLOL]HILOWURVGHUHGXomR

8WLOL]HFRQGXWRVDRLQYpVGH
DUTXLYRVWHPSRUiULRV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



6HVHXVKHOOIRUID]HU)73OHPEUH
VHGHDOWHUDURFKPRGGRDUTXLYR

6HPSUHXWLOL]HGHOLPLWDGRUQRV
DUTXLYRV

8WLOL]HGHOLPLWDGRU~QLFRH
GLIHUHQWHSDUDVXEFDPSRV

2UJDQL]HRVGDGRVSDUDPDLRU
HILFLrQFLDGDPiTXLQD



Se o seu shell for fazer FTP, alterar a permisso do arquivo que contm o username
e a senha para 700. (VWHpXPtWHPREULJDWyULRSRUPHGLGDGHVHJXUDQoD
Utilize filtros de reduo, JUHS FXW H DZN em primeiro lugar em um conduto,
reduzindo a quantidade de dados que devero ser transferidos pelo Shell.
Exemplo: grep $1 arq1 | sort
Utilize condutos ao invs de arquivos temporrios para melhorar a eficincia do seu
shell
&RPDUTXLYRWHPSRUiULR

cut -f1,5 arq1 > /tmp/arq1tmp


sort /tmp/arq1tmp
rm /tmp/arq1tmp

&RPFRQGXWR

cut -f1,f5 arq1 | sort

Qualquer programa Shell com mais de duas pginas muito complexo.



3DUDH[HFXWDUXPVKHOO
VFULSW

)RUDGRHGLWRUYLQDOLQKDGH
FRPDQGR

csh -opo meu-programa

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3


'HQWURGRHGLWRUYL

:w (grava o arquivo)
:!csh -opo %
!
(executa o comando shell
seguinte)
%
(diz ao vi para preencher o
nome do arquivo corrente)



Voc pode executar o seu programa medida que for sendo desenvolvido,
facilitando tambm a deteco e correo de erros. Entre no YL e crie as primeiras
linhas do programa, grave o arquivo (:w) e execute-o sem sair do editor:
Comando :
FVKRSomR



2So}HVGHWHVWH

H

sai imediatamente se houver cdigo


de retorno falso

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D

Y

verbose (maiores informaes)

[

gera sada dos comandos


executados

P
D
U
J
R
U
3




Se voc quiser gravar num arquivo a execuo de um shell:


Execute o comando VFULSW (ser criado um arquivo chamado typescript)
Execute a shell
Ao final da execuo do shell tecle CTRL D ( Pronto, o arquivo typescript
conter a execuo da shell. )
Para ler o arquivo typescript use o comando PRUH



&DUDFWHUHVHVSHFLDLV

$VSDVGXSODV 

string
mostra o string e substitui variveis
(se existir)

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



$VSDVVLPSOHV 

string
mostra o string e 12 substitui
variveis (se existir)
&UDVH C

`comando(s)`
o resultado do comando usado em
output
transforma
caracter especial em caracter normal

%DUUDLQYHUWLGD ? 



A utilizao 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



0HWDFDUDFWHU

6HSDUDGRUGHFRPDQGR
VHTHQFLDO

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



"&RPELQDFRPTXDOTXHU
FDUDFWHULVRODGR

&RPELQDFRPTXDOTXHU
FDGHLDGHFDUDFWHU

>D] @&RPELQDFRPDOJRTXH
FRQVLVWDGHFDUDFWHUHV
DOIDEpWLFRVPLQ~VFXORV



Suponha que no seu diretrio 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)



9DULiYHLVQR&6KHOO

*OREDLV

SETENV
R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

Exemplos:

P
Q D
U
8
J



R

U



3



VHWHQY7(50YW
VHWHQY'%'$7(<0'
VHWHQY',63/$<PiTXLQD



Nomes de Variveis (locais ou globais) QmR pode conter hfen:


nota-aluno (dar erro)

 permitido o uso do underscore:


minha_var
nota_aluno
6(7(19Configura variveis de ambiente ou globais. Estas variveis sero vlidas
enquanto a sesso estiver aberta.



/RFDLV

$WULEXLQGRYDORUHVGRWLSR675,1*

set var = expresso


([HPSORV
VHWPVJ
VHWDQR
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



2OD


VHWGLUBORJ

aH[HUFLFLRV

VHWPHXGLU

COVDOC

VHWQDPH

&XUVRGH&6KHOO

$UUD\
VHWYDU

 DEF

1mRXVDUKtIHQQRQRPHGHYDULiYHLV



6HWYDU H[SUHVVmR

Seta variveis locais, ou seja, elas atuam somente durante a execuo do


Shell

A varivel recebe um valor string


set var = (a b c ) seta um array chamado YDU contendo D, E,
respectivamente na primeira, segunda e terceira posies.

Para saber quais variveis esto setadas e quais so seus valores, utilize o
comandoVHW

2EV



/RFDLV

$WULEXLQGRYDORUHVGRWLSR,17(,52
#YDU

H[SUHVVmR

([HPSORV
#DQR
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3





#VRPD

YDORUYDORU

VHSDUDGRVSRUEUDQFR
#L



#M VRPDQDYDULiYHO
#S VXEWUDLQDYDULiYHO
#DQR

 VRPDQDYDULiYHODQR

#YDU VXEWUDLQDYDULiYHO



Entre o @ e o nome da varivel necessrio um espao em branco.


J para incrementar ou decrementar, no pode existir espao em branco entre a
varivel e o sinal correspondente.
Ex: @ h++
@ p - Para trabalhar com o contedo de uma varivel devemos utilizar o sinal $.
set ano = 1998
echo $ano
echo O valor de soma e: $soma



0DQLSXODQGRYDULiYHLV

YDULiYHO

substitui o nome da varivel pelo seu


contedo
([HPSORV

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3


OVGLUBORJ
VHWOHWUD
VHWN
#N

YDU>@

YDU>L@
 L

VHWGLD



VHWSDUP 
HFKR+RMHpGLDGLD



No deixe espao em branco entre o cifro ($) e o nome da varivel.



"YDULiYHO

7HVWDDH[LVWrQFLDGDYDULiYHO VH
HODWHPYDORU

=1
=0
R
G
D
o
Q
D
Y
$

[
L
Q
8









se a varivel est setada


se a varivel no est setada

O
O
H
K ([HPSORV
6

VHWYDU 
&

R
HFKR"YDU
j
o
5HVXOWDGR
D
P
D
U
J
R
U
3


XQVHWYDU
HFKR"YDUHFKRYDU





VWDWXV

7HVWDVHRFRPDQGRIRLH[HFXWDGR
FRPVXFHVVR

=0
=1

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

sucesso
sem sucesso

Exemplos:

P
Q D
U
8
J



R

U



3



VHWYDU



HFKRVWDWXV

XQVHWYDU
HFKRVWDWXV

HFKRYDUHFKRVWDWXV

(1)




YDULiYHO

5HWRUQDRQ~PHURGHHOHPHQWRVGH
XPDUUD\

([HPSORV

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D

VHWQDPH

 PDULDOXFLDMRDR

HFKRQDPH

Resultado: 3

P
D
U
J
R
U
3




 YDULiYHO 
finalidade

volta sempre um nmero inteiro que pode ser usado para alguma



YDULiYHO>Q@

YDULiYHO>Q@RXYDULiYHO>Q\@RX
YDULiYHO>Q@

elementos posicionais
([HPSORV
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



VHWQRPH

 PDULDMRVHMRDR

QRPH>@
QRPH>@
QRPH>@



Se voc ultrapassar o nmero de subscript, ou seja, tentar usar um elemento que


ultrapasse o nmero existente no array, o Cshell emitir uma mensagem

Subscript out of range

Exemplos:

$nome[1]

(Maria)

$nome[1-3] (Maria Jos Joo)


$nome[2-]

(Jos Joo)



3DVVDJHPGHSDUkPHWURV

DUJY
Q~PHURGHDUJXPHQWRVSDVVDGRV
FRPRSDUkPHWUR


DUJXPHQWRVSRVLFLRQDLV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3




QRPHGRSURJUDPD

WRGRVRVDUJXPHQWRV

QRGRSURFHVVRGRFRPDQGR
FRUUHQWH
DUJY>Q@

FRQWH~GRGRSDUDPHWURQSDVVDGR



csh

meuprogram

parm1

parm2


DUTY>@

DUTY>@

 Muito utilizado pelos utilitrios de mail que gravam o arquivo em


/tmp/arq_nmero_do_processo
Se voc tem um shell script que recebe parmetros de entrada, voc pode usar
DUJYno comeo do programa para obter o nmero de argumentos (parmetros)
recebidos, testando se esse era o nmero esperado.
Exemplo:

FVKPHXVFULSWSDUPSDUP

ELQFVK

if ($#argv != 2) then
echo Nmero de parmetros invlido
exit
else
set nome = $1 ou set nome = $argv[1]
set ramal = $2 ou set nome = $argv[2]
endif



9DULiYHLVFRQKHFLGDV

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D

XVHU

FZG

SDWK

KRPH

SURPSW

VKHOO

WHUP

KRVWQDPH

P
D
U
J
R
U
3




$user : Contedo do resultado do comando whoami (quem o usurio da conta)


$cwd : Contedo do resultado do comando pwd (diretrio corrente)
$path : Lista de diretrios a serem procurados pelo meus executveis
$home : Mostra qual o diretrio 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 variveis acima podem ser encontrados ao digitarmos o comando VHW



([SUHVV}HVH2SHUDGRUHV

&RPSDUDUYDULiYHLVQXPpULFDVRX
VWULQJV
LJXDO


GLIHUHQWH

&RPSDUDUVRPHQWHVWULQJV
O
O
H
a
LJXDO
R K
G 6
a GLIHUHQWH
D 
o &
Q 
D R
2SHUDGRUOyJLFR
Y j
o
$ D

DQGRU __
[
L
P
Q D
U
8
2SHUDGRUDULWPpWLFR
J



R

U

 


3



PDLRUPHQRULJXDO!

!





if ($a == $b) then


echo As variveis so iguais
else
echo As variveis so 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 == Joo ) then



LIWKHQHOVH

LI H[SUHVVmR WKHQ


SURFHVVD
HOVH
SURFHVVD
HQGLI

O
O
H
LI D
E WKHQ
R K
G 6
D 
HFKRYDULiYHLVLJXDLV
o &
Q 
HOVH
D R
Y j
o
$ D
HFKRYDULiYHLVGLIHUHQWHV

[
L
P
HQGLI
Q D
U
8
J



R

U
LI HDUTBHQWUDGD WKHQ



3


HFKR2DUTXLYRH[LVWH

HQG



O WKHQ, obrigatoriamente, tem que estar na mesma linha de comando do


pode ter outro comando na linha.

LI

e no

Na linha doHOVH no pode ter comandos



2SHUDGRUHVGHWHVWH

&RQGLomR 9HUGDGHLUDVH
HDUTXLYR VHDUTXLYRH[LVWH
UDUTXLYR H[LVWLUDUT/HJtYHO
O
O
H
R K
G 6 ZDUTXLYRH[LVWLUDUT*UDYiYHO
D 
o &
Q  [ DUTXLYR           H[LVWLU DUT
D R
Y j
([HFXWiYHO
o
$ D

[
L
P
H[LVWLURGLUHWyULR
Q D GGLU
U
8
J



R ] DUTXLYR            DUTH[LVWLU H QmR

U



3


WLYHU


GDGRV WDPDQKR



I DUTXLYR         H[LVWLU WHQGR RX


QmR


GDGRV

if ( -e arq_entrada) then
echo O arquivo existe
else
echo O arquivo NO existe
end
if ( -d Mail) then
echo Isto um diretrio
else
echo Isto um arquivo
end

if ( -d Mail) then


echo Isto um arquivo
else
echo Isto um diretrio
end



6ZLWFK

VZLWFK VWULQJ
FDVHYDORU
DomR
EUHDNVZ REULJDWyULR
FDVHYDORU

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



DomR
EUHDNVZ
GHIDXOW
DomRGHIDXOW
EUHDNVZ
HQGVZ



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 "Relatrio Anual"
breaksw
endsw
Obs: A obrigatrio a varivel case ser string.
obrigatrio ter um EUHDNVZ para cada comando FDVH



)RUHDFK

IRUHDFKYDULiYHO H[SUHVVmR
FRPDQGRYDULiYHO
HQG

([SUHVVmR
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o $VLQVWUXo}HVGHQWURGRIRUHDFK
$ D

VHUmRH[HFXWDGDVWDQWDVYH]HV
[
L
P
Q D
TXDQWRVIRUHPRQ~PHURGH
U
8
J


HOHPHQWRVSUHVHQWHVHQWUH

R

U



3
SDUrQWHVHV



resultado de um comando
valores ou ocorrncias de um array



Exemplos:
Utilizando array:
set tabela = (maria joo)
foreach pessoa ($tabela[*])
echo $pessoa
end
Utilizando o resultado de um comando
foreach arquivo ( `ls -l | awk {print $3, $4, $8)`)
echo $arquivo
end
1mRh comando)25para C Shell



:KLOH

ZKLOH H[SUHVVmR
Do}HV
HQG

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D

ZKLOH D



D
HFKR9DORU

D

HQG

P
D
U
J
R
U
3






:KLOH

ZKLOH 
HFKR&HQWURGH&RPSXWDomR
HFKR6HOHFLRQHDRSomR
GHVHMDGD
HFKR1RWLFH

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



HFKR6DLU
HFKRQ!
VHW5(63

 

VZLWFK 5(63

HQGVZ
HQG



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 condio definida na expresso



&RPDQGRVGR6KHOO

2VFRPDQGRVVKHOOVHUmRPRVWUDGRV
GLYLGLGRVHPYiULDVFDWHJRULDV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



$UTXLYRVHGLUHWyULRV

6HOHomR

&RPELQDomRHRUGHQDomR

,PSUHVVmR

6HJXUDQoD



Para cada comando existem vrias opes. Neste curso tentaremos mostrar as
opes mais utilizadas.
Para conhecer outras opes ou maiores detalhes utilize o comando PDQ
nome_comando

PDQ

teclas para utilizar no comando man :

2%6

.prxima linha

ENTER

.prxima pgina

space bar

.pgina anterior

CTRL B

.procuro string

/\caracter especial ou /string

.continuar a busca

.cancelar pesquisa

q ou CTRL C

: Nem todos os comandos usam as opes da mesma maneira.



&RPDQGRV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



cd ls pwd mkdir
rmdir
cat cp csplit ln
$UTXLYR
mv rm split
awk cut grep sed
6HOHomR
head line tail uniq
wc
cat join paste
-XQomR
sort
2UGHQDomR
tr
dd
7UDQVIRUPDomRsed
cat echo
,PSUHVVmR
chmod
6HJXUDQoD
$< touch
/HLWXUD
sleep exit
2XWURV
'LUHWyULR



Os comandos de Diretrios e Arquivos j foram abordados anteriormente. Eles


podem ser utilizados sem restries 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 diretrio corrente

ls

lista o contedo do diretrio

pwd

mostra qual o diretrio corrente

mkdir

cria diretrio

rmdir

deleta diretrio

cp

copia arquivo

mv

renomeia arquivo

rm

deleta arquivo



,PSUHVVmR

(&+2

HVFUHYHDUJXPHQWRVHPVWGRXW

6LQWD[H
HFKR>RSo}HV@VWULQJ
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



2So}HV
QQmRDGLFLRQDXPDQRYDOLQKD
QRVWGRXWDQWHVGHLPSULPLUR
VWULQJGHL[DQGRRFXUVRUQDOLQKD
GDPHQVDJHPHVFULWD



Exemplos:
echo -n Entre com a opo desejada =>
Entre com a opo desejada

__

set dia = `date +%A`


echoHoje $dia
Hoje Monday
echo Bom dia
echo Os arquivos so: *
echo Essa pessoa $nome muito legal > arq



,PSUHVVmR

&$7

FRQFDWHQDHLPSULPH
QmRDOWHUDGDGRV7RPDDVWGLQH
DUHSURGX]QRVWGRXW

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



YDUUHRDUTXLYRHQmRSiUDDFDGD
WHODGRWHUPLQDO

6LQWD[H
FDW>RSo}HV@>ILOHILOH@
2So}HV
QOLVWDDVOLQKDVGRDUTXLYR
QXPHUDQGRDV



Exemplos
capt1 capit2 > livro

livro ir conter capit1,2

FDW

capt3 >> livro

anexa capit3 no livro

FDW

capit1

lista capit1 no terminal

FDW

-n capit1

lista capit1 numerando as linhas

FDW

> arq1

FDW

direciona o stdin para o terminal e stdout


para arq1, assim tudo que for digitado
ser gravado no arq1. Para encerrar
tecle CTRL D.



6HJXUDQoD

&+02'

SDUDWRUQDURDUTXLYRGRVKHOO
H[HFXWiYHOpQHFHVViULRDOWHUDUD
SHUPLVVmRGRDUTXLYR

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

P
Q D
U
8
J



R

U



3



6LQWD[H
FKPRG>TXHP@RSHUDomRDFHVVR
DUTXLYR

2So}HV
TXHPX XVXiULR J JUXSR R
RXWURV D DOO
RSHUDomR DWULEXLU  UHPRYHU 

DFHVVRU UHDG Z ZULWH [


H[HFXomR



ATENO: Se o seu shell for executar o comando FTP voc dever alterar a
permisso do arquivo que contm o username e a senha para que somente o dono
possa ler, gravar e executar.
Exemplos:
chmod u=rwx,go= arquivo
ls -la
-rwx------ 1 lilliam supsof

110 Sep 25 16:33 arquivo



/HLWXUD



GLUHFLRQDRWHUPLQDOFRPRVWGLQ

([HPSOR
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



VHWRSomR





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 opo = $<
( neste caso, eu estou guardando o que o usurio digitou
$<
( Est uma maneira de deixar a msg na tela at o usurio digitar alguma tecla.



6HOHomR

/,1(

FRSLDXPDOLQKDGRVWGLQHJUDYD
QRVWGRXW

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



6LQWD[H
OLQHVWGLQ!VWGRXW





6HOHomR

+($'

VHOHFLRQDDVSULPHLUDVOLQKDV
GHXPDUTXLYR

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



6LQWD[H
KHDG>RSo}HV@VWGLQ!VWGRXW

2So}HV
FQVHOHFLRQDDVQSULPHLUDV
FROXQDVGRVWGLQ
QVHOHFLRQDDVQSULPHLUDV
OLQKDVGRVWGLQ



Exemplos
head -5 arquivo

(lista as 5primeiras linhas do arquivo



6HOHomR

7$,/

VHOHFLRQDDVOLQKDVILQDLVGH
XPDUTXLYR

6LQWD[H
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



WDLO>RSo}HV@VWGLQ!VWGRXW

2So}HV
QVHOHFLRQDDVQ~OWLPDVOLQKDV
GRVWGLQ

IPRVWDUDVOLQKDVTXHVmR
DGLFLRQDGRVDRDUTXLYR



Exemplos
tail -5 arquivo

(lista as 5 ltimas linhas do arquivo)

tail -f /var/messages



6HOHomR

6('

HGLWDHDOWHUDGDGRV

6LQWD[H
VHG>RSo}HV@VWGLQ!VWGRXW
2So}HV
O
HVFULSW
O
H
R K
RQGHVFULSWSRGHVHU
G 6
D 
VVWULQJBDQWLJDVWULQJBQRYDJ
o &
Q 
D R VWULQJTXHSHUWHQFHjOLQKDTXHGHYHUi
Y j
o
VHUGHOHWDGDG
$ D

[
L
PVVWULQJDVHUGHOHWDGDJ
Q D
U
8
J

IDUTXLYRFRQWpPRVVFULSWVD


R

U

VHUHPH[HFXWDGRV1mRXVDU


3


DVSDVGHQWURGRDUTXLYR

1mRXVDUVWGLQFRPRVWGRXW



O comando VHG muda a informao dentro de um arquivo ou tabela. Este comando


tambm deleta linhas de arquivos. Portanto pode ser utilizado como um programa
que atualiza campos ou deleta linhas.
Exemplos:
VHGHs/caf/ch/gentrada
Altera a palavra FDIp para FKi em todas as ocorrncias (g) no stdin
VHGH/Joo/dentrada
Deleta todas as linhas do stdin que contm a palavra -RmR
VHGH s/devedor//gentrada
Altera a palavra GHYHGRU por nada (//), ou seja, sed deletou a palavra
VHGHs/cha/caf

H

s/limao/mate/ arq_sala > arqsaida

VHGIarqcom entrada > arqsaida


Executa os comandos que esto no arquivo aUTFRP.
arqcom:

s/shell/Shell/g -> altera todas as ocorrncias por (g)


s/Tera/tera/ -> altera 1 ocorrncia por linha

2%6

:Na RSomRI no usar aspas dentro do arquivo



6HOHomR

81,4

VHOHFLRQDDSHQDVXPDRFRUUrQFLD
GHFDGDOLQKDGRVWGLQ
2EULJDWRULDPHQWHVWGLQGHYHHVWDU
RUGHQDGR FRPDQGRVRUW

6LQWD[H
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



XQLT>RSo}HV@VWGLQ
2So}HV
XVHOHFLRQDOLQKDV~QLFDV
FFRQWDRQ~PHURGHYH]HVTXH
FDGDOLQKDVHUHSHWH
GVHOHFLRQDDSHQDVDVOLQKDV
FRPPDLVGHXPDRFRUUrQFLD





6HOHomR

*5(3

VHOHFLRQDOLQKDVXVDQGRXP
~QLFRFULWpULRGHVHOHomR

6LQWD[H
JUHS>RSo}HV@VWULQJVWGLQ

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

P
Q D
U
8
J



R

U



3



2So}HV
FFRQWDRQ~PHURGHYH]HVTXH
RVWULQJDSDUHFH
LLJQRUDXSSHUFDVH
OOLVWDVRPHQWHRQRPHGRV
DUTXLYRVTXHSRVVXHPRVWULQJ
SURFXUDGD
QQXPHUDFDGDOLQKDTXH
FRQWpPRVWULQJSURFXUDGD



O comando JUHS a ferramenta principal para extrair informaes de campos de


dados, procurar cadeia de caracteres e escrever a informao em stdout.
Exemplos:
grep Mar* arq_user - listar todas as linhas do arq_user que contm
palavras que contenham a string Mar
grep Maria arq*

- listar todas as linhas de arquivos que comecem


com arq que contenham a string Maria

grep -l Maria arquiv* - listar os nomes dos arquivos que contenham a


string Maria
grep -n Maria arq_user - listar todas as linhas do arq_user que
contenham a string Maria, numerando-as
grep $varivel arq1 - listar todas as linhas do arq que contenham a
varivel
grep -c Chico arq1 - conta o no. de vezes que a string Chico aparece no
arquivo
grep -i

maria arq1 - listar todas as linhas que contm a string maria


(maiscula ou minscula)



6HOHomR

*5(3
2So}HV
YOLVWDWRGDVDVOLQKDVGR
DUTXLYRH[FHWRjVTXHFRQWpPD
VWULQJ

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



AOHWUDOLVWDWRGDVDVOLQKDVTXH
LQLFLHPFRPDOHWUDRXVWULQJ
6WULQJ
YDULiYHO VWULQJFRPSRVWD
VWULQJ
PHWDFDUDFWHUHV  ">D]@

JUHSKHDGOLQHVHGWDLOHXQLT
RSHUDPHPOLQKDV



Exemplos:
grep -v Amlia arq1 - lista todas as linhas do arqu1 exceto s
que contm a string Amlia
grep ^R arq1 - lista todas as linhas do arq1que comeam com R
grep [a-z] arq1 -



6HOHomR

&87

VHOHFLRQDFROXQDV

6LQWD[H
FXW>RSo}HV@VWGLQ
2So}HV
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



F[\GHILQHFROXQDLQLFLDO [ H
FROXQDILQDO \
G&KDUGHILQHGHOLPLWDGRU
I[\GHILQHFDPSRLQLFLDO [ H
FDPSRILQDO \
VVXSULPHOLQKDVTXHQmR
FRQWpPGHOLPLWDGRU
2EULJDWRULDPHQWHGHYHVHUXVDGR
FRPDRSomRG

2%62FRPDQGRFXWWUDEDOKDFRP
FROXQDV



O comando FXW corta arquivos em colunas. Tambm pode operar em cada


caractere ou campo, ou alguma combinao de ambos. Quando o arquivo tem algum
separador entre campos voc pode selecion-los atravs de FXW
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 no
contm delimitador
OBS: No permitido o uso da opo F junto com a opo G.



6HOHomR

:&

FRQWDOLQKDVSDODYUDVH
FDUDFWHUHVGHDUTXLYRV

6LQWD[H
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



ZF>RSo}HV@VWGLQ
2So}HV
FFRQWDFDUDFWHUHV
OFRQWDOLQKDV
ZFRQWDSDODYUDV



Exemplos:
grep -l Maria arqu* | wc -l - lista a qtd de linhas que contm a varivel
Maria
cat arq l wc -l

- lista a qtd de linhas do arquivo arq



6HOHomR

63/,7

FRUWDRVWGLQHPDUTXLYRV
PHQRUHVFRQWHQGRXPQ~PHUR
HVSHFtILFRGHOLQKDV

6LQWD[H
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



VSOLW>RSo}HV@VWGLQ>SUHIL[R@
2So}HV
QHVSHFLILFDRQ~PHURGHOLQKDV
GHFDGDDUTXLYRGHVDtGD'HIDXOW
OLQKDVSRUDUTXLYR
SUHIL[RSUHIL[RGRVVWGRXWV
FULDGRV2VXIL[RVHUiDDDEDWp
]]2GHIDXOWGRSUHIL[Rp[



O comando VSOLWcria 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 no por quantidade de arquivos.



6HOHomR

&63/,7

VHSDUDRVDUTXLYRVVHPSUHTXH
HQFRQWUDUXPDFRPELQDomRHQWUH
VHXVDUJXPHQWRVHRFRQWH~GRGR
DUTXLYR

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

6LQWD[H
FVSOLW>RSo}HV@VWULQJ
>DUTJXPHQWRV@

2So}HV

P
Q D
U
8
J



R

U



3



ISUHIL[RSUHIL[RGRVVWGRXWV
FULDGRV2VXIL[RYDULDGHj
'HIDXOW[[



Exemplos
O arquivo livro contm:
Introduo,
Captulo 1,
Captulo 2,
Resumo.
csplit -f capit livro /Captulo / /Captulo /
resultado: capit00 (contm Introduo)
capit01 (contm Captulo 1)
capit02 (contm Captulo2 e Resumo)
csplit -f capit livro %Captulo 1%
resultado: capit00 (contm Captulo 1 Captulo 2 e Resumo)



6HOHomR

&63/,7
2So}HV
DUJQFULDXPDUTXLYRSRU
DUJXPHQWR LQFOXVLYH 2DUTXLYR
SUHIL[RFRQWpPDVOLQKDV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



DQWHULRUHVDRSULPHLURDUJXPHQWR
DUJFULDXPDUTXLYR
FRQWHQGRRVGDGRVDSDUWLUGR
DUJXPHQWR

1mRIXQFLRQDQR)UHH%6'





2UGHQDomR

6257

RUGHQDHFRPELQDP~OWLSORV
DUTXLYRV

6LQWD[H
VRUW>RSo}HV@DUTXLYRV

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

P
Q D
U
8
J



R

U



3



2So}HV
ELJQRUDHVSDoRVHPEUDQFR
SDUDHQFRQWUDUDSULPHLUDRX
~OWLPDFROXQDGRFDPSR
GFODVVLILFDXVDQGRRUGHP
DOIDEpWLFD6RPHQWHOHWUDVGtJLWRV
HHVSDoRVVmRFRQVLGHUDGRVQD
FRPSDUDomR
IDOWHUDWRGDVDVOHWUDV
PLQ~VFXODVSDUDPDL~VFXODV
DQWHVGDFRPSDUDomR



O comando VRUW opera com caracter, campo ou em uma combinao dos dois.
Caso o arquivo classificado possua linhas duplicadas estas podem ser retiradas
atravs do comando XQLT. Para tornar mais eficiente esse comando deve ser
utilizado aps os dados terem sido selecionados (JUHS ou FXW).
Exemplos :
sort -nru arquivo - ordena o arquivo em ordem numrica decrescente e
deleta as linhas duplicadas.
sort -m arq1 arq2 - junta arq1 e arq2 e ordena
sort -f arq1 -o arq1_sort - ignora uppercase e grava o resultado em
arq1_sort.



2UGHQDomR

6257
2So}HV
PMXQWDWRGRVRVDUTXLYRVGH
HQWUDGDQXPVy2VDUTXLYRVGH
HQWUDGDGHYHPHVWDU
FODVVLILFDGRV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



QRUGHQDRDUTXLYR
QXPHULFDPHQWH
URUGHQDRDUTXLYRHPRUGHP
GHFUHVFHQWH
XGHOHWDOLQKDVGXSOLFDGDV
WGHILQHGHOLPLWDGRU
N>FDPSRBLQLFLDOFROXQDBLQLFLDO@
>RSomR@
>FDPSRBILQDOFROXQDBILQDO@
>RSomR@GHILQHDFKDYHGRVRUW



As opes vlidas para a RSomRN so: b,d,f,n,r


Os valores default para a opo -k:
cpo ini

comeo 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



7UDQVIRUPDomR

75

WUDQVIRUPDFDUDFWHUSRUFDUDFWHU

6LQWD[H
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



WUVWULQJBDQWLJDVWULQJBQRYD
VWGLQ!VWGRXW



O comando

WU traduz os dados de entrada caractere por caractere, com base em


tabelas de converso (string) especificadas pelo usurio.

Exemplos:
tr

(A-Z) (a-z) < arq1 > arq1min

tr (:)

(\t) < cad1 > cad1t



7UDQVIRUPDomR

''

FRQYHUWHHFRSLDDUTXLYR

6LQWD[H

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



GGLI

VWGLQRI

FRQY

>RSo}HV@

VWGRXW

2So}HV
OFDVHFRQYHUWHRFRQWH~GRGR
DUTXLYRSDUDPLQ~VFXOR
XFDVHFRQYHUWHRFRQWH~GRGR
DUTXLYRSDUDPDL~VFXOR
DVFLLFRQYHUWHHEFGLFSDUDDVFLL
LEPFRQYHUWHDVFLLSDUDDYHUVmR
HEFGLFGD,%0





-XQomR

-2,1

MXQWDGRLVDUTXLYRVFRPELQDQGR
OLQKDDOLQKD2VDUTXLYRVGHYHP
HVWDURUGHQDGRV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



6LQWD[H
MRLQ>RSo}HV@DUTXLYRDUTXLYR
2So}HV
W&KDUGHILQHGHOLPLWDGRU
DQRDUTXLYRSURGX]XPDOLQKD
GHVDtGDSDUDFDGDOLQKDGR
DUTXLYRHVSHFLILFDGRSHORQ
DUTXLYRPHVPRSDUDRVFDPSRV
GRMRLQTXHQmRFDVDPFRP
QHQKXPDOLQKDGRRXWURDUTXLYR
GHHQWUDGD



Quando o MRLQ 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 VRUW).
2%6

: Obrigatoriamente a opoD tem que vir antes da opo W.



-XQomR

-2,1
2So}HV
RQRDUTXLYRFDPSRDVOLQKDV
GHVDtGDVmRFRPSRVWDVSHOD
OLVWDGRVFDPSRVHVSHFLILFDGDV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



QDYDULiYHO
QDUTXLYRFDPSRSDUDGHILQLU
PDLVFDPSRVVHSDUHRVSRU
EUDQFRRXYtUJXOD
FDPSRRXFDPSRID]RMRLQ
GHDUTXLYRVXVDQGRRFDPSR
HVSHFLILFDGRQDYDULiYHOFDPSR
GRDUTXLYR  RXDUTXLYR 



Exemplos:
DUTBHQW

Aldo:HC

DUTBHQW

Aldo:enfermeiro:7234

Bruno:IMECC

Joo:digitador:7111

Joo:CCUEC

Ricardo:mdico:7323

join -t: arq_ent1 arq_ent2 > arq_saida


DUTVDLGD

vazio

join -a1-t: arq_ent1 arq_ent2 > arqsaida


DUTVDLGD

Aldo:HC:enfermeiro:7234
Bruno:IMECC:__________
Joo:CCUEC:digitador:7111

join -o 1.1 1.2 2.3 -t: arq_ent1 arq_ent2 > arqsaida


DUTVDtGD

Aldo:HC:7234
Joo:CCUEC:7111



-XQomR

3$67(

DQH[DP~OWLSORVDUTXLYRVFROXQD
SRUFROXQD

6LQWD[H
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



SDVWH>RSo}HV@DUTXLYR
DUTXLYR
2So}HV
G&KDUGHILQHGHOLPLWDGRU
VMXQWDOLQKDVVXEVHTXHQWHVGR
DUTXLYR



Exemplos :
DUTBHQW

Aldo:HC

DUTBHQW

Bruno:IMECC

Aldo:enfermeiro:7234
Joo:digitador:7111

paste -d / arq_ent1 arq_ent2 > arq_saida


Aldo:HC/Aldo:enfermeiro:7234

DUTBVDLGD

Bruno:Imecc/Joo:digitador:7111
paste -s -d / arq_ent1 arq_ent2 >
DUTBVDLGD

Aldo:HC/Bruno:Imecc

Aldo:Enfermeiro:7234/Joo:digitador:7111



6HOHomRH,PSUHVVmR

$:.

OLQJXDJHPGHSURFHVVDPHQWRH
SURFXUDGHSDGU}HV(QFRQWUD
OLQKDVQR V DUTXLYR V GHHQWUDGD
TXHFRPELQDPFRPXPSDGUmR
HVSHFLILFDGRHHQWmRH[HFXWDDV
Do}HVGHILQLGDV

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



6LQWD[H
DZN>RSo}HV@SDGUmR^ISJP
SJP`VWGLQ
2So}HV
)&KDUGHILQHGHOLPLWDGRU
ISJPDUTXLYRTXHFRQWpPDV
Do}HVDVHUHPH[HFXWDGDVSHOR
FRPDQGRDZN
SJPVmRDVDo}HVDVHUHP
H[HFXWDGDVSHORDZN



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 %10s\n, $1, $3} arq1
awk -F: /smith+ern/ arq1
awk -F: /amel??/ arq_fun
awk -F: {printf (nome eh %s ramal %5d\n , $2,$4)} arq_fun
awk -F: $3 ~/Oct/ {print $2 $3} arq1



6HOHomRH,PSUHVVmR

7LSRVGHSDGU}HV

VWULQJ

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3


VWULQJVWULQJ
VWULQJ"
VWULQJ_VWULQJ
VWULQJ>FKDUFKDU@
VWULQJ>?AFKDUFKDU@



Tipos de padres:
VWULQJ : grava em stdout todas as linhas do stdin que contm pelo menos uma
ocorrncia do string.
VWULQJVWULQJ : grava em stdout as linhas que contm o string1 seguido por um
ou mais caracteres que precede o sinal de + e termina com o string2.
VWULQJ": grava em stdout as linhas que contm o string1 seguido por nenhum
ou um caracter que precede o sinal ?
VWULQJ_VWULQJ : grava em stdout as linhas que contm o string1 e/ou o string2.
VWULQJ>FKDUFKDU@ : grava em stdout as linhas que contm o string1 seguido
por qualquer caracter que esteja entre char1 e char2 inclusive (char1 e char2 devem
estar em ordem)
VWULQJ>?AFKDUFKDU@ : grava em stdout as linhas que contm o string1 seguido
por qualquer caracter que QmR esteja entre char1 e char2 inclusive (char1 e char2
devem estar em ordem).



6HOHomRH,PSUHVVmR

7LSRVGHSDGU}HV

aFKDU
aAFKDU

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3


aFKDU


VWULQJ

!

FKDU



VWULQJ 

VWULQJ



Tipos de padres:
  aFKDU : grava em stdout todos os registros que contm no 1o. campo o
caracter char1 ou um string .
aAFKDU : grava em stdout todos os registros que QmR contm no 1o. campo o
caracter char1 ou um string.
  aFKDU : grava em stdout todos os registros que contm o ltimo caracter
igual a char1 ou string.
   VWULQJ : grava em stdout todos os registros que contm o 1o. campo
igual ao string1
! FKDU : grava em stdout todos os registros que o 1o. campo maior ou
igual a char1
 VWULQJ  VWULQJ : grava em stdout todos os registros que o
1o. campo igual ao string1 e o 2o. igual o string2.



6HOHomRH,PSUHVVmR

7LSRVGHDo}HV 287387

,PSUHVVmRGHFDPSRVYDULiYHLVH
FRQVWDQWHV
^SULQW`

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3


5HGLUHFLRQDPHQWR
^SULQW!DUTBRXWSXW`

,QVWUXo}HVDULWPpWLFDV
^SULQW

`

^SULQWUDPHGLD`

9DULiYHLVHVSHFLDLV
^SULQW15`



Tipos de aes 2XWSXW 


Impresso de campos, variveis e constantes:
^SULQW`

: grava em stdout o campo 1 e campo 2 separados por um espao

em branco.
Redirecionamento:
^SULQW!DUTRXWSXW`

: redireciona o campo 1 para o stdout arqoutput .

Instrues aritmticas:
^ SULQW      `

: o campo 1 o resultado da multiplicao do campo1 com o

campo2.
: grava em stdout o campo 1 precedido do
string UD eo string PpGLD o resultado da diviso do campo $2 pelo campo $3 .

^SULQWUDPpGLD`

Variveis Especiais:
: grava em stdout os registros de stdin numerado.

^SULQW15`



6HOHomRH,PSUHVVmR

7LSRVGHDo}HV

&RQFDWHQDomRGHFDPSRV
^SULQW

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



`

,PSULPLUOLQKDHPEUDQFR
^SULQW`

,PSUHVVmRIRUPDWDGDGHFDPSRV
YDULiYHLVRXFRQVWDQWHV
^SULQWIV?Q`
^SULQWIGV?Q
`
^SULQWIVG?Q120(
5$0$/`



seqncia

significado

\n

nova linha

\b

backspace

\t

tab



6HOHomRH,PSUHVVmR

7LSRVGHDo}HV
%(*,1
%(*,1^)6 
^SULQWI VV?Q120(

R
G
D
o
Q
D
Y
$

[
L

O
O
H
K
6

&

R
j
o
D

P
Q D
U
8
J



R

U



3



5$0$/ `
^SULQWI VV?Q `

(1'
(1'^SULQWI VILPGH
UHODWyULR `
(1'^SULQWILPGHUHODWyULR`



%HJLQ
Aes que devem ser executadas antes do stdin ser lido. Na execuo de
mais de uma ao ela deve estar entre colchetes.
(QG
Aes que devem ser executadas aps o stdin ser lido. Se for executar mais
de uma ao ela deve estar entre colchetes.



6HOHomRH,PSUHVVmR

7LSRVGHDo}HV

,QVWUXo}HVFRQGLFLRQDLV
LI H[SUHVVmR ^Do}HV`>HOVH
^Do}HV`@

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



LI 

SUHY ^

SULQW
SUHY

`

9DULiYHLVHVSHFLDLV
15Q~PHURGDOLQKD
FRUUHQWH
1)TXDQWLGDGHGHFDPSRV
GDOLQKD
)6

FDUDFWHUGHILQH

GHOLPLWDGRU





([HPSORVGHIRUPDWDomR
SULQWI
IPW



SULQWI^IPW`

F



D

G

  GHFLPDOLQWHLUR

G

 EEE

O
O G
H
R K
G 6
D  H
o &
Q 
D R
Y j
o
$

D I
[
L
P
Q D
U I
8
J



R

U



3





FDUDFWHU$6&,,



 H
 H[SRQHQFLDomR
 
 
 SRQWRIOXWXDQWH





([HPSORVGHIRUPDWDomR
SULQWI

IPW



SULQWI^IPW`

V

-DQHLUR

-DQHLUR

V

-DQHLUR

V
O
O
H
R K V
G 6
D 
o & V
Q 
D R
Y j V
o
$ D

[
L
P
Q D
U
8
J



R

U



3



VWULQJ

-DQHLUR

-DQHLUR

-DQHLUR

-DQHLUR

-DQ

-DQHLUR

-DQ

-DQHLUR

-DQ

-DQHLUR





&RPDQGRYLHPPRGR
EDWFK

8WLOL]DQGRRHGLWRUYL

YLDUTXLYRFRPDQGRVBYL! 
O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



GHYQXOO

DUTXLYRFRPDQGRVBYL

/FIM
dd
^[
:x



Comandos vi:
YL

abre o arquivo e executa os comandos gravados no arquivo comandos_vi

! GHYQXOO - se a execuo do vi der algum erro ele joga fora as


mensagens de erro

- representa a tecla ESC (digitar CTRL v CTRL [ )

A>
[

- sai do editor vi e salva o arquivo



)RUPDWRGRFRPDQGRGDWH

CGDWH DC

O
O
H
R K
G 6
D 
o &
Q 
D R
Y j
o
$ D

[
L
P
Q D
U
8
J



R

U



3



!7XH

CGDWH $C

!7XHVGD\

CGDWH EC

!6HS

CGDWH %C

!6HSWHPEHU

CGDWH FC

! 7XH6HS

CGDWH GC

! GLD



CGDWH 'C

! PrVGLDDQR

CGDWH MC

!

CGDWH PC

! PrV

CGDWH SC

!30

CGDWH 8C

!

CGDWH \C

! DQR



O default do comando date :


%a %b %d %T %Z %Y



5HIHUrQFLDV

81,;3URJUDPDomR6KHOO

Lowell Jay Arthur


R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3






&RPDQGRVYL

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3




,1,&,$1'229,

vi filename

abre ou cria um arquivo

vi +18 filename

abre arquivo na linha 18

vi +/frigorfico filename

abre o arquivo na 1a. ocorrncia de frigorfico

view filename

abre o arquivo somente para leitura


&20$1'26'(&85625

move esquerda

move para baixo

move para cima

move direita

move uma palavra direita

move uma palavra direita (alm da pontuao)

move uma palavra esquerda

move uma palavra esquerda (alm da pontuao)

Return

move uma linha abaixo

Back Space

move um caracter esquerda

Space Bar

move um caracter direita

move para o incio da tela

move para o meio da tela

move para o fim da tela

Ctrl-F

avana uma tela

Ctrl-D

avana meia tela

Ctrl-B

retorna uma tela

Ctrl-U

retorna meia tela



&RPDQGRVYL

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3




,16(5,1'2&$5$&7(5(/,1+$6

inseri caracter direita do cursor

inseri caracter direita do cursor e sinaliza fim de inha

inseri caracter esquerda do cursor

inseri caracter esquerda do cursor e sinaliza fim de inha

inseri linha abaixo do cursor

inseri linha acima do cursor


$/7(5$1'227(;72

cw

altera palavra ( ou parte da palavra direita do cursor

cc

altera linha

altera parte da linha direita do cursor

substitui string que o cursor est posicionado

repete string que o cursor est com um outro caracter

r-Return

para linha

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)

desfaz o comando anterior

desfaz todas as alteraes da linha

:u

desfaz o comando anterior da ltima linha



&RPDQGRVYL

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3




'(/(7$1'27(;72

deleta caracter

dw

deleta palavra (ou parte da palavra direita do cursor)

dd

deleta linha

deleta parte da linha direita do cursor

:5,10 d

deleta da linha 5 linha 10


&23,$1'228029(1'27(;72

yy ou Y

marca linha a ser copiada

copia a linha marcada abaixo da linha corrente

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


6(7$1'2/,1+$180(5$'$

:set nu

mostra as linhas numeradas

:set nonu

inibe a numerao das linhas


352&85$1'280$/,1+$

vai para a ltima linha do arquivo

21G

vai para a linha 21



&RPDQGRVYL

R
G
D
o
Q
D
Y
$

[
L
Q
8









O
O
H
K
6

&

R
j
o
D
P
D
U
J
R
U
3




352&85$1'2($/7(5$1'2

/string/

procura a string

?string?

procura a string no texto acima

procura a prxima ocorrncia da string

:g/search-string/s//replace-string/gc
procura e altera, consultando antes de cada ocorrncia
/,03$1'2$7(/$

Ctrl L

limpa a tela
,16(5,1'280$548,92180$548,92

:r filename

inseri o arquivo depois do cursor

:34 r filename

inseri o arquivo aps a linha 34


6$/9$1'2(&$1&(/$1'2

:w

salva as alteraes (no buffer)

:w filename

grava o buffer no arquivo

:wq ou :zz

salva as alteraes e sai do vi

:q!

sai do vi sem salvar as alteraes



Você também pode gostar