Anda di halaman 1dari 7

EA872 L

Laboratrio de Programao de Software Bsico

Atividade 1

Nome: Marina Donati Valverde


RA: 150752
Data: 19/08/2015

1) Pode-se encontrar os shells acessando /etc/shells.


Os shells disponveis so: sh, dash, bash, rbash e csh.
2) Basta utilizar o comando:
% setenv PATH ${PATH}:/new_path
onde new_path equivale ao novo caminho desejado.
Resultado:
% echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
% setenv PATH ${PATH}:/new_path
% echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/new_path
3) Os resultados foram:
$0 = prog (primeiro parmetro posicional)
$2 = feec (seg undo parmetro posicional)
$4 = campinas (quarto parmetro posicional)
$8 = amrica (oitavo parmetro posicional)
$$ = 24927 (identifica o processo sh corrente - PID)
$# = 10 (nmero de parmetro posicionais diferentes de $0)
$* = le-27 feec unicamp campinas so paulo brasil amrica do sul (todos os parmetros
posicionais)
$@= le-27 feec unicamp campinas so paulo brasil amrica do sul (todos os parmetros
posicionais)
4.a) menu:

4.b) folheto:

4.c) path

4.d) classifica

5) Ao executar o script traps, um arquivo criado, cujo formato arq.$$, ou seja, sua extenso ser
o PID (identificao do processo corrente).
Ao dig itarmos no terminal simplesmente o comando kill <PID>, usamos o comando default, que
apenas remove o arquivo que identificamos e, em seg uida, o prog rama espera 5 seg undos antes de
finalizar.
Por outro lado, se tivermos outro arg umento, como o -2 ou o -15, estaremos enviando um sinal para
que sua respectiva trap no script seja acionada.
No caso do -2, temos o sinal SIGINT, que um sinal de interrupo. No script temos:
trap "echo 'Algum processo enviou um INT' 1>&2; rm -f $ARQUIVO; exit;" 2
Nesse caso, a mensag em 'Algum processo enviou um INT' impressa, o arquivo removido e o
prog rama finalizado.
J no caso do -15, temos o sinal SIGTERM, que um sinal de finalizao. No script temos:
trap "echo 'Algum processo enviou um TERM' 1>&2; rm -f $ARQUIVO; exit;" 15
Nesse caso, a mensag em 'Algum processo enviou um TERM' impressa, o arquivo removido e o
prog rama finalizado.
6) Quando executamos subspar sem arg umentos, temos o seg uinte resultado:
1:abacaxi:
2:laranja:
laranja
3::
subspar: 11: subspar: param4: QuartaVarNaoInicializada
Do arquivo subspar, temos:
test -n "$1" && param1=$1
test -n "$2" && param2=$2
test -n "$3" && param3=$3
test -n "$4" && param4=$4
O comando test n retorna verdadeiro se a string no estiver vazia, log o, como no existem
parmetros, param1, param2, param3 e param4 esto vazias, ento test retorna falso para todos os
casos.
echo "1:${param1-abacaxi}:"; echo $param1
Dessa forma, a verificao ${param1-abacaxi} retorna a sequncia default (abacaxi), pois param1
no foi setado e, por isso tambm (param1 ser vazio) temos uma quebra de linha.
echo "2:${param2=laranja}:"; echo $param2
A seg unda verificao, ${param2=laranja} tambm retorna a sequncia default (laranja), pois
param2 no foi setado. Como param2 estava vazio, a seg unda verificao faz com que ele assuma o
valor default, por isso impresso laranja na linha de baixo.
echo "3:${param3+melancia}:"; echo $param3
A terceira verificao, ${param3+melancia} nada retorna, pois param3 no foi setado, e por esse
motivo tambm temos um quebra de linha ao imprimi-lo.
echo "4:${param4?QuartaVarNaoInicializada}:"; echo $param4
A quarta verificao, ${param4?QuartaVarNaoInicializada} imprime a mensag em default

