Escolar Documentos
Profissional Documentos
Cultura Documentos
LM03 Shellscript3
LM03 Shellscript3
LINUX USER
Papo de
botequim III
Artista2
Artista4
Artista6
Artista8
www.linuxmagazine.com.br
Outubro 2004
85
LINUX USER
Papo de Botequim
Quadro 2 O arquivo
musicas
$ cat musicas
album 1^Artista1~Musica1:U
Artista2~Musica2
album 2^Artista3~Musica3:U
Artista4~Musica4
album 3^Artista5~Musica5:U
Artista6~Musica5
album 4^Artista7~Musica7:U
Artista8~Musica8
Note que neste caso usei a notao AZ para no escrever ABCDYZ. Outro
tipo de notao que pode ser usada so
as escape sequences (como eu traduziria? Seqncias de escape? Meio sem
sentido, n? Mas v l) que tambm
so reconhecidas por outros comandos
e tambm na linguagem C, e cujo signicado voc ver na Tabela 2:
Deixa eu te contar um causo: um
aluno que estava danado comigo resolveu complicar minha vida e como res-
86
Outubro 2004
www.linuxmagazine.com.br
2004
2004
Papo de Botequim
Dica: a opo -v do cat mostra os caracteres de controle invisveis, com a notao ^L, onde ^ a tecla Control e L
a respectiva letra. A opo -e mostra o
nal da linha como um cifro ($).
Isto ocorre porque no DOS o m dos
registros indicado por um Carriage
Return (\r Retorno de Carro, CR) e
um Line Feed (\f Avano de Linha, ou
LF). No Linux porm o nal do registro indicado somente pelo Line Feed.
Vamos limpar este arquivo:
$ tr -d \r < ArqDoDOS.txt > /tmp/$$
$ mv -f /tmp/$$ ArqDoDOS.txt
LINUX USER
pts/ U
Sep 18
pts/ U
Sep 20
pts/ U
Sep 20
pts/ U
Sep 20
13:40
07:01
08:19
$
10:01
Tabela 1 O comando tr
Opo
Signicado
-s
Comprime n ocorrncias de
cadeia1 em apenas uma
-d
www.linuxmagazine.com.br
Outubro 2004
87
LINUX USER
Papo de Botequim
Tabela 2
$ ls musicas
musicas
$ echo $?
0
$ ls ArqInexistente
ls: ArqInexistente: No such U
le or directory
$ echo $?
1
$ who | grep jneves
jneves
pts/1
Sep 18 U
13:40 (10.2.4.144)
$ echo $?
0
$ who | grep juliana
$ echo $?
1
Seqncia
\t
\n
\v
\f
\r
\\
O que que esse $? faz a? Algo comeado por cifro ($) parece ser uma varivel, certo? Sim uma varivel que
contm o cdigo de retorno da ltima
instruo executada. Posso te garantir que se esta instruo foi bem sucedida, $? ter o valor zero, caso contrrio
seu valor ser diferente de zero. O que
nosso comando condicional (if) faz
testar esta varivel. Ento vamos ver a
sua sintaxe:
if cmd
then
cmd1
cmd2
cmdn
else
cmd3
cmd4
cmdm
Signicado
Tabulao
Nova linha
<ENTER>
Tabulao
Vertical
Nova
Pgina
Incio da
linha <^M>
Uma barra
invertida
Outubro 2004
\013
\014
\015
\0134
j existe
else
if useradd $1
then
echo Usurio \$1\ U
includo em /etc/passwd
else
echo Problemas no U
cadastramento. Voc root?
88
Octal
\011
\012
www.linuxmagazine.com.br
/dev/null
then
echo Usuario \$1\ j U
existe
else
if useradd $1
then
echo Usurio \$1\ U
includo em /etc/passwd
else
echo Problemas no U
cadastramento. Voc root?
E novamente:
$ incusu botelho
Usurio botelho j existe
Papo de Botequim
Como voc viu, uma pequena evoluo em relao verso anterior. Antes
de incluir um registro (que na verso
anterior poderia ser duplicado), testamos se o registro comea (^) e termina
($) de forma idntica ao parmetro
lbum passado ($1). O circunexo (^)
E agora um no cadastrado:
$ musinc album 5^Artista9~ U
Musica9:Artista10~Musica10
$ cat musicas
album 1^Artista1~Musica1: U
Artista2~Musica2
album 2^Artista3~Musica3: U
Artista4~Musica4
album 3^Artista5~Musica5: U
Artista6~Musica5
album 4^Artista7~Musica7: U
Artista8~Musica8
album 5^Artista9~Musica9: U
Artista10~Musica10
LINUX USER
www.linuxmagazine.com.br
Outubro 2004
89