Beruflich Dokumente
Kultur Dokumente
Apresentao
Shell Script Echo Variveis Estruturas do Bash (testes) Passando Parmetros Funo Redirecionamento Algumas ferramentas do Shell
Vrios Shells
O Shell um interpretador de comandos. Mais que uma camada entre o sistema operacional e o usurio, ele tambm uma poderosa linguagem de programao.
Bsh Bouner Shell (Steve Bourne 7 verso do UNIX Bell Labs) Ksh - Korn Shell (David G. Korn at AT&T Bell Labs) Csh C like shell Bash - GNU Bourne-Again SHell
Shell Script
Um programa em shell, geralmente chamado de Script, ou Script Shell
Shell Script = seqncia de chamadas a programas, binrios compilados e todo o repertrio de comandos do UNIX + estruturas de programao do shell (Ifs, WHILEs, FORs, testes, ...
...Como o Shell poderoso, com o tempo mais e mais tarefas comeam a ser desempenhadas por Scripts e estes comeam a crescer, ficar lentos, complicados, difceis de manter. ... normal tambm escrever Scripts rpidos, de poucas linhas, que usado por alguns dias e depois simplesmente esquecido... (Aurlio Marinho Jargas)
Shell Script
Recomendaes para a construo de bons Scripts
Cabealho inicial com detalhes sobre o funcionamento Cdigo alinhado (indent) e bem espaado verticalmente Comentrios explicativos e esclarecedores Nomes descritivos de Funes e Variveis Controle de alteraes e Verses Estrutura interna coesa e padronizada
Shell Script
O primeiro Script
01 02 03 04 05 06 07 #!/bin/sh # # Script para limpar a tela echo A tela ser apagada em 10s sleep 10 clear
#!/bin/sh - Shell a executar o script (bash, zsh, ash, perl, ...) # - comentrio
Shell Script
Executando o Script
$ sh ./meu_script $ . ./meu_script $ source meu_script $ chmod +x meu_script $ ./meu_script ou $ meu_script Se o diretrio corrente (.) estiver no PATH
Imprimindo
Comando echo
Sintaxe: echo [opes] [string] Imprime uma string na sada padro Algumas opes: -n imprime sem alimentao de linha -e habilita interpretao de texto \a - beep \n - nova linha \c - no alimenta linha \t - tabelamento horizontal \0NNN - caracter de cdigo ASCII NNN (octal) ...
Imprimindo
Exemplos com echo
$ echo Linux Linux Entra com um nome e o imprime #!/bin/bash # Recebe um nome e imprime # clear echo -n Entre com seu nome: read NOME echo Seu nome $NOME
10
Imprimindo
Aurlio + echo
#!/bin/sh # cores.sh - Mostra todas as combinaes de cores do console # 2003-07-23 Aurelio Marinho Jargas for LETRA in $(seq 0 7); do # LINHAS: cores das letras for BRILHO in '' ';1'; do # liga/desliga cor brilhante for FUNDO in $(seq 0 7); do # COLUNAS: cores dos fundos SEQ="4$FUNDO;3$LETRA" # compe cdigo de cores echo -e "\033[$SEQ${BRILHO}m\c" # liga a cor echo -e " $SEQ${BRILHO:- } \c" # mostra o cdigo na tela echo -e "\033[m\c" # desliga a cor done; echo # quebra a linha done done
11
Variveis
Manipulando Strings
${var:-texto} ${#var} ${!var} ${var:N} ${var:N:tam} ${var#texto} ${var%texto} ${var/texto/novo} ${var//texto/novo} Se var no est definida, retorna 'texto' Retorna o tamanho da string Executa o contedo de $var (igual a: eval $var) Retorna o texto partir da posio 'N' Retorna 'tam' caracteres partir da posio 'N' Corta 'texto' do incio da string Corta 'texto' do final da string Substitui 'texto' por 'novo', uma vez Substitui 'texto' por 'novo', sempre
12
Variveis
Exemplos
$ VAR=E assim, quando mais tarde me procure, quem sabe a morte, angstia de quem vive... $ echo Esta frase possui ${#VAR} caracteres Esta frase possui 82 caracteres $ echo ${VAR//quem/QUEM} E assim, quando mais tarde me procure, QUEM sabe a morte, angstia de QUEM vive... $ echo ${VAR#E assim, quando mais tarde me procure, } quem sabe a morte, angstia de quem vive... $ echo ${VAR%, quem sabe a morte, angstia de quem vive...} E assim, quando mais tarde me procure $ echo ${VAR:2:5} assim
13
Variveis
Operaes Matemticas
$ A=5; B=3 $ echo $A + $B = $((A+B)) 5 + #!/bin/sh 3 = 8
# Script para calcular a idade $ echo $(($A%$B)) # 2 echo -n Entre com o seu ano de nascimento: read RESP $ let A++; ((B++)); C=$((A+B)); echo A=$A , B=$B e C=$C IDADE=$(($(date +%Y)-$RESP)) A=6 echo Sua idade de $IDADE anos , B=4 e C=10
$ echo A*B=$((A*B)) A*B=24 A^B=1296 A^B=$((A**B))
14
Estruturas do Bash
Sintaxe do comando if
if CONDIO; then comandos elif CONDIO; then comandos else comandos fi
15
Como testar?
Testes
-lt -gt -le -ge -eq -ne Expresses numricas menor que (Less Than) maior que (Greater Than) igual ou menor (Less Equal) maior ou igual (Greater Equal) igual (EQual) diferente (Not Equal)
Exemplos [ 5 -lt 3 ] 5 menor que 3? [ ! 5 -lt 3 ] 5 no menor que 3? [ a = b ] a igual a b? [ -z $VALOR ] $VALOR est vazia?
16
Como testar?
Mais testes
Testes de arquivo/diretrio -d um diretrio -e o arquivo existe -f um arquivo normal -G o grupo do arquivo o do usurio atual -L o arquivo/diretrio um link simblico -O o dono do arquivo o usurio atual -p o arquivo um named pipe -r o arquivo/diretrio tem permisso de leitura -s o tamanho do arquivo maior que zero -N o arquivo foi modificado desde a ltima leitura -w o arquivo/diretrio tem permisso de escrita -x o arquivo/diretrio tem permisso de execuo -nt o arquivo mais recente (Newer Than) -ot o arquivo mais antigo (Older Than) -ef o arquivo o mesmo (Equal File)
17
Estruturas do Bash
if na inicializao do sistema
#!/bin/sh # # rc.M This file is executed by init(8) when the system is being ... # Tell the viewers what's going to happen. echo "Going multiuser..." ... # Start networking daemons: if [ -x /etc/rc.d/rc.inet2 ]; then . /etc/rc.d/rc.inet2 fi ... # Start the print spooling system. This will usually be LPRng (lpd) or CUPS. if [ -x /etc/rc.d/rc.cups ]; then # Start CUPS: /etc/rc.d/rc.cups start elif [ -x /etc/rc.d/rc.lprng ]; then # Start LPRng (lpd): . /etc/rc.d/rc.lprng start fi ...
18
Estruturas do Bash
Script para resolver equao de 2 grau
#!/bin/bash # Equao de segundo grau # Por Rudson R. Alves # Verso 1.1 if [ -z $3 ]; then echo -e "Entre: segrau <A> <B> <C>\npara: AX^2 + BX + C = 0" exit fi echo "$1 X^2 + $2 X + $3 = 0" DELTA=$( echo "scale=10; $2^2 - 4*$1*$3" | bc -l ) if [ "$DELTA" -lt "0" ]; then echo "No possui raizes reais" else echo "Raizes reais:" SQRT=$( echo "scale=10; sqrt($DELTA )" | bc -l ) X1=$( echo "scale=10; (((-1)*$2) + $SQRT)/(2*$1)" | bc -l ) X2=$( echo "scale=10; (((-1)*$2) - $SQRT)/(2*$1)" | bc -l ) echo -e "R1 = $X1\nR2 = $X2" fi
19
Estruturas do Bash
Um pouco de diverso
$ echo abacaxi > t1 $ echo abobora > t2 $ mkdir t3 $ ln -s t1 t4 $ chmod 770 t1 $ ls -l total 8 -rw-r--r-- 1 rudson users 8 2006-04-22 -rw-r--r-- 1 rudson users 8 2006-04-22 drwxr-xr-x 2 rudson users 72 2006-04-22 lrwxrwxrwx 1 rudson users 2 2006-04-22
t1 t2 t3/ t4 -> t1
20
Estruturas do Bash
Identificando um arquivo com o if
#!/bin/bash # Script para identificar o arquivo passado como diretrio, arquivo, # link, ... # if [ -z $1 ]; then echo Voc deve entrar com um arquivo echo $0 [arquivo/diretrio/...] exit fi if [ ! -e $1 echo $1 elif [ -L $1 echo $1 elif [ -f $1 echo $1 elif [ -d $1 echo $1 else echo $1 fi ]; then no existe ]; then um link ]; then um arquivo ]; then um diretrio no identificado
21
Estruturas do Bash
Outra forma de testar
[ TESTE ] && CONDIO VERDADEIRA || CONDIO FALSA
[ -x t1 ] && echo t1 executvel || echo t1 no executvel
[ t1 -nt t1 ] && echo t1 mais novo que t2 || echo t1 mais velho que t2
22
Estruturas do Bash
Sintaxe do comando for
23
Estruturas do Bash
Comando for
$ for FILE in *; do mv $FILE $FILE.dsk; done $ for FILE in *.wav; do play $FILE; done $ LISTA=1 banana carlos 4 0011 $ for N in $LISTA; do echo >$N<; done >1< >banana< >carlos< >4< >0011< $ for i in $(seq 1 10); do echo $i; done $ for ((i=1;i<11;i++)); do echo $i; done $ for FIG in *.jpg; do convert $FIG ${FIG/.jpg/.png}; done
24
Estruturas do Bash
Exemplo com o for
#!/bin/bash # gauge.sh - barra de progresso usando caracteres de controle # 2003/07/23 Aurelio Marinho Jargas # # [...................................................] 0% # [========================...........................] 50% # [===================================================] 100% # # barra vazia echo -n "[>..................................................] 0%" passo="=>" for i in $(seq 1 100); do sleep .1 pos=$((i/2+1)) # calcula a posio atual da barra echo -ne "\033[G" # vai para o comeo da linha echo -ne "\033[${pos}C" # vai para a posio atual da barra echo -n "$passo" # preenche mais um passo echo -ne "\033[55G" # vai para a posio da porcentagem v=" $i" echo -n "${v:${#v}-3}" # mostra a porcentagem echo -ne "\033[53G]" done echo
25
Estruturas do Bash
Sintaxe do comando while
26
Estruturas do Bash
Comando while
$ while [ $ANS != y ]; do read ANS; done
27
Estruturas do Bash
Sintaxe do comando case
case $VAR in caso1) comandos ;; caso2) comandos ;; ... esac
28
Estruturas do Bash
Comando case Script de inicializao do servio ssh (/etc/rc.d/rc.sshd)
#!/bin/sh $ read ANS; case $ANS in 1) echo > 1;; 2) echo Start/stop/restart > 3,4 shell server: > #2;; 3|4|5) echothe secureou 5;; *) echo > outra coisa;; esac ... $ read ANS;\ case "$1" in case $ANS in\ 'start') 1)\ sshd_start echo > 1\ ;; ;;\ 'stop') 2)\ sshd_stop echo > 2\ ;; ;;\ 'restart') 3|4|5)\ sshd_restart echo > 3,4 ou 5\ ;; ;;\ *) *)\ echo "usage $0 start|stop|restart" echo > outra coisa\ esac ;; esac
29
Passando Parmetros
Passando parmetros
$0 $1 ... $9 $10 ... $# $* $@ $$ $? Parmetro nmero 0 (nome do comando ou funo) Parmetro nmero 1 Parmetro nmero 9 Parmetro nmero 10 Nmero de parmetros Todos os parmetros numa nica string Todos os parmetros em strings separadas Nmero PID do processo Cdigo de retorno do ltimo comando
30
Passando Parmetros
Script parametros.sh
#!/bin/sh # # Apresenta os parmetros enviados ao script, # enumerando-os, um por linha. # # Entrada: Parmetros quaisquer # echo "Nmero de parmetros passados $#" j=1 for i in $*; do echo "Parmetro $j: $i" let j++ done
31
Funo
Sintaxe de funo
function nome_da_funo() { comandos }
nome_da_funo() { comandos }
32
Funo
Funes: funcao.sh
#!/bin/bash # # Script para teste de funes # function func() { echo "Nmero de parmetros passados $#" j=1 for i in $*; do echo "Parmetro $j: $i" let j++ done } #-----------------------------------------echo "Teste de funes" LISTA=$* func $LISTA
33
Redirecionamento
Redirecionamentos
> < >> 2> 2>> 2>&1 >&2 >&2>&| redireciona a sada padro (STDOUT) redireciona a entrada padro (STDIN) redireciona a sada padro (anexando) redireciona a sada de erro (STDERR) redireciona a sada de erro (anexando) conecta a sada de erro a sada padro conecta a sada padro a sada de erro fecha a sada padro fecha a sada de erro conecta a sada padro com a endrada padro do comando seguinte
34
Redirecionamento
Exemplos de redirecionamento
$ ls -la > LISTA.TXT $ startx 2> ERROS-XORG
$ echo -e '\n echo Iniciando o automount... \n /etc/rc.d/rc.autofs start \n' >> /etc/rc.d/rc.local
35
Cat
Comando cat
Sintaxe: cat [opes] [arquivo] Apresenta o contedo de um arquivo. Algumas opes: -n, --number -s, --squeeze-blank -E, --show-ends Exemplos: $ cat /etc/fstab ... $ cat -n /etc/fstab 1 ... enumera as linhas remove linhas em branco coloca um $ no fim de cada linha
36
Cut
Comando cut
Sintaxe: cut [opes] [arquivo] Extrai sees especficas de uma linha. Algumas opes: -d, --delimiter=DELIM -f, --fields=LIST -c, --characters=LIST
utiliza um delimitador especfico, ao invs do TAB seleciona apenas os campos especificados seleciona apenas estes caracteres
Exemplos: $ echo 01:02:03:04:05:06:07:08:09 | cut -c 5-8 2:03 $ echo 01:02:03:04:05:06:07:08:09 | cut -d: -f3 03 $echo 01:02:03:04:05:06:07:08:09 | cut -d: -f3,6-8 03:06:07:08
37
Grep
Comando grep
Sintaxe: grep [opes] FILTRO [arquivo] Filtra linhas em um arquivo que possuem um dado padro (FILTRO). Algumas opes: -i, --ignore-case ignora distino de letras maisculas/minsculas -v, --invert-matchseleciona linhas que no possuem o FILTRO -r, --recursive busca recursivamente em todos os diretrios e sub-dir -n, --line-number coloca nmero de linha -s, --no-messages omite mensagens de erro -l, --files-with-matches apresenta apenas o nome do arquivo que possui o FILTRO
38
Grep
Comando grep
$ grep wireless /usr/doc/Linux-HOWTOs/ ... Apresenta as linhas dos arquivos que possuem a palavra 'wireless' $ grep -r -l -s wireless /usr/doc/Linux-HOWTOs/ ... Apresenta o nome dos arquivos (-l) que possuem a palavra 'wireless', contidos no diretrio e sub-diretrios (-r) /var/log/ e omiti mensagens de erro (-s)
39
Sort
Comando sort
Sintaxe: sort [opes] [arquivo] Ordena as linhas de um arquivo. Algumas opes: -f, --ignore-case -r, --reverse ignora maisculas/minsculas ordem reversa
40
Find
Comando find
Sintaxe: find [-L] [-P] [caminho] [expresso] Busca de arquivos Opes: -P nunca segue links simblicos -L sempre segue links simblicos Expresses: -name <nome> -iname <nome> -type <tipo> especifica nome ou parte dele ignora diferenas entre letras maisculas/minsculas especifica o tipo do arquivo (d - diretrio, f - arquivo, l - link ) -user <usurio> arquivos pretencentes ao <usurio> -exec <comando> executa um comando com os arquivos encontrados -size <tam> arquivos com o tamanho <tam>
41
Find
Exemplos: $ find /usr/lib -name libcairo* ... $ find . -type d -exec du -sh {} + ... apresenta o tamanho de cada subdiretrio em ., atravs do comando du
Outros comandos
users, wc, tr, date, head, tail, xargs, ...
42
Sed
Comando sed
Sintaxe: sed 'comandos' [arquivo] O comando sed um editor de linha
Criar um arquivo test.txt com 20 linhas com um nmero aleatrio em cada linha: $ for i in $(seq 1 20); do SENHA=$RANDOM; echo $i $SENHA >> test.txt; done Remover a 5 linha: $ sed '5 d' test.txt Remover a linha contendo 7 : $ sed '/7 / d' test.txt Substituir a primeira ocorrncias de 2 por -DOIS-: $ sed 's/2/-DOIS-/' test.txt Substituir todas as ocorrncias de 2 por -DOIS-: $ sed 's/2/-DOIS-/g' test.txt
Remover todas as linhas que possua os nmeros 6 e 5: $ sed '/6/ d; /5/ d' test.txt
43
Awk
Sintaxe: awk [ opes ] ... Uma linguagem de propsitos gerais, designada para processar dados em formato texto
Apresenta o grupo e o nome do dispositivo em /dev/ ls -l /dev | awk '{ print $4 \t $9 }'
Comando awk
Soma os tamanhos em bytes dos arquivos (coluna 5 do ls -l) ls -l /dev/ | awk '{ sum += $5 } END { print sum }'
Somas os tamanhos em bytes dos arquivos pertencentes ao grupo disk ls -l /dev/ | awk '$4 == disk { sum += $5 } END { print sum }'
44
Consideraes finais
#!/bin/bash # # cd2mp3.sh - Converso de um CD de audio ou arquivos avi em mp3 # # Homepage : http://www.guses.com.br # Autor : Rudson R. Alves <alves[a]guses.com.br> # Mantenedor: Rudson R. Alves <alves[a]guses.com.br> # # --------------------------------------------------------------# IMPLEMENTAR # # --------------------------------------------------------------# Este programa converter um cd de audio em mp3, com a possibilidade # de seleo de trilhas especficas. Os parmetros passados ao lame # e cdda2wav so declarados nas variveis LAMEOPTS e CDDAOPTS, # respectivamente # A compresso mp3 feita com o padro vbr (variable bitrate) em # alta qualidade (-V 0) # # Exemplos: # 1 - Converte todo um CD de audio em mp3 # $ cd2mp3 raul # # 2 - Converte as trilhas 4,5,8 a 15 em mp3 # $ cd2mp3 -t 4,5,8-15 # # 3 - Converte da trilha 1 a 10 em mp3 # $ cd2mp3 -t 1-10 # $ cd2mp3 -t -10 # # 4 - Converte da trilha 13 at a ltima # $ cd2mp3 -t 13# # 5 - Converte todos os arquivos *.wav para *.mp3 # $ cd2mp3 -mp3only # # # Histrico # v 1.4.11 23-04-2006 # - Corrigido bug na varivel MUSICFILE. Ele deve iniciar com # algum valor diferente de nulo. # - Teste [ ! -x $MUSICFILE ] foi mudado para [ ! -s $MUSICFILE ], # que verifica se o tamanho do arquivo diferente de zero # v 1.3 28/02/2006 # - Ler arquivo de configurao em ~/.local/etc/ se houver # v 1.2 06/01/2006 # - Checagem dos aplicativos cdda2wav e lame # - Criao de um pacote e estruturao com arquivo de # configurao # - Adio de mais comentrios no programa # v 1.1 05/01/2006 # - adio das opes de inicializao # -t ... start track # -mp3only converte os arquivos wave para mp3 # --help, -h help # v 1.0 # - primeira verso # # COPYRIGHT: Este programa GPL. # #---------------------------------------------------------------# Funoes #---------------------------------------------------------------# Funo para gerar uma lista de nmeros a partir de uma entrada # na forma 1,4,8,10-15 => 1 4 8 10 11 12 13 14 15 # Uso: # cd2mp3_mklist <lista> <ltimo nmero da lista> # Parmetros de entrada: # 1 - lista como a do exemplo acima # 2 - ltimo nmero da seqencia, para processar opes como 4- (4 5 6 ... ltimo) # e all (1 2 3 ... ltimo) function cd2mp3_mklist() { # ltimo nmero possvel para a lista LAST_NUMBER=$2 # Seqncia para composio da lista AUX=${1//,/ } # substitui vrgulas por espaos ANSWER=${AUX//-/ - } # substitui hifens por espao hifem espao # Inicia lista NLIST="" # verifica se para gerar uma lista completa if [ "$ANSWER" = "all" -o "$ANSWER" = "ALL" ]; then NLIST=$( seq 1 $LAST_NUMBER ) # gera lista completa (1 2 3 ... LAST_NUMBER) else # gera lista personalizada NEXT="" # prximo algarismo da lista SEQ="" # flag de seqncia for i in $ANSWER; do # verifica se gera uma seqncia if [ "$i" = "-" ]; then if [ "$i" = "-" ]; then SEQ="+" else # checa maior itm da lista if [ "$i" -gt "$LAST_NUMBER" ]; then N="$LAST_NUMBER" else N="$i" fi # if [ "$SEQ" = "+" ]; then # checa maior itm da lista if [ "$N" -gt "$LAST_NUMBER" ]; then END="$LAST_NUMBER" else END="$N" fi # gera uma seqncia if [ "$NEXT" = "" ]; then NLIST="$NLIST $( seq 1 $N )" else NLIST="$NLIST $( seq $NEXT $N )" fi SEQ="" NEXT="" else # se NEXT estiver carregado, descarregue-o na lista if [ "$NEXT" != "" ]; then NLIST="$NLIST $NEXT" fi # carrega prximo tem da lista NEXT="$N" fi fi done # Termina a lista # verifica se ltima entrada uma seqencia ou outro nmero if [ "$SEQ" = "+" -a "$NEXT" != "" ]; then NLIST="$NLIST $( seq $NEXT $LAST_NUMBER)" elif [ "$NEXT" != "" ]; then if [ "$NEXT" -le "$LAST_NUMBER" ]; then NLIST="$NLIST $NEXT" fi fi fi # Imprime resultado echo $NLIST # fi exit LAME=$( which lame ) if [ $? = 1 ]; then echo -e "\033[33m\nlame command not found. \033[m" echo -e "\033[33m Please, take lame last version from http://www.mp3dev.org page and install. \033[m" cd2mp3_exit exit fi # Carrega variveis if [ -e $HOME/.local/etc/cd2mp3.sh ]; then # carrega variveis localmente se houver echo "Load parameters in $HOME/.local/etc/cd2mp3.sh" . $HOME/.local/etc/cd2mp3.sh else # carrega variveis padres echo "Load parameters in $DIRBASE/etc/cd2mp3.sh" . $DIRBASE/etc/cd2mp3.sh fi FILEOUT="" # Verifica a entrada de parmetros if [ $# -eq 0 ]; then cd2mp3_use fi # Analiza a entrada de parmetros cd2mp3_parameters $@ # Analiza CD de audio if [ $MP3ONLY -eq 0 ]; then echo -e "\033[1m\033[5m\nChecking tracks. Waiting... \033[m" N_TRACKS=$( cd2mp3_info ) echo -e "\033[1mNumber of tacks: $N_TRACKS \033[m" TRACK_LIST=$( cd2mp3_mklist $TRACKS $N_TRACKS ) fi if [ $MP3ONLY -eq 1 ]; then # Converte arquivos *.wav do diretrio corrente LISTA=$( ls *.wav ) if [ "$LISTA" != "" ]; then for i in ${LISTA}; do lame $LAMEOPTS $i ${i/.wav/.mp3} done else # Caso no exista arquivos *.wav no diretrio corrente echo "\033[31mNo *.wav files in current directory. \033[m" fi else # Cria mp3 a partir de um CD de audio mkdir $FILEOUT 2>/dev/null if [ ! -s $MUSICFILE ]; then for i in $TRACK_LIST; do # Ler track $i echo -e "\033[1m\ncdda2wav -t $i $CDDAOPTS -device $DEVICE \033[m" ###### FIXME: fazer o cdda2wav criar o arquivo wave em $TMPWAV $CDDA2WAV -t $i $CDDAOPTS -device $DEVICE ###### # Gera nome do arquivo de sada AUX="0$i" FILENAME=$FILEOUT"_"${AUX:${#AUX}-2}".mp3" # Converte track $i para mp3 EXEC="$LAME $LAMEOPTS audio.wav $FILEOUT/$FILENAME" echo -e "\033[1m\n$EXEC \033[m" eval $EXEC done else i=1 while read j; do # Ler track $i echo -e "\033[1m\ncdda2wav -t $i $CDDAOPTS -device $DEVICE \033[m" ###### FIXME: fazer o cdda2wav criar o arquivo wave em $TMPWAV $CDDA2WAV -t $i $CDDAOPTS -device $DEVICE ###### # Gera nome do arquivo de sada AUX="0$i" FILENAME=$FILEOUT"_"${AUX:${#AUX}-2}".mp3" # Converte track $i para mp3 EXEC="$LAME $j $LAMEOPTS audio.wav $FILEOUT/$FILENAME" echo -e "\033[1m\n$EXEC \033[m" eval $EXEC let i++ done < $MUSICFILE fi fi cd2mp3_exit
## # Funo de instrues de uso function cd2mp3_use() { echo echo "Use: cd2mp3 [options] <output_name> options -t ... track: -t 1-3; -t -4; -t 5-3,8-; -t all -mp3only convert all *.wav to *.mp3 -f <file> where <file> have an list of tracks names and music information wich lame options keys (-tt, -ta, ...) Example: # list of musics from -tt \"A Man and a woman\" -ta U2 -ty 1986 ... See lame manual \"ID3 tag options\" for more options " rm $CD2MP3_TMP 2>/dev/null cd2mp3_end exit } ## # Funo para ler informaes da mdia de audio function cd2mp3_info() { cdda2wav -J -g -paranoia -H -D $DEVICE 2>$CD2MP3_TMP more $CD2MP3_TMP | grep "^Tracks:" | cut -c8,9 } ## # Funo para processar e separar # Uso # cd2mp3_parameters $@ # $@ lista de parmetros passadas function cd2mp3_parameters() { ALL_PAR=( $@ ) # carrega N_PAR=$# # carrega i=0 os parmetros de entrada do script ao script todos os parmetros o nmero de parmetros
# inicia o contador
45
Bibliografia