Professional Documents
Culture Documents
Atividade 1
Tema
Interpretador de comandos de um sistema operacional.
2.
Objetivos
3.
O sistema operacional deve fornecer, entre outros, os seguintes recursos para possibilitar a
operao normal de um computador:
gerncia de memria;
controle e gerncia de unidades de disco;
carregamento e execuo de programas;
atendimento de requisies de programas em execuo;
comunicao com o usurio.
Para tais funes, o sistema operacional conta com dois componentes bsicos: o ncleo e o
interpretador de comandos.
3.1.
Interpretador de comandos
O interpretador de comandos o programa que implementa a interface do sistema operacional
com o usurio. Este programa projetado para facilitar o acesso do usurio ao potencial do sistema
operacional, sem a necessidade de comunicao direta com o ncleo.
No UNIX, o interpretador de comandos fornecido por um programa denominado shell. O
ncleo e o shell do sistema operacional UNIX se relacionam com os utilitrios, o hardware e o usurio
de acordo com o esquema apresentado na Figura 1.
4.
O processo shell pode ser chamado automaticamente durante o login ou manualmente atravs
da entrada do nome do processo pelo teclado. Independente da forma como chamado, ele trabalha na
seguinte sequncia:
Atividade 1
Usurios
Utilitrios
Shell
Ncleo
Sistema operacional
Hardware
Normalmente encontram-se instalados no sistema UNIX pelo menos um dos seguintes tipos de
Bourne Shell (sh): escrito por Steve Bourne (Bell Labs) e disponvel em praticamente todos os
sistemas UNIX e Linux. Foi o primeiro shell popular do UNIX e considerado o shell padro. No
entanto, ele no apresenta muitos dos recursos interativos disponveis no C shell e Korn shell, mas
fornece uma linguagem muito fcil de usar na escrita de shell scripts. Uma nova verso do mesmo
chamada Bash (Bourne-again shell) contempla os melhores recursos do C shell e do Korn shell,
alm de procurar ser compatvel com o sh e com a norma de padronizao de UNIX (POSIX).
C Shell (csh): escrito na University of California at Berkeley, segue o mesmo conceito do Bourne
shell, mas os seus comandos obedecem a uma sintaxe similar da linguagem C (da o seu nome).
Korn Shell (ksh): escrito por David Korn (Bell Labs). Ele fornece todas as caractersticas do C shell,
juntamente com uma linguagem de programao para shell scripts similar ao Bourne shell original.
Portanto, ele uma extenso do Bourne shell, com aperfeioamentos no controle de tarefas, na
edio de linhas de comando e na linguagem de programao. o mais poderoso dos trs, e
fornecido como o shell padro em alguns sistemas UNIX.
Uma vez disponveis, possvel utilizar qualquer um destes shells, de acordo com a
preferncia do usurio.
Destacam-se as seguintes facilidades oferecidas pelos shells do sistema UNIX:
interpretar uma sequncia de comandos concatenados por palavras reservadas;
iniciar a execuo de comandos ou cdigos executveis;
redirecionar a entrada e a sada dos processos;
concatenar uma sequncia de comandos num arquivo, denominado shell script (procedimento de
shell), de modo que, para executar a tal sequncia, s entrar o nome do arquivo (o qual deve estar
com permisso para execuo);
suportar a execuo de vrios processos concorrentes em background;
criar novos shells-filho ou subshells para executar, por exemplo, os processos em background;
suportar variveis locais e globais para, por exemplo, definir e acessar de forma flexvel as
caractersticas do ambiente de um shell;
admitir o uso de metacaracteres nas linhas de comando para mapear um conjunto de arquivos;
concatenar o fluxo de dados entre os processos atravs do pipe (representado pela barra vertical);
substituir os comandos pelo seu resultado.
5.
Atividade 1
o Bourne shell foi o primeiro interpretador de comandos a ganhar popularidade, sendo que muitos
scripts foram escritos na sua linguagem;
o Bourne shell um subconjunto do Korn shell, um interpretador que tem bastante popularidade. O
conhecimento da sua sintaxe vai certamente ajudar a compreender o Korn shell;
uma variante mais completa do Bourne shell conhecida como bash tambm muito popular e
adotada como padro e distribuies Linux importantes, como o Ubuntu.
Conforme j mencionado, um shell l tanto os comandos do terminal, arquivo-padro de
entrada, como os comandos de um script (arquivo com comandos definido pelo usurio).
Obs:
adotaremos a conveno de sublinhar aquilo que digitado pelo usurio;
podemos usar bash no lugar de sh nos exemplos mostrados a seguir;
os arquivos de script descritos neste roteiro esto disponveis na pgina da disciplina.
Exemplo 1 Seguem alguns exemplos de comandos que podem ser acionados a partir do shell;
experimente-os e veja quais so seus resultados.
$ps
$psu
$psaux
$psaux
|
grepseu_nome_de_usurio
Tarefa 1: consulte as pginas de manual (man ps) e explique o que o comando ps aux faz.
Exemplo 2 Os seguintes blocos de comandos:
$psaux|grepswapper
e
$shteste1swapper(oubashteste1swapper)
Variveis de Shell
Os nomes de variveis vlidos so concatenaes de letras, dgitos e underscore ( _ ),
precedidas de uma letra. O operador que fornece acesso ao valor de uma varivel $. Com a operao
de atribuio = pode-se atribuir um valor a uma varivel. Caso a varivel ainda no exista, ela
criada automaticamente.
Exemplo 3 No seguinte bloco de comandos criada uma varivel <x> e atribudo a ela um valor:
prompt>sh
$echo$x
$x='Helloworld'
$echo$x
Helloworld
$ctrld
(iniciarnovoshellsh)
(mostrarocontedodex)
(alterarcontedodex)
(mostrarocontedodex)
(contedoretornado)
(terminarsessodeshellatualevoltarparashell
anterior)
prompt>
Atividade 1
Antes do comando de atribuio de <x>, o seu valor indefinido, como mostra o primeiro
comando echo. O prompt $ indica que sh aguarda a entrada de um novo comando.
O interpretador sh oferece a possibilidade de ler o valor de uma varivel do arquivo de entrada
padro atravs do comando read.
Exemplo 4 O seguinte arquivo script <teste2> demonstra o uso do comando read.
#!/bin/sh
#==>garantequeoscriptserexecutadopor/bin/sh
echo"Entrecomoseunome:"
readnomesobrenome
echo"EntrecomoseuRA:"
readRA
echo"Seunomee"$nome
echo"Seusobrenomee"$sobrenome
echo"SeuRAe"$RA
Tarefa 2: experimente executar o script teste2 de duas formas: com o comando shteste2 e
depois entrando linha a linha em um prompt do shell. Que diferenas voc nota no
comportamento do script e nos resultados comparando estas duas execues. dos comandos linha
a linha no prompt de comando com a execuo via arquivo de script?
Para garantir que o shell script sempre vai ser executado pelo Bourne shell padro, a primeira
linha do arquivo deve ser
#!/bin/sh
Significado
Verificao no seu
ambiente corrente
DISPLAY
identificao do terminal
echo $DISPLAY
EDITOR
caminho para seu editor default
echo $EDITOR
HOME
diretrio no qual a rvore de arquivos privado de cada usurio
echo $HOME
est armazenada
LOGNAME
nome de login do usurio
echo $LOGNAME
MAIL
arquivo de correio eletrnico. Quando este arquivo
echo $MAIL
modificado, recebe-se a mensagem you have mail
PATH
lista de diretrios que devem ser varridos para localizar os
echo $PATH
comandos
PS1
prompt para a entrada de um novo comando
(valor default $)
PS2
prompt para a continuao de um comando
(valor default >)
SHELL
tipo de interpretador de comandos corrente
echo $SHELL
TERM
tipo do terminal
echo $TERM
USER
nome do usurio
echo $USER
Atividade 1
Significado
as opes entradas ao iniciar o processo sh, tais como <-x> e <-v>
identificao do processo sh corrente (pid)
valor retornado pelo ltimo comando executado
identificao do ltimo processo (pid) executado em background
Tarefa 4: descubra e documente o valor atual das variveis $$, $? e $! no seu shell.
Finalmente, sh oferece a possibilidade de proteger uma varivel de manipulaes indevidas
atravs do uso do comando readonly.
Exemplo 5 Este exemplo mostra o uso do comando readonly.
$x='Alo!'
$y='CursoEA872!'
$echo$x$y
Alo!CursoEA872!
$readonlyxy
$readonly
readonlyx
readonlyy
$x='Hello!'
x:isreadonly
5.2.
Blocos de Controle
O sh suporta os seguintes blocos de controle:
5.3.
Expresses em sh
A linguagem de sh suporta um conjunto de operadores para definir comandos mais complexos:
Atribuio: =
Redireo de Entrada e Sada: no sh existem diferentes formas para redirecionar os arquivos de
entrada e sada padro (Tab. 3).
Tarefa 5: crie 2 exemplos de redirecionamento de entrada e sada usando a tabela 3.
Atividade 1
Tabela 3
Instruo
> arquivo
>> arquivo
< arquivo
p1 | p2
n > arquivo
n >> arquivo
n > &m
n < &m
<< c
<< \c
<< 'c'
<< "c"
Significado
redirecionar a sada-padro para <arquivo>
anexar dados da sada-padro a <arquivo>
usar <arquivo> como entrada-padro
conectar a sada-padro do processo p1 com a entrada-padro do processo p2
redirecionar a sada do arquivo de programa cujo descritor <n> para <arquivo>
anexar a sada do arquivo de programa cujo descritor <n> a <arquivo>
concatenar a sada do programa cujo descritor <n>, com o arquivo de descritor <m>
concatenar a entrada do arquivo cujo descritor <n>, com o arquivo de descritor <m>
aceitar caracteres da entrada-padro at a sequncia <c>, onde <c> formada por
caracteres quaisquer, sendo que caracteres especiais so interpretados
equivalente a << c, mas sem a interpretao de caracteres especiais
equivalente a << \c
equivalente a << 'c' , mas com a interpretao dos operadores $, '...' e \
Interpretao
Qualquer sequncia de caracteres incluindo a sequncia nula
qualquer caracter
Qualquer caracter definido no domnio especificado
opo alternativa entre as sequncias <a> e <b>. S usado
nos blocos de controle case
Exemplo
ls *
ls [a-j]*
Interpretao
os caracteres so interpretados
os caracteres so tomados literalmente
os caracteres so tomados literalmente, depois que os
operadores $, ... e \ forem interpretados
os caracteres so tomados como um comando
Exemplo
echo caminhos = $PATH
echo 'caminhos = $PATH'
echo caminhos = $PATH
echo `pwd`
${var:+op}
Interpretao
Exemplo
se o valor de <var> no setado, ele assume a sequncia
nula
se o valor de <var> no setado, o valor default
echo ${x:-`pwd`}
assumido a sequncia <op>
se o valor de <var> no setado, o valor default assuecho ${x:=`pwd`}
mido a sequncia <op> e <var> setado como <op>
se o valor de <var> no setado, <msg> impressa; echo ${x:?variavel x vazia}
<msg> pode ser uma sequncia vazia; neste caso a
mensagem var: parameter null or not set impressa se
<var> for nulo
se o valor de <var> setado, executar a sequncia <op>;
echo ${p:+$PATH}
caso contrrio, no fazer nada
Atividade 1
Combinao de Comandos: O sh prov vrios operadores, tais como || (or), && (and), | (pipe) e
; , para combinar os comandos. Por exemplo, a combinao comando_1&&comando_2 executar
o comando_2 apenas se o cdigo de sada do comando_1 for zero (sucesso). J a forma comando_1
|| comando_2 executar o comando_2 apenas se o cdigo de sada do comando_1 for no nulo
(fracasso). O cdigo de sada final (global) destas combinaes o cdigo de sada do ltimo comando
executado na lista de comandos. A combinao comando_1|comando_2 criar uma conexo direta
entre a sada de comando_1 e a entrada de comando_2, fazendo com que os dados de sada do
primeiro sejam utilizados como dados de entrada do segundo. Por fim, a combinao comando_1;
comando_2 executar os comandos em sequncia, pois o shell esperar o trmino de um antes de
comear o outro.
Vamos exemplificar mais com o comando test , que um programa disponvel no UNIX para
verificar a validade de uma expresso. Ele retorna 0 (sucesso), se a expresso verdadeira; caso
contrrio, ele retorna um valor diferente de 0 (fracasso).
Exemplo 6 A expresso
teste<nome_do_arquivo>&&echoarquivo<nome_do_arquivo>existe
equivalente ao bloco
ifteste<nome_do_arquivo>thenechoarquivo<nome_do_arquivo>existe
fi
enquanto a expresso
teste<nome_do_arquivo>||echoarquivo<nome_do_arquivo>noexiste
equivalente ao bloco
iftest!e<nome_do_arquivo>
#Obs:osmbolo!negaacondio
thenechoarquivo<nome_do_arquivo>naoexiste
fi
Agrupamento: Existem duas formas para agrupar um bloco composto de mais de um comando:
por chaves, como em {comando_1;comando_2;} ou
por parnteses, como em (comando_1;comando_2).
No primeiro caso, os comandos so simplesmente executados no shell corrente; no segundo, um novo
processo-filho sh criado para executar os comandos. Aps execut-los o processo-filho terminado.
Exemplo 7 A expresso
$(cd/usr;lsl)
Execuo em background: basta colocar o smbolo & aps o comando para que ele seja executado em
segundo plano (background).
Expresses aritmticas : sh no suporta expresses aritmticas diretamente, mas pode-se usar o
programa expr para avaliar os valores de expresses que podem ser construdas com os seguintes
operadores binrios: \* (multiplicao), / (diviso), % (resto), + (adio), - (subtrao), = (igual), \>
(maior), \>= (maior ou igual), \< (menor), \<= (menor ou igual), != (diferente), \& (E lgico) e \| (OU
lgico).
Exemplo 8 Os operadores e operandos devem ser separados pelo espao em branco, como mostram os
seguintes casos:
$y=`expr40/2`
$x=`expr$y\*5`
$z=`expr\($x+$y\)6`
Atividade 1
5.4.
Linhas de Comentrios
As linhas de comentrios no so processadas pelo sh e so demarcadas pelos caracteres # e linefeed.
5.5.
para tratar um conjunto de sinais <sinais> captado pelo sh. Os comandos na lista <comandos> devem
ser separados por ; .
A seguinte tabela apresenta alguns sinais mais comuns:
Tabela 7
Sinal
SIGHUP
SIGINT
SIGQUIT
SIGILL
SIGFPE
SIGKILL
SIGBUS
SIGSEGV
SIGSYS
SIGALRM
SIGTERM
SIGCONT
SIGCHLD
6.
Representao
1
2
3
4
8
9
10
11
12
14
15
19
20
Significado
hangup
interrupo
quit
instruo de mquina ilegal
erro no processamento de pontos flutuantes
matar um processo (no pode ser capturado ou ignorado)
erro no barramento
violao na segmentao (referncia a end. de memria invlido)
argumentos incorretos para a chamada ao sistema
alarme
sinal (em software) para terminar um processo
continua um processo que est parado (suspenso)
sinal de parada enviado do processo-pai para o processo-filho
O Bourne shell (sh) usa o arquivo .profile (ou .bashrc no caso de bash) existente no diretrio
de cada usurio (use echo$HOMEpara ver o seu) como arquivo de iniciao no processo de login. Se
tambm existir o arquivo do sistema /etc/profile, este ser usado primeiro. necessrio utilizar o
comando export para que as variveis definidas no login sh sejam reconhecidas por outros shells.
Quando o usurio entra com um comando, o shell verifica se ele est definido internamente
(built-in command). Se no estiver, o shell faz uma busca ao comando (arquivo executvel cujo nome
o comando) em cada diretrio que est definido na varivel de ambiente $PATH. Sendo assim, para que
o arquivo correspondente a cada shell script que voc vai criar (utilizando um editor de texto) seja
executvel, adicione ao modo do arquivo recm-criado a opo executvel pelo proprietrio atravs
do comando mostrado no prximo exemplo.
Exemplo 9 Comando de alterao de permisses usado para permitir a execuo de um script:
$chmodu+xmeuscript
(chmod=comandochangemode;u=usurio;+=adicionarpermisso;
x=permissodeexecuo)
$meuscript
(agora,bastadigitarmeuscriptparateraexecuodoscript)
Uma forma alternativa de execuo passar o seu shell script (arquivo pode ser noexecutvel) como argumento para o shell, que ir interpret-lo.
$shmeuscript(executameuscriptmesmosemusarochmodu+xantes)
Nesta atividade vamos criar um diretrio bin em nosso diretrio $HOME e adicionar ao
$HOME/bin alguns comandos teis. Portanto, para que estes comandos sejam reconhecveis sob
qualquer diretrio, preciso verificar se o caminho $HOME/bin faz parte da lista na varivel $PATH.
Caso no faa, pode-se introduzir o caminho atravs da atribuio mostrada a seguir.
Atividade 1
Tarefa 8: execute os comandos do Exemplo 10 abaixo e explique o que se pede em cada um.
Exemplo 10
$echo$PATH(qualfoioresultado?)
$PATH=$HOME/bin:$PATH(oquefazestalinha?)
$exportPATH(oquefazestalinha?Quandoelanecessria?)
$echo$PATH(mudoualgonoresultado?Oque?Porque?)
Para verificar onde um script produz um erro (se aplicvel) use o comando:
$shxmeuscript
A opo -x avisa ao shell que exiba os comandos que esto sendo executados, permitindo
assim descobrir que comando responsvel pelo erro.
7.
Outros exemplos
Alguns exemplos abaixo esto disponveis na pgina web da disciplina, mas podem tambm ser
copiados deste roteiro.
Exemplo 11
Para ler a entrada padro no shell script utilize o comando read.
echo"Entrecomoseunome:"
readname
echo"Prazeremconheclo(a),$name"
Se h mais de uma palavra na entrada, cada palavra pode ser atribuda a diferentes variveis.
Todas as palavras excedentes so atribudas ltima varivel.
Exemplo 12
O comando eval toma o argumento na linha de comando e o executa.
echo"Entrecomumcomando:"
readcomando
eval$comando
Exemplo 13
Os arquivos shell scripts podem agir como se fossem comandos padres do UNIX, tomando
argumentos a partir da linha de comando, os quais so atribudos aos parmetros posicionais $1 at $9.
O parmetro posicional $0 se refere ao nome do comando ou nome do arquivo executvel que contm o
shell script. O caracter especial $* referencia todos os parmetros posicionais.
$catprog1
#Estescriptecoaosprimeiros5argumentos
#fornecidosaoscript
echoOsprimeiros5argumentosnalinha
echodecomandosao:$1$2$3$4$5
$prog1EstoufazendoadisciplinaEA872
Osprimeiros5argumentosnalinha
decomandosao:EstoufazendoadisciplinaEA872
Exemplo 14
Para executar uma ao condicional, utilize o comando if.
$catprog2
ifwho|grepsMaria>/dev/null
then
echo"Mariaestalogada"
else
Atividade 1
echo"Marianaoestadisponivel"
fi
Neste exemplo, a opo s faz com que o comando grep opere silenciosamente, sendo que
qualquer mensagem de erro direcionada para o arquivo /dev/null em lugar da sada padro.
Exemplo 15
O comando case permite operar o fluxo de controle para mltiplas condies definidas a
partir de uma nica varivel. O contedo da varivel comparado com padres at que um casamento
ocorra, quando os comandos associados so executados. Em seguida, o controle passado ao primeiro
comando aps esac. Cada linha de comando deve terminar com um ponto-e-vrgula duplo. Um
comando pode estar associado a mais de um padro, desde que os padres estejam separados por |. O
caracter * pode ser utilizado para especificar um padro default.
$catdiario
hoje=`date+%m/%d`#apresentaadatanoformatomes/dia
case$hojein
03/02) echo
"auladeEA872";;
03/09) echo
"atividadespraticasdeEA872";;
*)
echo
"estudarEA872";;
esac
$date+%m/%d
03/02
$diario
auladeEA872
Exemplo 16
O script prog2 visto antes pode ser estendido para operar mltiplos usurios, agora
introduzidos como argumentos. Para tanto, utiliza-se o comando for.
$catprog3
foriin$*
do
ifwho|greps$i>/dev/null
then
echo"$iestalogado(a)"
else
echo"$inaoestadisponivel"
fi
done
Exemplo 17
O comando while executa um comando enquanto a condio for verdadeira.
$catprog4
whilewho|greps$1>/dev/null
do
sleep60
done
echo"$1naoestamaislogado(a)"
Exemplo 18
Para incluir texto em um shell script, possvel utilizar um tipo especial de redirecionamento.
$catprog6
10
Atividade 1
cat<<EOF
Nomomento,esteshellscriptestaemfasededesenvolvimento.
Favorrelatarqualquerproblemaaoseuautor(nome@dominio)
EOF
exec/usr/local/teste/versao_de_teste
8.
Atividades Prticas
quais so os valores assumidos pelas seguintes variveis: $0, $2, $4, $8, $$, $#, $* e $@ ? Explique o
porqu de cada um destes valores.
5) Documente cada linha dos scripts abaixo por meio de comentrios colocados frente de cada uma
delas. Cada comentrio deve ser iniciado com o sinal # e deve explicar clararmente o que est sendo
feito na respectiva linha.
(a) (0,5) menu (veja na Tabela 3 o uso do comando de redireo <<)
#!/bin/sh
echomenu
stop=0
whiletest$stopeq0
do
echo
cat<<FIMDOMENU
1:imprimeadata
2,3:imprimeodiretoriocorrente
4:fim
FIMDOMENU
echo
echo'opcao?'
readop
echo
case$opin
1)date;;
2|3)pwd;;
4)stop=1;;
*)echo'opcaoinvalida!';;
esac
done
11
Atividade 1
Oct)m=Out;;
Dec)m=Dez;;
esac;;
1)m=$1;set`date`;y=$6;;
*)m=$1;y=$2;;
esac
case$min
jan*|Jan*)m=1;;
fev*|Fev*)m=2;;
mar*|Mar*)m=3;;
abr*|Abr*)m=4;;
mai*|Mai*)m=5;;
jun*|Jun*)m=6;;
jul*|Jul*)m=7;;
ago*|Ago*)m=8;;
set*|Set*)m=9;;
out*|Out*)m=10;;
nov*|Nov*)m=11;;
dez*|Dez*)m=12;;
[19]|10|11|12);;
*)y=$m;m="";;
esac
/usr/bin/cal$m$y
6) (1,0) traps Explique o funcionamento do script traps. Para entender o funcionamento deste script,
execute o mesmo em background (usando o operador &), liste o diretrio para encontrar um
arquivo criado pelo script, o qual informa seu PID, execute um kill conforme o especificado
abaixo e explique o que acontece.
$traps&
$ls
12
Atividade 1
$kill<PID>
$ls
Repita o procedimento com kill 2 <PID> e kill 15 <PID> e explique o que ocorreu.
(contedo do script traps)
#!/bin/sh
ARQUIVO=arq.$$
touch$ARQUIVO
trap"echo'AlgumprocessoenviouumTERM'1>&2;rmf$ARQUIVO;exit;"15
trap"echo'AlgumprocessoenviouumINT'1>&2;rmf$ARQUIVO;exit;"2
whiletrue
do
#Espera5segundos
sleep5
done
7) (1,0) subspar Consultando (i) a tabela 6, (ii) a seo sobre combinao de comandos (logo abaixo
da tabela 6) e (iii) o manual para o comando test, explique as sadas produzidas pelo programa
subspar quando as seguintes linhas de comando so executadas.
$subspar
$subsparsprjmgesdfprmtms
testn"$1"&¶m1=$1
testn"$2"&¶m2=$2
testn"$3"&¶m3=$3
testn"$4"&¶m4=$4
echo"1resultadodoteste:${param1rs}comparam1=$param1
echo"2resultadodoteste:${param2=pa}comparam2=$param2
echo"3resultadodoteste:${param3+to}comparam3=$param3
echo "4 resultado do teste:${param4?Quarto parmetro no iniciado}
comparam4=$param4
8) (1,0) Explique como funciona o script abaixo, mostrando qual sua utilidade prtica e detalhando
cada uma das operaes.
#!/bin/sh
testd$HOME/lixo||mkdir$HOME/lixo
test0eq"$#"&&exit1;
case$1in
l)ls$HOME/lixo;;
r)case$#in
1)aux=$PWD;cd$HOME/lixo;rmrf*;cd$aux;;
*)echopro_lixo:Usoincorreto;;
esac;;
*)foriin$*
do
iftestf$i
thenmv$i$HOME/lixo
elseechopro_lixo:Arquivo$inaoencontrado.
fi
done;;
esac
9) (1,0) Explique como funciona o script abaixo, mostrando qual sua utilidade prtica e detalhando
cada um dos comandos.
#!/bin/sh
if[$#eq0]
13
Atividade 1
then
set$PWD
fi
forARGin$*
do
case$ARGin
prof=*)
PROFUNDIDADE=`echo$ARG|cutf2d'='`
;;
*)
if[d$ARG]
then
CONT=${PROFUNDIDADE=0}
while[$CONTgt0]
do
echon""
CONT=`expr$CONT1`
done
echo"+$ARG"
cd$ARG
forNAMEin*
do
treeprof=`expr$PROFUNDIDADE+1`$NAME
done
else
if[f$ARG]
then
CONT=${PROFUNDIDADE=0}
while[$CONTgt0]
do
echon""
CONT=`expr$CONT1`
done
echo"$ARG"
fi
fi
;;
esac
done
10)(2,0) Implemente em Bourne Shell ou Bash um script que executa um comando passado como
argumento. Este script deve suportar as seguintes opes: - -repeticoes=N, que indica que o
comando passado como argumento deve ser executado N vezes, e - -atraso=M, que indica que um
atraso de M segundos deve ser efetuado antes da primeira execuo e entre as demais execues.
Seu script deve tentar casar as opes acima no incio dos argumentos. Assim que algo no for
casado como as duas opes acima, deve-se interpretar todo o restante dos argumentos como o
comando a ser executado. Sugesto: utilize case e shift. Caso alguma das duas opes no seja
passada, estabelecer os valores default 1 para repeties e 0 para atraso usando recursos
similares aos usados no script subspar mais acima.
Atividade extra opcional: ganhar um ponto extra quem fizer e documentar a atividade opcional
abaixo.
11) (1,0) Implemente em Bourne Shell ou Bash um script recursivo (o script chama a si mesmo) que
deve ler um valor do terminal e calcular o fatorial deste valor. O script deve indicar um erro se o
valor lido for negativo. Explique o funcionamento de seu script e d alguns exemplos de
execuo que explorem todas as possibilidades, incluindo situaes de erro de entrada e de
clculo acima das possibilidades do computador. O script deve usar recursos da linguagem de
shell e no recorrer a comandos ou programas em outras linguagens.
14