Você está na página 1de 45

Um passeio pelo Shell

Script
Por: Rudson R. Alves
Bacharel em Fsica - UFES
Mestre em Fsica - UNIAMP
Usu!rio de UNI" deste #$$#
Slac%&are 'NU()inu* deste #$$+
Fundador de 'ru,o 'uar! - -../
Fundador do 'USES: htt,:((&&&.0uses.com.1r
ola1orador do ,ro2eto Slac%.Sarava: m%1uild3
create,%03 ... htt,:((slac%.sarava.or0(
1
Apresentao

Shell Scri,t

Echo

4ari!veis

Estruturas do Bash 5testes6

Passando Par7metros

Fun89o

Redirecionamento

Al0umas :erramentas do Shell


2
Vrios Shells

;sh - ;orn Shell 5<avid '. ;orn at A=>= Bell


)a1s6

Bsh ? Bouner Shell 5Steve Bourne @A vers9o


do UNI" Bell )a1s6

sh ? li%e shell

Bash - 'NU Bourne-A0ain SBell


3
C Shell D um inter,retador de comandos. Mais
Eue uma camada entre o sistema o,eracional e
o usu!rio3 ele tam1Dm D uma ,oderosa
lin0ua0em de ,ro0rama89o.
Shell Script
Um ,ro0rama em shell3 0eralmente D chamado de Scri,t3 ou Scri,t
Shell
F...omo o Shell D ,oderoso3 com o tem,o mais e mais tare:as
come8am a ser desem,enhadas ,or Scri,ts e estes come8am a
crescer3 :icar lentos3 com,licados3 di:ceis de manter. ... G normal
tam1Dm escrever Scri,ts r!,idos3 de ,oucas linhas3 Eue D usado ,or
al0uns dias e de,ois sim,lesmente esEuecido... 5AurDlio Marinho
Har0as6I
4
Shell Scri,t J seEKLncia de chamadas a ,ro0ramas3 1in!rios
com,ilados e todo o re,ertMrio de comandos do UNI"
N estruturas de ,ro0rama89o do shell 5I:s3 OBI)Es3
FCRs3 testes3 ...
Shell Script

ontrole de altera8Pes e 4ersPes


Recomenda8Pes ,ara a constru89o de 1ons Scri,ts

a1e8alho inicial com detalhes so1re o :uncionamento

Mdi0o alinhado 5indent6 e 1em es,a8ado verticalmente

oment!rios e*,licativos e esclarecedores

Nomes descritivos de Fun8Pes e 4ari!veis

Estrutura interna coesa e ,adroniQada


5
Shell Script
C ,rimeiro Scri,t
01 #!/bin/sh
02 #
03 # Script para limpar a tela
04 echo A tela ser apagada em 10s
05 sleep 10
0 clear
0!
6
RS(1in(sh - Shell a e*ecutar o scri,t
51ash3 Qsh3 ash3 ,erl3 ...6
R - coment!rio
Shell Script
E*ecutando o Scri,t
" sh #/me$%script
" # #/me$%script
" so$rce me$%script
" chmod &' me$%script
" #/me$%script
ou
" me$%script
Se o diretMrio corrente 5F.I6
estiver no PA=B
7
Imprimindo
8
omando echo
Sinta*e: echo To,8PesU Tstrin0U
Im,rime uma strin0 na sada ,adr9o
Al0umas o,8Pes:
-n im,rime sem alimenta89o de linha
-e ha1ilita inter,reta89o de te*to
Va - 1ee,
Vn - nova linha
Vc - n9o alimenta linha
Vt - ta1elamento horiQontal
V.NNN - caracter de cMdi0o ASII NNN 5octal6
...
Imprimindo
9
E*em,los com echo
" echo (in$'
(in$'
" echo )e *n(in$'
(in$'
" echo )e *033+31m (in$' *033+0m
(in$'
Entra com um nome e o im,rime
#!/bin/bash
# ,ecebe $m nome e imprime
#
clear
echo )n -ntre com se$ nome.
read /01-
echo Se$ nome 2 "/01-
Imprimindo
10
AurDlio N echo
#!/bin/sh
# cores#sh ) 1ostra todas as combina34es de cores do console
# 2003)0!)23 A$relio 1arinho 5argas
6or (-7,A in "8se9 0 !:; do # (</=AS. cores das letras
6or >,<(=0 in ?? ?;1?; do # liga/desliga cor brilhante
6or @A/B0 in "8se9 0 !:; do # C0(A/AS. cores dos 6$ndos
S-DEF4"@A/B0;3"(-7,AF # comp4e cGdigo de cores
echo )e F*033+"S-D"H>,<(=0Im*cF # liga a cor
echo )e F "S-D"H>,<(=0.) I *cF # mostra o cGdigo na tela
echo )e F*033+m*cF # desliga a cor
done; echo # 9$ebra a linha
done
done
Variveis
11
"HJar.)te'toI Se var n9o est! de:inida3 retorna Wte*toW
"H#JarI Retorna o tamanho da strin0
"H!JarI E*ecuta o conteXdo de Yvar 5i0ual a: eval FYvarI6
"HJar./I Retorna o te*to Z ,artir da ,osi89o WNW
"HJar./.tamI Retorna WtamW caracteres Z ,artir da ,osi89o WNW
"HJar#te'toI orta Wte*toW do incio da strin0
"HJarKte'toI orta Wte*toW do :inal da strin0
"HJar/te'to/noJoI Su1stitui Wte*toW ,or WnovoW3 uma veQ
"HJar//te'to/noJoI Su1stitui Wte*toW ,or WnovoW3 sem,re
Mani,ulando Strin0s
Variveis
12
E*em,los
" LA,E- assimM 9$ando mais tarde me proc$reM 9$em sabe a morteM
angNstia de 9$em JiJe###
" echo -sta 6rase poss$i "H#LA,I caracteres
" echo "HLA,//9$em/DA-1I
" echo "HLA,#- assimM 9$ando mais tarde me proc$reM I
" echo "HLA,KM 9$em sabe a morteM angNstia de 9$em JiJe###I
" echo "HLA,.2.5I
-sta 6rase poss$i O2 caracteres
- assimM 9$ando mais tarde me proc$reM DA-1 sabe a morteM
angNstia de DA-1 JiJe###
9$em sabe a morteM angNstia de 9$em JiJe###
- assimM 9$ando mais tarde me proc$re
assim
Variveis
13
C,era8Pes Matem!ticas
" AE5; >E3
" echo "A & "> E "88A&>::
" echo "88"AK">::
" let A&&; 88>&&::; CE"88A&>::; echo AE"A M >E"> e CE"C
" echo AP>E"88AP>:: AQ>E"88APP>::
5 & 3 E O
2
AE M >E4 e CE10
AP>E24 AQ>E12R
#!/bin/sh
# Script para calc$lar a idade
#
echo )n -ntre com o se$ ano de nascimento.
read ,-SS
<BAB-E"88"8date &KT:)",-SS::
echo S$a idade 2 de "<BAB- anos
Estruturas do Bash
i6 C0/B<UV0; then
comandos
eli6 C0/B<UV0; then
comandos
else
comandos
6i
14
Sinta*e do comando i:
Como testar?
=estes

E*,ressPes numDricas
-lt D menor Eue 5)ess =han6
-0t D maior Eue 5'reater =han6
-le D i0ual ou menor 5)ess EEual6
-0e D maior ou i0ual 5'reater EEual6
-eE D i0ual 5E[ual6
-ne D di:erente 5Not EEual6
Strin0s
J D i0ual
SJ D di:erente
-ne n9o D nula
-Q D nula
ondicionais
S N\C lM0ico 5NC=6
-a E lM0ico 5AN<6
-o CU lM0ico 5CR6
E*em,los
[ 5 -lt 3 ] 5 menor que 3?
[ ! 5 -lt 3 ] 5 no menor que 3?
[ a = b ] a igual a b?
[ -z $VAL! ] $VAL! e"t# $azia?
15
Como testar?
Mais testes
=estes de arEuivo(diretMrio
)d D um diretMrio
)e o arEuivo e*iste
)6 D um arEuivo normal
)W o 0ru,o do arEuivo D o do usu!rio atual
)( o arEuivo(diretMrio D um lin% sim1Mlico
)0 o dono do arEuivo D o usu!rio atual
)p o arEuivo D um named ,i,e
)r o arEuivo(diretMrio tem ,ermiss9o de leitura
)s o tamanho do arEuivo D maior Eue Qero
)/ o arEuivo :oi modi:icado desde a Xltima leitura
)X o arEuivo(diretMrio tem ,ermiss9o de escrita
)' o arEuivo(diretMrio tem ,ermiss9o de e*ecu89o
)nt o arEuivo D mais recente 5Ne&er =han6
)ot o arEuivo D mais anti0o 5Clder =han6
)e6 o arEuivo D o mesmo 5EEual File6
16
Estruturas do Bash
#!/bin/sh
#
# rc#1 7his 6ile is e'ec$ted bY init8O: Xhen the sYstem is being
###
# 7ell the JieXers Xhat?s going to happen#
echo FWoing m$lti$ser###F
###
# Start netXorZing daemons.
i6 + )' /etc/rc#d/rc#inet2 [; then
# /etc/rc#d/rc#inet2
6i
###
# Start the print spooling sYstem# 7his Xill $s$allY be (S,ng 8lpd: or CASS#
i6 + )' /etc/rc#d/rc#c$ps [; then
# Start CASS.
/etc/rc#d/rc#c$ps start
eli6 + )' /etc/rc#d/rc#lprng [; then
# Start (S,ng 8lpd:.
# /etc/rc#d/rc#lprng start
6i
###
17
i: na inicialiQa89o do sistema
Estruturas do Bash
Scri,t ,ara resolver eEua89o de -] 0rau

