Trabalho No 6 BASH
Trabalho No 6 BASH
Trabalho No 6 BASH
Sistemas Operativos
Rúben Júnior Gomes da Luz (28915 / ERSC)
Orientação Científica: Professor Doutor Vítor M. Ferreira
Maio 2022
Resumo
A noção de shell scripting como forma de automatizar tarefas diárias e de conhecer
os mais diferentes tipos de shell e como cada uma se comporta é crucial para um
estudante de computação, entender a variável exit-status e a sua importância para
detetarmos erros em nossos programas ou comandos que mandamos executar tudo
isso será estudado ao longo do trabalho de forma mais aprofundada.
Índice
1 Introdução 2
1.1 Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Organização do relatório . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Estado-da-arte/Revisão bibliográfica 2
2.1 Shell scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1.1 Seleção da shell a ser usada . . . . . . . . . . . . . . . . . . . . . . 3
2.1.2 Input e Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.3 Execução de uma shell script . . . . . . . . . . . . . . . . . . . . . 3
2.1.4 Passagem de Parâmetros . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.5 Operações aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Comando test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1 Estruturas de Controlo . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 A Variável “Exit Status” . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3.1 Noção de “True” e “False” . . . . . . . . . . . . . . . . . . . . . . . 5
4 Conclusões 17
1
A Todos os comandos usados 21
1 Introdução
Conhecer a programação em shell script é importantissimo para qualquer estudante de
qualquer area, e é crucial para aqueles que estão em areas relacionadas a Computaçào,
pois ela vai nos permitir automatizar varias tarefas diarias e administrar propriedades
internas do nosso sistema, coisa que uma interface grafica não oferece.
1.1 Objectivos
Ao longo da leitura execução deste trabalho se pretende adquirir as seguintes competencias:
2 Estado-da-arte/Revisão bibliográfica
2.1 Shell scripts
Aos ficheiros que contém instruções para a shell, atribui-se geralmente o nome de shell
scripts, sendo este um ficheiro que contém um conjunto de comandos sequenciais para uma
determinada “shell”. Os scripts se tornam uma ferramenta muito poderosa, na medida que
2
permitem automatizar a maioria das tarefas de administração do sistema ou de utilização
quotidiana.
#!/bin/bash
echo "Introduza o seu primeiro nome"
read NOME
echo "Olá $NOME tudo bem consigo?"
3
2.1.4 Passagem de Parâmetros
Assim como outros programas as “shell scripts"podem receber parâmetros e opções. Ou
seja, através da linha de comandos podemos passar parâmetros para a “shell script"após
o seu nome. Para fazer referencia aos parâmetros utiliza-se o operador $, seguido numero
que indica a sua posição na linha de comandos:
Existe ainda outra maneira diferente de realizar estas operações aritméticas, esta con-
siste em utilizar os comandos “$[“e"]"para limitar as expressões. Neste caso diferentemente
do anterior as variáveis são precedidas pelo caráter $:
\centering
test valor1 -option valor2
teste string1 operador string2
4
\centering
test $VAL -eq 16 também pode ser escrito como: [ $VAL -eq 16 ]
O detalhe importante a ressaltar, é que deve-se colocar espaços antes e depois dos
parênteses retos.
5
Figura 1: Criando o diret’rio de trabalho PL/trab6
2. Verifique no seu sistema quais são as shells, que estão instaladas e guarde
essa informação num novo ficheiro chamado “system_shells". Como já é de
nosso conhecimento o ficheiro /etc/shells, guarde a informação de todas as shells
presentes no nosso sistema operativo, e fazendo uso do comando cat, como mostra
a figura 2, podemos visualiza-las, porém queremos guardar essa informação num
ficheiro, portanto usamos o operador “>” para redirecionar essa informação para o
ficheiro “system_shells" como mostra a figura 3.
3. Crie uma shell script, chamado myfirst, que peça ao utilizador o seu nome
e consiga imprimir no ecrã a seguinte mensagem: O seu nome é «NOME».
Para criar essa shell script utilizou-se o editor VIM, como mostra a figura 4, foi
utilizado o comando vi myfirst.sh, e fazendo um ls -l, podemos ver que foi criado
um ficheiro. Como se pode ver no código 1, para resolver este exercício apenas se
usou os comandos de “input” e “output” (echo e read). Porem antes de executar
este código como pode-se visualizar na figura 5, o dono não possui permissões de
executar o ficheiro portanto foi usado o seguinte comando para alterar e conceder
permissões totais ao dono e de execução ao grupo, sendo que os outros suas permissões
6
Figura 4: Criação da primeira shell script
permaneceram intactas:
4. Crie uma outra shel script, chamada exer64, que imprime na tela os pri-
meiros 4 argumentos passados na linha de comando. O script deve ser
invocado da seguinte forma:
Neste caso criamos um novo script denominado de exer64, que era uma copia do
ficheiro criado no exercício anterior para que pudéssemos manter as mesmas confi-
gurações de permissão, e a partir daqui todos os exercícios seguiram dessa forma.
Como mostra a figura 7, abrimos o ficheiro no VIM, e o código pode ser consultado
em 2 e a execução do mesmo nas figuras 8 e 9.
7
Listing 1: Primeira shell script
11 sleep 2
12
13 exit 0
Figura 9: Erro apresentado quando não são passados parâmetros ao script exer64
8
Listing 2: Script do exer64.sh
6 if test $# -gt 4
7 then
8 echo "Estes são os 4 primeiros parametros passados na linha de comando: $1, $2, $3, $4"
9 else
10 echo "Deve passar pelo menos 4 argumentos na linha de comandos"
11 fi
12 sleep 2
13
14 exit 0
Durante a criação da lógica deste script usamos os parâmetros $# e $*, que repre-
sentam numero de parâmetros recebidos e a lista de de todos os parâmetros que um
script recebe, respetivamente. Como se pode ver no código ??, primeiro testamos se
o numero de parâmetros recebidos no momento de invocação da shell script é maior
que 1 então se sim usamos $# para retornar o numero de parâmetros inseridos e $*
para retorna a lista destes parâmetros, caso o numero de parâmetros for menor que 1
então imprime na tela uma mensagem de erro, os teste executados deste script estão
na figura 10.
9
Listing 3: Shell script exer65.sh
6 NumMinArg=1
7
15 sleep 2
16
17 exit 0
7. Escreva uma shell script (exer66) que peça ao utilizador duas strings, que
as compare e indique se são ou não iguais.
O código deste exercício esta em 6 e o resultado exibido na figura 12.
8. Escreva uma shell script (exer67) que peça uma frase, imprime-a e per-
gunta se quer continuar enquanto a resposta for ”sim”, ”SIM”, ”s” ou ”S”.
O código deste exercício esta em ??.
9. Escreva uma shell script (exer68) que mostre ao utilizador 3 opões de menu:
10
Listing 4: Script exercício 6
6 NumMinArg=1
7
19 sleep 2
20
21 exit 0
11
Listing 5: Shell script exer66.sh
18 sleep 2
19
20 exit 0
12
Listing 7: Shell script exer67.sh
9 RESP="SIM"
10
11 while test $RESP = "SIM" -o $RESP = "sim" -o $RESP = "S" -o $RESP = "s"
12 do
13 echo "Escreva uma frase"
14 read FRASE
15 echo "Quer continuar?"
16 read RESP
17 done
18
21 sleep 2
22
23 exit 0
13
Figura 13: Testes do shell script exer68
14
Figura 15: Testes do shell script exer68
12 case $OP in
13 "1") ls -l
14 ;;
15 "2") ls -la
16 ;;
17 "3") ls *.c
18 ;;
19 *) echo "Escolha invalida"
20 ;;
21
22
23 esac
24
25 sleep 2
26
27 exit 0
15
Listing 9: Shell script exer611.sh
18 if [ $NUM1 -lt 0 ]
19 then
20 echo "O numero $NUM1 é negativo"
21 fi
22
23 if [ $NUM2 -lt 0 ]
24 then
25 echo "O numero $NUM2 é negativo"
26 fi
27
28 sleep 2
29
30 exit 0
16
Figura 16: Testes do shell script exer69
portanto neste exercício vamos pedir dois valores do utilizador A e B e usar o let
para calcular e guardar esse valor numa variável, o código pode ser consultado em
10 e o resultado na figura ??.
12. Escreva uma shell script (exer611) que imprima os números pares entre
20 e 50.
O código deste exercício esta em 11 e o resultado exibido na figura 18.
13. Escreva uma shell script (exer612) que imprima os números ´ımpares, a
decrescer, de 99 para 51.
O código deste exercício esta em 12 e o resultado exibido na figura 19.
14. Escreva uma shell script (exer13) que liste o conteúdo de uma diretoria
passada como parâmetro, indicando para cada elemento, explicitamente,
se ´e ficheiro, diretoria ou link.
4 Conclusões
Ao longo do trabalho constatei que a shell é um dos componentes centrais de qualquer
sistema operativo, hoje somos abençoados com interfaces gráficas simples e rápidas de se
mexer e aprender o seu funcionamento, porem a utilização da shell e da linha de comandos
nos permite estabelecer uma conexão mais fiel e rápida com a maquina, apesar da linha de
17
Listing 10: Shell script exer610.sh
10 echo "B="
11 read B
12
13 let "RESULT=A+B-B*24+A*10"
14 echo "O resultado é $RESULT"
15
16 sleep 2
17
18 exit 0
18
Listing 11: Shell script exer611.sh
6 MIN=20
7 MAX=50
8
16 sleep 2
17
18 exit 0
19
Listing 12: Shell script exer612.sh
6 MIN=51
7 MAX=99
8
16 sleep 2
17
18 exit 0
20
comandos ser utilizada apenas por programadores ou entusiastas na sua grande maioria eu
proponho que qualquer um deva utilizar a linha de comando, para que possa aprender e
compreender como coisas de mais baixo nível funcionam, dando a ela um entendimento mais
aprofundado e amplo daquilo que faz e pode fazer. A utilização da shell não se limita apenas
a interatividade com o utilizador podendo também ser utilizada para criar shell scripts,
pequenos programas que nos oferecem a oportunidade de programar e automatizar tarefas
simples e gerenciar propriedades do sistema usando uma linguagem simples e intuitiva.
A manipulação da variáveis de ambiente e da prompt permitem-nos moldar a nosso belo
prazer claro limitados a aquilo que já esteja pré-definido o nosso ambiente de trabalho,
desde o que apresentar e como apresentar na prompt ou na nossa linha d comando. a
shell também nos oferece a possibilidade de criar e redefinir comandos, podendo criar a
sua própria lista de comandos, ou traduzi-las para uma forma que seria mais simples de
se entender para um leigo ou uma criança. Finalizando a shell é um mundo de várias
possibilidades que na minha opinião deveriam ser exploradas por todos.
Referências
[1] F. Pereira, Linux Curso Completo, 3rd ed. FCA- Editora de Informatica.
[2] V. Ferreira, “Revisão teórica do trabalho no. 6.” [Online]. Available: https:
//elearning.ipvc.pt/ipvc2021/mod/resource/view.php?id=31128
[3] ——, “Trabalho prático no. 6 sistemas operativos 2011/2012.” [Online]. Available:
https://elearning.ipvc.pt/ipvc2021/mod/resource/view.php?id=31212
21
382 chmod 754 myfist.sh
383 chmod 754 myfirst.sh
384 ls -l
385 PATH=PATH:`pwd`
386 ./myfirst.sh
387 clear
388 vi myfirst.sh
389 logout
390 cd PL/trab6
391 vi myfirst.sh
392 ./myfirst.sh
393 echo $?
394 cp myfirst.sh exer64.sh
395 vi exer64.sh
396 ./exer64.sh
397 ./exer64.sh a raposa ate o rio
398 logout
399 cd PL/trab6
400 vi exer64.sh
401 cd PL/trab6
402 vi exer64.sh
403 ./exer64.sh
404 cp exer64 exer65
405 cp exer64.sh exer65.sh
406 vi exer65.sh
407 ./exer65
408 ./exer65.sh
409 ./exer65.sh ruben junior aluno de redes
410 cp exer64.sh exer66.sh
411 vi exer66
412 cp exer65.sh exer66.sh
413 vi exer66.sh
414 cp exer66.sh exer651.sh
415 ./exer651.sh vou contar os argumentos passados a este script
416 vi exer66.sh
417 ./exer66.sh
418 vi exer66.sh
419 ./exer66.sh
420 cp exer66.sh exer67.sh
421 vi exer67.sh1
422 vi exer67.sh
423 ./exer67.sh
424 vi exer67.sh
22
425 cp exer67.sh exer68.sh
426 vi exer68.sh
427 ./exer68.sh
428 vi exer68.sh
429 cp exer66.sh exer69.sh
430 vi exer69.sh
431 ./exer69.sh
432 vi exer69.sh
433 ./exer69.sh
434 cp exer69.sh exer610.sh
435 vi exerc610.sh
436 vi exer610.sh
437 ./exer610.sh
438 cp exer69.sh exer611.sh
439 vi exer611.sh
440 ./exer611.sh
441 vi exer611.sh
442 ./exer611.sh
443 cp exer69.sh exer612.sh
444 vi exer612.sh
445 cp exer611.sh exer612.sh
446 vi exer612.sh
447 ./exer612.sh
448 vi exer612.sh
449 logout
450 history
451 cd PL/trab6
452 history > historytrab6
23