Escolar Documentos
Profissional Documentos
Cultura Documentos
LM03 Shellscript3
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