18
#!/bin/bash
# -9$a3\o de seg$ndo gra$
# Sor ,$dson ,# AlJes
# Lers\o 1#1
i6 + )] "3 [; then
echo )e F-ntre. segra$ ^A_ ^>_ ^C_*npara. A`Q2 & >` & C E 0F
e'it
6i
echo F"1 `Q2 & "2 ` & "3 E 0F
B-(7AE"8 echo FscaleE10; "2Q2 ) 4P"1P"3F a bc )l :
i6 + F"B-(7AF )lt F0F [; then
echo F/\o poss$i rai]es reaisF
else
echo F,ai]es reais.F
SD,7E"8 echo FscaleE10; s9rt8"B-(7A :F a bc )l :
`1E"8 echo FscaleE10; 888)1:P"2: & "SD,7:/82P"1:F a bc )l :
`2E"8 echo FscaleE10; 888)1:P"2: ) "SD,7:/82P"1:F a bc )l :
echo )e F,1 E "`1*n,2 E "`2F
6i
Estruturas do Bash
19
Um ,ouco de divers9o
" echo abaca'i _ t1
" echo abobora _ t2
" mZdir t3
" ln )s t1 t4
" chmod !!0 t1
" ls )l
total O
)rX)r))r)) 1 r$dson $sers O 200)04)22 12.1! t1
)rX)r))r)) 1 r$dson $sers O 200)04)22 12.1! t2
drX'r)'r)' 2 r$dson $sers !2 200)04)22 12.1! t3/
lrX'rX'rX' 1 r$dson $sers 2 200)04)22 12.1! t4 )_ t1
Estruturas do Bash
20
Identi:icando um arEuivo com o i:
#!/bin/bash
# Script para identi6icar o ar9$iJo passado como diretGrioM ar9$iJoM
# linZM ###
#
i6 + )] "1 [; then
echo Locb deJe entrar com $m ar9$iJo
echo "0 +ar9$iJo/diretGrio/###[
e'it
6i
i6 + ! )e "1 [; then
echo "1 n\o e'iste
eli6 + )( "1 [; then
echo "1 2 $m linZ
eli6 + )6 "1 [; then
echo "1 2 $m ar9$iJo
eli6 + )d "1 [; then
echo "1 2 $m diretGrio
else
echo "1 n\o identi6icado
6i
Estruturas do Bash
21
Cutra :orma de testar
+ )' t1 [ cc echo t1 2 e'ec$tJel aa echo t1 n\o 2 e'ec$tJel
+ )6 t1 [ cc echo t1 2 $m ar9$iJo aa echo t1 n\o 2 $m ar9$iJo
+ )d t1 [ cc echo t1 2 $m diretGrio aa echo t1 n\o 2 $m diretGrio
+ t1 )nt t1 [ cc echo t1 2 mais noJo 9$e t2 aa echo t1 2 mais Jelho 9$e t2
+ 7-S7- [ cc C0/B<UV0 L-,BAB-<,A aa C0/B<UV0 @A(SA
Estruturas do Bash
6or LA, in (<S7A; do
comandos
done
22
Sinta*e do comando :or
Estruturas do Bash
omando :or
" 6or @<(- in P; do mJ "@<(- "@<(-#dsZ; done
" 6or @<(- in P#XaJ; do plaY "@<(-; done
" (<S7AE1 banana carlos 4 0011
" 6or / in "(<S7A; do echo _"/^; done
_1^
_banana^
_carlos^
_4^
_0011^
23
" 6or i in "8se9 1 10:; do echo "i; done
" 6or @<W in P#dpg; do conJert "@<W "H@<W/#dpg/#pngI; done
" 6or 88iE1;i^11;i&&::; do echo "i; done
Estruturas do Bash
E*em,lo com o :or
#!/bin/bash
# ga$ge#sh ) barra de progresso $sando caracteres de controle
# 2003/0!/23 A$relio 1arinho 5argas
#
# +###################################################[ 0K
# +EEEEEEEEEEEEEEEEEEEEEEEE###########################[ 50K
# +EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE[ 100K
#
# barra Ja]ia
echo )n F+_##################################################[ 0KF
passoEFE_F
6or i in "8se9 1 100:; do
sleep #1
posE"88i/2&1:: # calc$la a posi3\o at$al da barra
echo )ne F*033+WF # Jai para o come3o da linha
echo )ne F*033+"HposICF # Jai para a posi3\o at$al da barra
echo )n F"passoF # preenche mais $m passo
echo )ne F*033+55WF # Jai para a posi3\o da porcentagem
JEF "iF
echo )n F"HJ."H#JI)3IF # mostra a porcentagem
echo )ne F*033+53W[F
done
echo
24
Estruturas do Bash
Xhile C0/B<UV0;
do
comandos
done
25
Sinta*e do comando &hile
Estruturas do Bash
omando &hile
" Xhile + "A/S !E Y [; do read A/S; done
" Xhile read (</-; do echo "(</-; done ^ /etc/6stab
26
" more /etc/6stab a Xhile read (</-; do echo ))_"(</-;
done
Estruturas do Bash
case "LA, in
caso1:
comandos
;;
caso2:
comandos
;;
###
esac
27
Sinta*e do comando case
Estruturas do Bash
omando case
" read A/S; case "A/S in 1: echo _ 1;; 2: echo
_ 2;; 3a4a5: echo _ 3M4 o$ 5;; P: echo _
o$tra coisa;; esac
" read A/S;*
case "A/S in*
1:*
echo _ 1*
;;*
2:*
echo _ 2*
;;*
3a4a5:*
echo _ 3M4 o$ 5*
;;*
P:*
echo _ o$tra coisa*
;;
esac
28
Scri,t de inicialiQa89o do servi8o ssh 5(etc(rc.d(rc.sshd6
#!/bin/sh
# Start/stop/restart the sec$re shell serJer.
###
case F"1F in
?start?:
sshd%start
;;
?stop?:
sshd%stop
;;
?restart?:
sshd%restart
;;
P:
echo F$sage "0 startastoparestartF
esac
Passando Parmetros
29
Passando ,ar7metros
"0 Par7metro nXmero . 5nome do comando ou :un89o6
"1 Par7metro nXmero #
###
"R Par7metro nXmero $
"10 Par7metro nXmero #.
###
"# NXmero de ,ar7metros
"P =odos os ,ar7metros numa Xnica strin0
"e =odos os ,ar7metros em strin0s se,aradas
"" NXmero PI< do ,rocesso
"f Mdi0o de retorno do Xltimo comando
Passando Parmetros
30
#!/bin/sh
#
# Apresenta os pargmetros enJiados ao scriptM
# en$merando)osM $m por linha#
#
# -ntrada. Sargmetros 9$ais9$er
#
echo F/Nmero de pargmetros passados "#F
dE1
6or i in "P; do
echo FSargmetro "d. "iF
let d&&
done
Scri,t ,arametros.sh
uno
31
Sinta*e de :un89o
6$nction nome%da%6$n3\o8:
H
comandos
I
nome%da%6$n3\o8:
H
comandos
I
uno
32
Fun8Pes: :uncao.sh
#!/bin/bash
#
# Script para teste de 6$n34es
#
6$nction 6$nc8:
H
echo F/Nmero de pargmetros passados "#F
dE1
6or i in "P; do
echo FSargmetro "d. "iF
let d&&
done
I
#))))))))))))))))))))))))))))))))))))))))))
echo F7este de 6$n34esF
(<S7AE"P
6$nc "(<S7A
!edirecionamento
33
Redirecionamentos
_ redireciona a sada ,adr9o 5S=<CU=6
^ redireciona a entrada ,adr9o 5S=<IN6
__ redireciona a sada ,adr9o 5ane*ando6
2_ redireciona a sada de erro 5S=<ERR6
2__ redireciona a sada de erro 5ane*ando6
2_c1 conecta a sada de erro a sada ,adr9o
_c2 conecta a sada ,adr9o a sada de erro
_c) :echa a sada ,adr9o
2_c) :echa a sada de erro
a conecta a sada ,adr9o com a endrada ,adr9o
do comando se0uinte
!edirecionamento
34
E*em,los de redirecionamento
" ls )la _ (<S7A#7`7
" start' 2_ -,,0S)`0,W
" ls )la /deJ/ a grep Qb
" echo )e ?*n echo <niciando o a$tomo$nt### *n
/etc/rc#d/rc#a$to6s start *n? __ /etc/rc#d/rc#local
Cat
35
omando cat
Sinta*e: cat To,8PesU TarEuivoU
A,resenta o conteXdo de um arEuivo.
Al0umas o,8Pes:
-n3 --num1er enumera as linhas
-s3 --sEueeQe-1lan% remove linhas em 1ranco
-E3 --sho&-ends coloca um Y no :im de cada linha
E*em,los:
Y cat (etc(:sta1
...
Y cat -n (etc(:sta1
# ...
Cut
36
omando cut
Sinta*e: cut To,8PesU TarEuivoU
E*trai se8Pes es,ec:icas de uma linha.
Al0umas o,8Pes:
-d3 --delimiterJ<E)IM
utiliQa um delimitador es,ec:ico3 ao invDs do
=AB
-:3 --:ieldsJ)IS= seleciona a,enas os cam,os es,eci:icados
-c3 --charactersJ)IS=
seleciona a,enas estes caracteres
E*em,los:
Y echo F.#:.-:./:.+:.^:._:.@:.`:.$I a cut -c ^-`
-:./
Y echo F.#:.-:./:.+:.^:._:.@:.`:.$I a cut -d: -:/
./
Yecho F.#:.-:./:.+:.^:._:.@:.`:.$I a cut -d: -:/3_-`
./:._:.@:.`
"rep
37
omando 0re,
Sinta*e: 0re, To,8PesU FI)=RC TarEuivoU
Filtra linhas em um arEuivo Eue ,ossuem um dado ,adr9o 5FI)=RC6.
Al0umas o,8Pes:
-i3 --i0nore-case i0nora distin89o de letras maiXsculas(minXsculas
-v3 --invert-matchseleciona linhas Eue n9o ,ossuem o FI)=RC
-r3 --recursive 1usca recursivamente em todos os diretMrios e
su1-dir
-n3 --line-num1er coloca nXmero de linha
-s3 --no-messa0es omite mensa0ens de erro
-l3 --:iles-&ith-matches a,resenta a,enas o nome do arEuivo Eue
,ossui o FI)=RC
"rep
38
omando 0re,
Y 0re, F&irelessI (usr(doc()inu*-BCO=Cs(
...
A,resenta as linhas dos arEuivos Eue ,ossuem a ,alavra W&irelessW
Y 0re, -r -l -s F&irelessI (usr(doc()inu*-BCO=Cs(
...
A,resenta o nome dos arEuivos 5-l6 Eue ,ossuem a ,alavra
W&irelessW3 contidos no diretMrio e su1-diretMrios 5-r6 (var(lo0( e
omiti mensa0ens de erro 5-s6
Sort
39
omando sort
Sinta*e: sort To,8PesU TarEuivoU
Crdena as linhas de um arEuivo.
Al0umas o,8Pes:
-:3 --i0nore-case i0nora maiXsculas(minXsculas
-r3 --reverse ordem reversa
E*em,los:
Y sort (etc(,ass&d
...
Y sort -r (etc(,ass&d
ind
40
omando :ind
Sinta*e: :ind T-)U T-PU TcaminhoU Te*,ress9oU
Busca de arEuivos
C,8Pes:
-P nunca se0ue lin%s sim1Mlicos
-) sem,re se0ue lin%s sim1Mlicos

E*,ressPes:
-name bnomec es,eci:ica nome ou ,arte dele
-iname bnomec i0nora di:eren8as entre letras maiXsculas(minXsculas
-td,e bti,oc es,eci:ica o ti,o do arEuivo 5d - diretMrio3 : - arEuivo3
l - lin% 6
-user busu!rioc arEuivos ,retencentes ao busu!rioc
-e*ec bcomandoc e*ecuta um comando com os arEuivos encontrados
-siQe btamc arEuivos com o tamanho btamc
ind
41
Cutros comandos
E*em,los:
Y :ind (usr(li1 -name li1cairoe
...
Y :ind . -td,e d -e*ec du -sh fg N
... a,resenta o tamanho de cada su1diretMrio em .3 atravDs do comando
du
users3 &c3 tr3 date3 head3 tail3 *ar0s3 ...
Sed
42
omando sed
Sinta*e: sed WcomandosW TarEuivoU
C comando sed D um editor de linha
riar um arEuivo Ftest.t*tI com -. linhas com um nXmero aleatMrio em cada linha:
" 6or i in "8se9 1 20:; do S-/=AE",A/B01; echo "i "S-/=A __ test#t't;
done
Remover a ^A linha:
" sed ?5 d? test#t't
Remover a linha contendo F@ F:
" sed ?/! / d? test#t't
Remover todas as linhas Eue ,ossua os nXmeros _ e ^:
" sed ?// d; /5/ d? test#t't
Su1stituir a ,rimeira ocorrLncias de F-I ,or F-<CIS-I:
" sed ?s/2/)B0<S)/? test#t't
Su1stituir todas as ocorrLncias de F-I ,or F-<CIS-I:
" sed ?s/2/)B0<S)/g? test#t't
A#$
43
omando a&%
Sinta*e: a&% T o,8Pes U ...
Uma lin0ua0em de ,ro,Msitos 0erais3 desi0nada ,ara ,rocessar dados em
:ormato te*to
A,resenta o 0ru,o e o nome do dis,ositivo em (dev(
ls )l /deJ a aXZ ?H print "4 *t "R I?
Soma os tamanhos em 1dtes dos arEuivos 5coluna ^ do ls -l6
Somas os tamanhos em 1dtes dos arEuivos ,ertencentes ao 0ru,o dis%
ls )l /deJ/ a aXZ ?H s$m &E "5 I -/B H print s$m I?
ls )l /deJ/ a aXZ ?"4 EE disZ H s$m &E "5 I -/B H print s$m I?
Considera%es &inais
44
#!/bin/bash
#
# cd2mp3#sh ) ConJers\o de $m CB de a$dio o$ ar9$iJos aJi em mp3
#
# =omepage . http.//XXX#g$ses#com#br
# A$tor . ,$dson ,# AlJes ^alJes+a[g$ses#com#br_
# 1antenedor. ,$dson ,# AlJes ^alJes+a[g$ses#com#br_
#
# )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
# <1S(-1-/7A,
#
# )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
# -ste programa conJerter $m cd de a$dio em mp3M com a possibilidade
# de sele3\o de trilhas espech6icas# 0s pargmetros passados ao lame
# e cdda2XaJ s\o declarados nas JariJeis (A1-0S7S e CBBA0S7SM
# respectiJamente
# A compress\o mp3 2 6eita com o padr\o Jbr 8Jariable bitrate: em
# alta 9$alidade 8)L 0:
#
# -'emplos.
# 1 ) ConJerte todo $m CB de a$dio em mp3
# " cd2mp3 ra$l
#
# 2 ) ConJerte as trilhas 4M5MO a 15 em mp3
# " cd2mp3 )t 4M5MO)15
#
# 3 ) ConJerte da trilha 1 a 10 em mp3
# " cd2mp3 )t 1)10
# " cd2mp3 )t )10
#
# 4 ) ConJerte da trilha 13 at2 a Nltima
# " cd2mp3 )t 13)
#
# 5 ) ConJerte todos os ar9$iJos P#XaJ para P#mp3
# " cd2mp3 )mp3onlY
#
#
# =istGrico
# J 1#4#11 23)04)200
# ) Corrigido b$g na JariJel 1AS<C@<(-# -le deJe iniciar com
# alg$m Jalor di6erente de n$lo#
# ) 7este + ! )' "1AS<C@<(- [ 6oi m$dado para + ! )s "1AS<C@<(- [M
# 9$e Jeri6ica se o tamanho do ar9$iJo 2 di6erente de ]ero
# J 1#3 2O/02/200
# ) (er ar9$iJo de con6ig$ra3\o em i/#local/etc/ se ho$Jer
# J 1#2 0/01/200
# ) Checagem dos aplicatiJos cdda2XaJ e lame
# ) Cria3\o de $m pacote e estr$t$ra3\o com ar9$iJo de
# con6ig$ra3\o
# ) Adi3\o de mais comentrios no programa
# J 1#1 05/01/200
# ) adi3\o das op34es de iniciali]a3\o
# )t ### start tracZ
# )mp3onlY conJerte os ar9$iJos XaJe para mp3
# ))helpM )h help
# J 1#0
# ) primeira Jers\o
#
# C0ST,<W=7. -ste programa 2 WS(#
#
#))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
# @$n3oes
#))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
# @$n3\o para gerar $ma lista de nNmeros a partir de $ma entrada
# na 6orma 1M4MOM10)15 E_ 1 4 O 10 11 12 13 14 15
# Aso.
# cd2mp3%mZlist ^lista_ ^Nltimo nNmero da lista_
# Sargmetros de entrada.
# 1 ) lista como a do e'emplo acima
# 2 ) Nltimo nNmero da se9jenciaM para processar op34es como 4) 84 5 ### Nltimo:
# e all 81 2 3 ### Nltimo:
6$nction cd2mp3%mZlist8:
H
# kltimo nNmero posshJel para a lista
(AS7%/A1>-,E"2
# Se9jbncia para composi3\o da lista
AA`E"H1//M/ I # s$bstit$i Jhrg$las por espa3os
A/Sl-,E"HAA`//)/ ) I # s$bstit$i hi6ens por espa3o hi6em espa3o
# <nicia lista
/(<S7EFF
# Jeri6ica se 2 para gerar $ma lista completa
i6 + F"A/Sl-,F E FallF )o F"A/Sl-,F E FA((F [; then
/(<S7E"8 se9 1 "(AS7%/A1>-, : # gera lista completa 81 2 3 ### (AS7%/A1>-,:
else
# gera lista personali]ada
/-`7EFF # prG'imo algarismo da lista
S-DEFF # 6lag de se9jbncia
6or i in "A/Sl-,; do
# Jeri6ica se gera $ma se9jbncia
i6 + F"iF E F)F [; then
i6 + F"iF E F)F [; then
S-DEF&F
else
# checa maior it2m da lista
i6 + F"iF )gt F"(AS7%/A1>-,F [; then
/EF"(AS7%/A1>-,F
else
/EF"iF
6i
#
i6 + F"S-DF E F&F [; then
# checa maior it2m da lista
i6 + F"/F )gt F"(AS7%/A1>-,F [; then
-/BEF"(AS7%/A1>-,F
else
-/BEF"/F
6i
# gera $ma se9jbncia
i6 + F"/-`7F E FF [; then
/(<S7EF"/(<S7 "8 se9 1 "/ :F
else
/(<S7EF"/(<S7 "8 se9 "/-`7 "/ :F
6i
S-DEFF
/-`7EFF
else
# se /-`7 estiJer carregadoM descarreg$e)o na lista
i6 + F"/-`7F !E FF [; then
/(<S7EF"/(<S7 "/-`7F
6i
# carrega prG'imo htem da lista
/-`7EF"/F
6i
6i
done
# 7ermina a lista
# Jeri6ica se Nltima entrada 2 $ma se9jencia o$ o$tro nNmero
i6 + F"S-DF E F&F )a F"/-`7F !E FF [; then
/(<S7EF"/(<S7 "8 se9 "/-`7 "(AS7%/A1>-,:F
eli6 + F"/-`7F !E FF [; then
i6 + F"/-`7F )le F"(AS7%/A1>-,F [; then
/(<S7EF"/(<S7 "/-`7F
6i
6i
6i
# <mprime res$ltado
echo "/(<S7
I
##
# @$n3\o de instr$34es de $so
6$nction cd2mp3%$se8:
H
echo
echo FAse. cd2mp3 +options[ ^o$tp$t%name_
options
)t ### tracZ. )t 1)3; )t )4; )t 5)3MO); )t all
)mp3onlY conJert all P#XaJ to P#mp3
)6 ^6ile_ Xhere ^6ile_ haJe an list o6 tracZs names and m$sic in6ormation
Xich lame options ZeYs 8)ttM )taM ###:
-'ample.
# list o6 m$sics 6rom
)tt *FA 1an and a Xoman*F )ta A2 )tY 1RO
###
See lame man$al *F<B3 tag options*F 6or more options
F
rm "CB21S3%71S 2_/deJ/n$ll
cd2mp3%end
e'it
I
##
# @$n3\o para ler in6orma34es da mhdia de a$dio
6$nction cd2mp3%in6o8:
H
cdda2XaJ )5 )g )paranoia )= )B "B-L<C- 2_"CB21S3%71S
more "CB21S3%71S a grep FQ7racZs.F a c$t )cOMR
I
##
# @$n3\o para processar e separar os pargmetros de entrada do script
# Aso
# cd2mp3%parameters "e
# "e lista de pargmetros passadas ao script
6$nction cd2mp3%parameters8:
H
A((%SA,E8 "e : # carrega todos os pargmetros
/%SA,E"# # carrega o nNmero de pargmetros
iE0 # inicia o contador
# e'it
6i
(A1-E"8 Xhich lame :
i6 + "f E 1 [; then
echo )e F*033+33m*nlame command not 6o$nd# *033+mF
echo )e F*033+33m SleaseM taZe lame last Jersion 6rom http.//XXX#mp3deJ#org page
and install# *033+mF
cd2mp3%e'it
e'it
6i
# Carrega JariJeis
i6 + )e "=01-/#local/etc/cd2mp3#sh [; then
# carrega JariJeis localmente se ho$Jer
echo F(oad parameters in "=01-/#local/etc/cd2mp3#shF
# "=01-/#local/etc/cd2mp3#sh
else
# carrega JariJeis padr4es
echo F(oad parameters in "B<,>AS-/etc/cd2mp3#shF
# "B<,>AS-/etc/cd2mp3#sh
6i
@<(-0A7EFF
# Leri6ica a entrada de pargmetros
i6 + "# )e9 0 [; then
cd2mp3%$se
6i
# Anali]a a entrada de pargmetros
cd2mp3%parameters "e
# Anali]a CB de a$dio
i6 + "1S30/(T )e9 0 [; then
echo )e F*033+1m*033+5m*nChecZing tracZs# laiting### *033+mF
/%7,ACmSE"8 cd2mp3%in6o :
echo )e F*033+1m/$mber o6 tacZs. "/%7,ACmS *033+mF
7,ACm%(<S7E"8 cd2mp3%mZlist "7,ACmS "/%7,ACmS :
6i
i6 + "1S30/(T )e9 1 [; then
# ConJerte ar9$iJos P#XaJ do diretGrio corrente
(<S7AE"8 ls P#XaJ :
i6 + F"(<S7AF !E FF [; then
6or i in "H(<S7AI; do
lame "(A1-0S7S "i "Hi/#XaJ/#mp3I
done
else
# Caso n\o e'ista ar9$iJos P#XaJ no diretGrio corrente
echo F*033+31m/o P#XaJ 6iles in c$rrent directorY# *033+mF
6i
else
# Cria mp3 a partir de $m CB de a$dio
mZdir "@<(-0A7 2_/deJ/n$ll
i6 + ! )s "1AS<C@<(- [; then
6or i in "7,ACm%(<S7; do
# (er tracZ "i
echo )e F*033+1m*ncdda2XaJ )t "i "CBBA0S7S )deJice "B-L<C- *033+mF
###### @<`1-. 6a]er o cdda2XaJ criar o ar9$iJo XaJe em "71SlAL
"CBBA2lAL )t "i "CBBA0S7S )deJice "B-L<C-
######
# Wera nome do ar9$iJo de sahda
AA`EF0"iF
@<(-/A1-E"@<(-0A7F%F"HAA`."H#AA`I)2IF#mp3F
# ConJerte tracZ "i para mp3
-`-CEF"(A1- "(A1-0S7S a$dio#XaJ "@<(-0A7/"@<(-/A1-F
echo )e F*033+1m*n"-`-C *033+mF
eJal "-`-C
done
else
iE1
Xhile read d; do
# (er tracZ "i
echo )e F*033+1m*ncdda2XaJ )t "i "CBBA0S7S )deJice "B-L<C- *033+mF
###### @<`1-. 6a]er o cdda2XaJ criar o ar9$iJo XaJe em "71SlAL
"CBBA2lAL )t "i "CBBA0S7S )deJice "B-L<C-
######
# Wera nome do ar9$iJo de sahda
AA`EF0"iF
@<(-/A1-E"@<(-0A7F%F"HAA`."H#AA`I)2IF#mp3F
# ConJerte tracZ "i para mp3
-`-CEF"(A1- "d "(A1-0S7S a$dio#XaJ "@<(-0A7/"@<(-/A1-F
echo )e F*033+1m*n"-`-C *033+mF
eJal "-`-C
let i&&
done ^ "1AS<C@<(-
6i
6i
cd2mp3%e'it
Bi'lio(ra&ia
45

)ista de Shell-Scri,t
htt,:((1r0rou,s.dahoo.com.1r(0rou,(shell-scri,t(

Pro0rama89o Pro:issional em Shell-Scri,t 3 do


AurDlio Marinho Har0as3 htt,:((aurelio.net

P!0inas do manual 5man6 do sistema 'NU()inu*

Advanced Bash-Scri,tin0 'uide3 Mendel oo,er


htt,:((&&&.tld,.or0()<P(a1s(html(

Você também pode gostar