Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
/nterpretadores de comandos são programas &eitos para intermediar o usurio e seu sistema. 0través destes
interpretadores, o usurio manda um comando, e o interpretador o executa no sistema. 1!es são a “he!! do
sistema Linux. 2saremos o interpretador de comandos bash, por ser mais “extenso que o sh, e para que ha3a
uma me!hor compreensão das in&ormações obtidas aqui, é bom ter uma base sobre o conceito de !(gica de
programação.
2ma das vantagens destes she!! scripts é que e!es não precisam ser compi!ados, ou se3a, basta apenas criar
um arquivo texto qua!quer, e inserir comandos 4 e!e. )ara dar 4 este arquivo a de&inição de “she!! script,
teremos que inc!uir uma !inha no começo do arquivo 5678bin8bash9 e torn%!o “executve!, uti!i$ando o
comando chmod. +amos seguir com um pequeno exemp!o de um she!! script que mostre na te!a: “;ossa7
1stou vivo7:
1 #!/bin/bash
2 echo 'Nossa! Estou vivo!'
<ci!, hein= 0 primeira !inha indica que todas as outras !inhas abaixo deverão ser executadas pe!o bash 5que
se !oca!i$a em 8bin8bash9, e a segunda !inha imprimir na te!a a &rase “;ossa7 1stou vivo7, uti!i$ando o
comando echo, que serve 3ustamente para isto. >omo você p?de ver, todos os comandos que você digita
diretamente na !inha de comando, você poder inc!uir no seu she!! script, criando uma série de comandos, e
é essa combinação de comandos que &orma o chamado she!! script. @ente também dar o comando A&i!e
arquivoB e ve3a que a de&inição de!e é de Courne%0gain he!! cript 5bash script9.
>ontudo, para o arquivo poder se executve!, você tem de atribuir o comando de executve! para e!e. 1
como citamos anteriormente, o comando chmod se encarrega disto:
$ chmod +x arquivo
)ronto, o arquivo poder ser executado com um simp!es “.8arquivo.
1 variavel="valor"
O Ava!orB ser atribuEdo a Avarive! A. +a!or pode ser uma &rase, n'meros, e até outras variveis e comandos.
O va!or pode ser expressado entre as aspas 5“9, ap(stro&os 59 ou crases 5“9. 0s aspas vão interpretar as
variveis que estiverem dentro do va!or, os ap(stro&os !erão o va!or !itera!mente, sem interpretar nada, e as
crases vão interpretar um comando e retornar a sua saEda para a varive!.
+e3amos exemp!os:
$ variavel="Eu estou loado como usurio $user"
$ echo $variavel
Eu estou loado como usurio cla
echo $variavel
eu sou um *rutinha
vão executando
baseado na !(gicacomandos. 2m isso,
“se acontecer dos comandos de contro!e
irei &a$er isso, de &!uxo
se não, irei &a$er mais usados é certamente o i&, que é
aqui!o.
1 i* 0e $linux
2 then
echo ' varivel $linux existe3'
, else
- echo ' varivel $linux n4o existe3'
. 5
O que este pedaço de c(digo &a$= O i& testa a seguinte expressão: e a varive! D!inux existir, então 5then9
e!e di$ que que existe com o echo, se não 5e!se9, e!e di$ que não existe. O operador %e que usei é pré%
de&inido, e você pode encontrar a !istagem dos operadores na tabe!a:
0eq 6ual
0ne 7i*erente
0t aior
0lt enor
0o 8u
0d 9e *or um diretrio
0e 9eexistir
0: 9eestiverva:io
0* 9econtertexto
0o 9e o usurio *or o dono
0r 9e o arquivo &ode ser lido
0 9e o arquivo &ode ser alterado
0x 9e o arquivo &ode ser executado
Outras alternativas
1xistem in'meros comandos no Linux, e para exp!icar todos, terEamos de pub!icar um verdadeiro !ivro. Fas
existem
)rimeirooutras possibi!idades
de tudo você pode dardeuma
aprendi$ado
o!hada nadesta !Engua,doque
manpage também
bash é usado
5comando manem todas
bash9, as disponibi!i$ar
que programações.
os comandos embutidos no interpretador de comandos. 2ma das coisas essencias para o aprendi$ado é sair
co!etando exemp!os de outros scripts e ir estudando%os minuciosamente. )rocure sempre comandos e
expressões novas em outros scripts e em manpages dos comandos. 1 por '!timo, mas não o menos
importante, praticar bastante7
;a tabe!a a seguir, você pode encontrar uma !istagem de comandos para usar em seu she!! script:
case
O case é para contro!e de &!uxo, ta! como é o i&. Fas enquanto o i& testa expressões não exatas, o case vai
agir de acordo com os resu!tados exatos. +e3amos um exemp!o:
1 case $1 in
2 &arametro1B comando1 ) comando2 ))
&arametro2B comando ) comando, ))
, CB echo "Doc tem de entrar com um &arFmetro vlido" ))
- Esac
0qui aconteceu o seguinte: o case !eu a varive! DG 5que é o primeiro parHmetro passado para o programa9, e
comparou com va!ores exatos. e a varive! DG &or igua! 4 “parametroGI, então o programa executar o
comandoG e o comandoJK se &or igua! 4 “parametroJI, executar o comando e o comandoM, e assim em
diante. 0 '!tima opção 5N9, é uma opção padrão do case, ou se3a, se o parHmetro passado não &or igua! a
nenhuma das outras opções anteriores, esse comando ser executado automaticamente.
+ocê pode ver que, com o case &ica muito mais &ci! criar uma espécie de “menu para o she!! script do que
com o i&. +amos demonstrar a mesma &unção anterior, mas agora usando o i&:
G1 i* 0: $1 ) then
G2 echo "Doc tem de entrar com um &arFmetro vlido"
G exit
G, eli* $1 = "&arametro1" ) then
G- comando1
G. comando2
GH eli* $1 = "&arametro2" ) then
GI comando
GJ comando,
1G else
11 echo "Doc tem de entrar com um &arFmetro vlido"
12 5
+e3a a di&erença. muito mais prtico usar o case7 0 vantagem do i& é que e!e pode testar vrias expressões
que
que, onocase não pode.
exemp!o com O case
o i&, é maisum
citamos prtico, mas o não
“comando i& pode
vistosubstituE%!o
antes: o e!i&e "ainda
que éabrange mais &unções.
uma combinação ;otee
de e!se
i&. 0o invés de &echar o i& para criar outro, usamos o e!i& para testar uma expressão no mesmo comando i&.
or
O !aço &or vai substituindo uma varive! por um va!or, e vai executando os comandos pedidos. +e3a o
exemp!o:
1 *or i in C
2 do
c& $i $i3bacKu&
, mv $i3bacKu& /usr/bacKu&
- done
)rimeiramente
parHmetro9 parao a!aço &or atribuiu
varive! o va!or
Di, depois de retorno
executou do comando
o b!oco “N 5que
de comandos. 1m éseguida
equiva!ente a um !soutro
e!e atribui semva!or
nenhum
do
comando “N para a varive! DG e reexecutou os comandos. /sso se repete até que não sobrem va!ores de
retorno do comando “N. Outro exemp!o:
1 *or oriinal in C) do
2 resultado=%echo $oriinal L
tr '(u&&er(' '(loer('%
,
- i* ! 0e $resultado ) then
. mv $oriinal $resultado
H 5
I done
0qui, o que ocorre é a trans&ormação de !etras mai'scu!as para min'scu!as. )ara cada arquivo que o !aço !ê,
uma varive! chamada Dresu!tado ir conter o arquivo em !etras min'scu!as. )ara trans&ormar em !etras
min'scu!as, usei o comando tr. >aso não exista um arquivo igua! e com !etras min'scu!as, o arquivo é
renomeado para o va!or da varive! Dresu!tado, de mesmo nome, mas com !etras min'scu!as.
>omo os exemp!os i!ustram, o !aço &or pode ser bem 'ti! no tratamento de m'!tip!os arquivos. +ocê pode
deix%!os todos com !etras min'scu!as ou mai'scu!as sem precisar renomear cada um manua!mente, pode
organi$ar dados, &a$er bac*up, entre outras coisas.
hile
O -hi!e testa continuamente uma expressão, até que e!a se torne &a!sa. 1xemp!o:
1 variavel="valor"
2 hile $variavel = "valor" ) do
comando1
, comando2
- done
O que acontece aqui é o seguinte: enquanto a “Dvariave! &or igua! a “va!or, o -hi!e &icar executando os
comandos G e J, até que a “Dvariave! não se3a mais igua! a “va!or. e no b!oco dos comandos a
“Dvariave! mudasse, o -hi!e iria parar de executar os comandos quando chegasse em done, pois agora a
expressão Dvariave! P “va!or não seria mais verdadeira.
until
@em as mesmas caracterEsticas do -hi!e, a 'nica di&erença é que e!e &a$ o contrrio. +e3a o exemp!o abaixo:
1 variavel="naovalor"
2 until $variavel = "valor" ) do
comando1
, comando2
- done
0o invés de executar o b!oco de comandos 5comandoG e comandoJ9 até que a expressão se torne &a!sa, o
unti! testa a expressão e executa o b!oco de comandos até que a expressão se torne verdadeira. ;o exemp!o,
o b!oco de comandos ser executado desde que a expressão Dvariave! P “va!or não se3a verdadeira. e no
b!oco de comandos a varive! &or de&inida como “va!or, o unti! pra de executar os comandos quando chega
ao done.
+e3amos um exemp!o para o unti! que, sintaticamente invertido, serve para o -hi!e também:
G1 var=1
G2 count=G
G until $var = "G" ) do
G, comando1
G- comando2
G. i* $count = J ) then
GH
GI 5var=G
GJ count=%ex&r $count + 1%
1G done
)rimeiro, atribuEmos 4 varive! “Dvar o va!or “GI. 0 varive! “Dcount ser uma contagem para quantas
ve$es quisermos executar o b!oco de comandos. O unti! executa os comandos G e J, enquanto a varive!
“Dvar &or igua! a “I. 1ntão usamos um i& para atribuir o va!or para a varive! “Dvar, se a varive!
“Dcount &or igua! a R. e a varive! “Dcount não &or igua! a , soma%se G a e!a. /sso cria um !aço que
executa o comando G ve$es, porque cada ve$ que o comando do b!oco de comandos é executado, soma%se G
4 varive! “Dcount, e quando chega em R, a varive! “Dvar é igua!ada a $ero, quebrando assim o !aço unti!.
1 3bashscri&t2
/sso executar o script she!! “bashscriptJI durante a execução do seu script she!!. ;este caso e!e ser
executado na mesma script she!! em que est sendo usado o comando. )ara uti!i$ar outra she!!, você
simp!esmente substitui o “. pe!o executve! da she!!, assim:
sh scri&t2
tcsh scri&t
;essas !inhas o scriptJ ser executado com a she!! sh, e o script com a she!! tcsh.
Dariveis es&eciais
$G Nome do scri&t que est sendo executado
$10 MarFmetros &assados linha de comando
$J
<un?Aes
<unções são b!ocos de comandos que podem ser de&inidos para uso posterior em qua!quer parte do c(digo.
)raticamente todas as !inguagens usam &unções que a3udam a organi$ar o c(digo. +e3amos a sintaxe de uma
&unção:
1 *uncaoQB T
2 comando1
comando2
, 333
-U
<ci! de entender, não= 0 &unção &uncionar como um simp!es comando pr(prio. +ocê executa a &unção em
qua!quer !ugar do script she!!, e os comandos G, J e outros serão executados. 0 &!exibi!idade das &unções
permite &aci!itar a vida do programador, como no exemp!o &ina!.
Exem&lo <inal
0gora vamos dar um exemp!o de um programa que uti!i$e o que aprendemos com os artigos.
G1 #!/bin/bash
G2 # Exem&lo <inal de 9cri&t 9hell
G #
G,
G- Mrinci&alQB T
G. echo "Exem&lo <inal sobre o uso de scri&ts shell"
GH echo "000000000000000000000000000000000000000000"
GI echo "8&?Aes("
GJ echo
1G echo "13 Vras*ormar nomes de arquivos"
11 echo "23 dicionar um usurio no sistema"
12 echo "3 7eletar um usurio no sistema"
1 echo ",3 <a:er bacKu& dos arquivos do /etc"
1, echo "-3 9air do exem&lo"
1- echo
1. echo 0n "Wual a o&?4o deseXadaP "
1H read o&cao
1I case $o&cao in
1J 1B Vrans*ormar ))
2G 2B dicionar ))
21 B 7eletar ))
22 ,B YacKu& ))
2 -B exit ))
2, CB "8&?4o desconhecida3" ) echo ) Mrinci&al ))
2- esac
2. U
2H
2I Vrans*ormarQB T
2J echo 0n "Mara aiOsculo ou minOsculoP /m "
G read var
1 i* $var = "" ) then
2 echo 0n "Wue diretrioP "
read dir
,
- *or x in %/bin/ls% $dir) do
. >=%echo $x L tr '(loer(' '(u&&er('%
H i* ! 0e $> ) then
I mv $x $>
J 5
,G done
,1
,2 eli* $var = "m" ) then
, echo 0n "Wue diretrioP "
,, read dir
,-
,. *or x in %/bin/ls% $dir) do
,H >=%echo $x L tr '(u&&er(' '(loer('%
,I i* ! 0e $> ) then
,J
-G mv
5 $x $>
-1 done
-2
- 5
-, U
--
-. dicionarQB T
-H clear
-I echo 0n "Wual o nome do usurio a se adicionarP "
-J read nome
.G adduser nome
.1 Mrinci&al
.2 U
.
.,
.- 7eletarQB
clear T
.. echo 0n "Wual o nome do usurio a deletarP "
.H read nome
.I userdel nome
.J Mrinci&al
HG U
H1
H2 YacKu&QB T
H *or x in %/bin/ls% /etc) do
H, c& 0Z /etc/$x /etc/$x3bcK
H- mv /etc/$x3bcK /usr/bacKu&
H. done
HH U
HI
HJ Mrinci&al
Verceira &arte[ Xanelas ra5cas
;os dois t(picos anteriores, vimos a!gumas coisas bsicas e !(gicas de programação em she!! no Linux.
0gora para comp!etar, darei aqui dicas de como usar 3ane!as gr&icas em seus she!! scripts. /sso mesmo,
3ane!as que rodam no ambiente gr&ico, uti!i$adas &aci!mente em seu she!! script. >om esse recurso, vai ser
possEve! deixar o seu programa bem amigve!.
;ão vai ser preciso saber muita coisa de programação em she!!, pois é muito simp!es. 0través do programa
Sdia!og, você poder criar os mais variados tipos de 3ane!as para o programa: caixas de texto, se!eções,
radios, etc. O Sdia!og é uma ideia que vem do dia!og8cdia!og, um programa para conso!e que gera “3ane!as
no conso!e 5aque!as da insta!ação do !ac*-are9 usando a bib!ioteca ncurses. O Sdia!og ao invés de usar a
bib!ioteca ncurses, usa a S!ib para criar as 3ane!as no ambiente gr&ico.
)rimeiro de tudo ser necessrio você obter o Sdia!og no seu sistema. ;ão é comum o Sdia!og estar inc!uso
nas distribuições, então você ter de pegar e compi!ar o programa. Obtenha o programa no ># da Tevista ou
visite o endereço o&icia! do Sdia!og, que é http:88xdia!og.&ree.&r. 0qui eu peguei o arquivo Sdia!og%
G.M.U.tar.b$J, e agora vamos aos passos bsicos para insta!ar e!e. )rimeiro descompacte%o com o comando
bun$ipJ Sdia!og%G.M.U.tar.b$J, e !ogo em seguida tar xpv& Sdia!og%G.M.U.tar. 2m diret(rio chamado Sdia!og%
G.M.U ser criado, e entrando ne!e você estar pronto para compi!%!o e insta!%!o. )ara &a$er isso use os
comandos .8con&igure, depois ma*e e por '!timo ma*e insta!!. ;o passo do ma*e insta!!, o binrio do
Sdia!og ser co!ocado em 8usr8!oca!8bin. )ronto, agora você 3 poder uti!i$ar o Sdia!og através de qua!quer
she!! script.
1 agora vamos 4 ação7 >omo aprendemos nos artigos anteriores, em she!! script é s( co!ocar o comando
dentro do arquivo que e!e 3 vai ser executado quando o script &or executado. 1ntão s( o que temos de
aprender aqui é como usar o Sdia!og. +amos ver um primeiro exemp!o:
1 #!/bin/bash
2
\dialo 00title "Exem&lo nOmero 1!" 00center 00stdout 00>esno ]
, "6sto lealP" ]
- GG
.
H echo $P
>omo você p?de ver, o programa Sdia!og gerou uma 3ane!a com tEtu!o “1xemp!o n'mero G7, perguntando
“/sto é !ega!= e com opções de im e ;ão. ;ote que a V 5barra9 serve para indicar 4 she!! para continuar o
comando da !inha seguinte, então estas três !inhas são que nem uma s(. >omo '!timo comando do exemp!o
dado, temos o echo D=, que eu co!oquei apenas para indicar qua! &oi o retorno da pergunta. >aso o usurio
apertou em im, o retorno vai ser , e se apertou em ;ão, vai ser G. )odemos usar este retorno para contro!ar
o que o usurio esco!her. +e3amos um exemp!o:
1
2 \dialo 00title "Exem&lo
"Neste exem&lo[ vamosnOmero 2!"voc
ver o que 00center
quer00stdout 00>esno
*a:er3 Doc ]
deseXa continuar com o &roramaP" ]
GG
,
- i* $P = "G" ) then
. echo "Wue bom! Doc continuou o &rorama! Marabns!"
H eli* $P = "1" ) then
I echo "Doc saiu do &rorama333"
J 5
+iu como &unciona= 0gora vamos ver outros recursos que o Sdia!og pode o&erecer. 1u vou dar vrios
exemp!os aqui e sair comentando cada opção. +ocê precisar praticar bastante e conhecer as vrias opções.
)rimeiro vamos gerar uma simp!es mensagem pro usurio ver:
+amos ver agora se!eção de itens, que é uma das coisas mais importantes num programa. #esta ve$
usaremos a opção "menubox para gerar um menu com os itens a serem se!ecionados. Fais uma ve$, vamos
ao exemp!o:
1 \dialo 00title "Exem&lo de enu" 00center 00stdout 00menubox ]
2 "Wual sua distribui?4o inux *avoritaP" ]
2G -G G ]
, 1 "9lacKare" ]
- 2 "7ebian" ]
. "Zed `at" ]
H , ";onectiva inux" ]
I - "Eu tenho minha &r&ria distribui?4o"
+iu como é &ci!= O que o usurio esco!her vai aparecer como resu!tado no conso!e 5por causa da opção "
stdout9. e eu co!ocasse o redirecionador JX, poderia ir para um arquivo como no exemp!o anterior. +amos
esc!arecer uma coisa aqui tambémY #epois do texto “Qua! sua distribuição Linux &avorita= , h J
n'meros. 1stes
co!oquei “ doisaEn'meros
I pois correspondem
o Sdia!og 4 a!tura e comprimento
dimensiona automaticamente da 3ane!a.
o tamanho ;os 1ntão
da 3ane!a. exemp!os anteriores
3 sabe, eu
se quiser
mudar o tamanho da 3ane!a, é s( mudar estes dois n'meros.
0gora como '!timo exemp!o, vamos criar uma 3ane!a em que o usurio poder esco!her uma ou mais
opções. /sto é chamado de chec*!ist, e pode ser visto no exemp!o a seguir:
Cem &ci! criar uma inter&ace amigve! para suas she!! scripts. e você pensa que isto é tudo, ainda tem
muito mais por trs do Sdia!og. )ara não ter que &icar comentando cada opção, vou dar uma !ista de
parHmetros e a descrição de suas &unções. O que você dever &a$er é sair testando todas as opções e se
impressionar :9