(QuartaVarNaoInicializada), pois param4 vazia.


Ag ora, executando subspar com os seg uintes parmetros:
$ subspar a b c d e f
Dessa forma, param1 = a, param2 = b, param3 =c e param4 = d. Temos, ento, a seg uinte sada:
1:a:
a
2:b:
b
3:melancia:
c
4:d:
d
Para o primeiro, seg undo e quarto testes, como param1, param2 e param4 foram setados, eles so
impressos, ao invs de suas respectivas sequncias default. Em seg uida seus prprios valores so
impressos na linha de baixo, devido ao comando echo paramX, onde X = 1, 2 e 4.
J no terceiro teste, como param3 foi setado, imprime-se a sequncia default (melancia) e, em
seg uida, param3 impresso.
7) Temos aqui a verso comentada do script:

O script acima cria o diretrio lixo se ele no existir. Tambm obedece aos seg uintes comandos:
-l: mostra o contedo do lixo;
-r: se conter somente esse parmetro, ento esvazia o lixo;
se for enviado um arquivo, ele vai para a lixeira.
Esse script til para se trabalhar com a lixeira.

8) Temos aqui a verso comentada do script:

O script acima tem como objetivo imprimir a rvore de diretrios e arquivos, se no forem dados
parmetros, comea do diretrio corrente. Se a profundidade for dada, essa ser a altura da rvore.
Esse script bem til quando se quer ver os arquivos e diretrios de uma pasta.
9)
#!/bin/bash
N=1
M=0

#repeticoes default = 1
#atraso default = 0

for ARG in $*
do
case $ARG in
--repeticoes=*) N="${ARG##--repeticoes=}";;
--atraso=*) M="${ARG##--atraso=}";;
esac
done

#percorre todos os parametros

sleep $M

#atraso de M segundos

while [ "$1" != "" ]


do
case $1 in
--repeticoes=*);;
--atraso=*);;
*)
for i in `seq 1 $N`;
do
eval $1
sleep $M
echo

#se um deles for repeticao, obtem N


#se um deles for atraso, obtem M
#fim do case
#fim do while

#percorre os argumentos ate achar o primeiro vazio

#se for uma repeticao, so faz um shift


#o mesmo para o atraso
#se for um comando
#executa-o
#espera o atraso
#quebra de linha

done ;;
esac
shift
done

#fim do for
#fim do case
#shift para o proximo argumento
#fim do while

10) O prog rama a seg uir calcula o fatorial de um nmero fornecido na entrada:
#!/bin/bash
#funcao recursiva para calcular o fatorial de um numero
fatorial()
{
if [ $1 -le 1 ]
#se o numero for <= 1
then
echo 1
#retorna 1
else
echo $[ $1 * `fatorial $[$1-1]` ]
#senao retorna n*(n-1)!
fi
}
read n

#le da entrada

while [ $n != "fim" ]
#enquanto o usuario nao digitar "fim", faz o calculo do fatorial
do
if [ $n -lt 0 ]
#se o numero for negativo
then
echo 'numero invalido'
#imprime "numero invalido"
else
echo "$n! = `fatorial $n` "
#caso contrario, calcula o fatorial
fi
read n
#le a nova entrada
done
#fim do programa

Foram feitos os seg uintes casos de teste:


-5 numero invalido (nmeros neg ativos so invlidos)
0 0! = 1 (calcula o fatorial de 0)
1 1! = 1 (calcula o fatorial de 1)
5 5! = 120 (calcula o fatorial de 5)
10 10! = 3628800 (calcula o fatorial de 10)
25 25! = 7034535277573963776 (calcula o fatorial de 25)
26 26! = -1569523520172457984 (o nmero deveria ser 403291461126605635584000000, mas
vai alm da capacidade do computador em exibir esse nmero)
fim (finaliza o prog rama)

Anda mungkin juga menyukai