Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prova 1 Introdução a Ciência da Computação Gabriel Fernandez Ferrari Melo SUMÁRIO 1 Questão 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Questão 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Questão 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1 item a) Resenha sobre linguagens de marcação . . . . . . . . . . . . . . . 7 3.2 item b) Resenha sobre linguagens de médio nível . . . . . . . . . . . . . . 9 3.3 item c) Resenha sobre linguagem de pesquisa declarativa . . . . . . . . . . 11 4 Questão 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.1 O que são compiladores . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.2 O que são linguagens compiladas e linguagens interpretativas e suas diferenças? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.3 O que é a Máquina de Turing ? . . . . . . . . . . . . . . . . . . . 13 5 Questão 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.1 Solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.1.1 Uma introdução a história do Shell . . . . . . . . . . . . . . . . . 15 5.1.2 Um pouco da Sintaxe . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.1.3 Aplicabilidades e usos . . . . . . . . . . . . . . . . . . . . . . . . 18 5.1.4 Implementação de um Script de automação . . . . . . . . . . . . . 19 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1 QUESTÃO 1 Faça um resumo, de no máximo 2 páginas, sobre o que é um Sistema Operacional, escrevendo sobre os principais exemplos da atualidade. Referência utilizada na solução (2003, TANEMBAUM). 1.1 SOLUÇÃO Antes de falarmos sobre o que é um Sistema Operacional (SO) precisamos nos remeter a alguns conceitos importantes alicerces para o entendimento desse tema. Dentre esses, é substancial apresentarmos uma breve introdução aos computadores. Um computador moderno consiste em um conjunto de componentes eletrônicos sendo alguns destes: processadores, alguma memória principal, discos, teclado, mouse, monitor e outros dispositivos de entrada e saída. Em suma, este se trata de um sistema complexo com diversos componentes físicos que aqui chamamos de Hardware. No entanto, toda essa complexidade possui uma finalidade bem definida: a resolução de problemas através de instruções, bem definidas e não ambíguas, essas instruções são denominadas por: algorítimos. Partindo disso, temos então que o computador forma um sistema complexo, em que há diversos componentes que interagem entre sí para o correto funcionamento do hardware. Todavia, isso gera um problema em relação a finalidade do computador: resolver algorítimos que seria a necessidade de entender e manipular continuamente todos os componentes e assim nenhum código jamais seria escrito conforme coloca (2003, TANEMBAUM). Por isso, os computadores são equipados com um determinador software o qual é chamado de Sistema Operacional. Esse software difere dos demais por alguns aspectos, primeiramente é a primeira aplicação que realiza uma conexão entre o tipo de informação tratada pelo homem e pela máquina, por isso esse software se enquadra na categoria de um software de sistema. Além disso, há dois pontos fundamentais presentes em um SO, pontos esses relacionados as funções desempenhadas por ele sendo estas: O SO como máquina virtual e como gerenciador de recursos. Acerca da primeira função, destacamos que ela fornece ao usuário um ambiente mais fácil de programar. De fato, a perspectiva de uma máquina virtual ou mesmo de uma máquina estendida que possibilite facilita o acesso aos recursos computacionais e ao ambiente de programação, visto que não é necessária a direta programação em linguagem de máquina, sendo assim possível o uso de linguagens de programação de mais alto nível. Por outro lado, temos a perspectiva do sistema operacional quanto gerenciador de recursos. Nessa ótica, o SO desempenha um papel que busca solucionar a complexidade do sistema, como já mencionado o grande número de componentes no computador tornaria sua utilização trabalhosa ao passo de que o usuário teria necessidade de gerir todos os componentes de forma simultânea. Dessa forma, o SO desempenha a função, não só de gerir, mas otimizar os recursos dos subsistemas presentes no computador. De posse disso, podemos definir um sistema operacional como um software que fornece aos programas do usuário um modelo de computador otimizado, de forma mais simples e limpa além de lidar com o gerenciamento dos recursos computacionais tanto hardware, quanto software. Nesse contexto, torna-se ainda importante falar acerca de alguns importantes sistemas operacionais: mac OSx, Windowss e Linux. O primeiro desses sistemas é distribuído pela Apple desde 2001 empresa fundada por Steve Wozniak e Steve Jobs, em 1974. É o segundo sistema mais utilizado em laptops e é escrito, principalmente, nas linguagens C++, Objective C, Swift e C, e possui as seguintes versões: Mac OS X v10.0, MAC OS X v10.1, MAC OS X v10.2, MAC OS X v10.3, MAC OX X v10.4, MAC OS X v10.5, MAC OS X v10.6, MAC OS v10.7, MAC OS X v10.8. O segundo sistema foi desenvolvido pela empresa Microsoft fundada por Bill Gates e Paul Allen. Esse sistema operacional logo se tornou o mais popular entre os usuários, suas últimas versões são o Windows vista, 7, 8, 8.1 e 10. O sistema é escrito, principalmente em C e Assembly. Um dos pontos importantes a citar acerca desse sistema é o esquema das licenças o qua permite que os usuários instalem qualquer programa, sendo inicialmente aberto, no entanto, o código-fonte do mesmo não é disponibilizado e há um custo para a licença efetiva do mesmo. Por fim, o Linux. Mais precisamente o Linux não é o sistema operacional, mas, sim o Kernel do sistema, dessa forma é mais preciso se referir aos sistemas como distribuições Linux, no entanto, por convenção emprega-se o termo Linux para referir-se a essas distribuições. Criado por Linus Torvalds, o Linux segue a filosofia do código aberto já antes difundida por personalidades importantes em concordância com o manifesto do software livre em especial pelo projeto GNU (GNU is not Unix) escrito por Richard Stallman em 1985. Ademais, dado ao fato do Kernel ser livre, o Linux possui uma infinidade de distribuições, até algumas nacionais, mas já obsoletas como a: Kurumin. No entanto, algumas ganham destaques sendo estas: Debian (com foco em estabilidade), Ubuntu (com foco no usuário final), Fedora, mint, KDE, Kali Linux, Parrot OS. 2 QUESTÃO 2 Faça um resumo, de no máximo 2 páginas sobre linguagem de baixo nível como, por exemplo, a linguagem Assembly. 2.1 SOLUÇÃO Uma linguagem de programação pode ser caracterizada seguinte alguns aspectos importantes, sendo estes em relação a sua geração, paradigma ou nível. Aqui iremos nos ater a classificação mediante ao nível da linguagem o qual pode ser de três tipos diferentes: • Baixo nível; • Médio nível; • Alto nível. Quando nos referirmos ao nível da linguagem estamos buscando sua proximidade ou com a linguagem humana, ou a linguagem de máquina. Isto é, quão próximo é a sintaxe utilizada na escrita do programa em relação ao computador ou não. Nesse sentido, as linguagens de Médio e Alto nível são linguagens que possuem uma certa proximidade com a linguagem humana, no entanto, as de médio nível ainda possuem certas sintaxes de difícil compreensão, enquanto as linguagens de alto tendem a se aproximar de forma mais considerável, permitindo assim aos usuários uma maior portabilidade e o uso em várias plataformas. Já as linguagens de baixo nível, são exatamente o oposto extremo da linguagem de Alto nível, distantes donosso entendimento sintático, mas, por outro lado, próximos à linguagem de máquina que é a linguagem de mais baixo nível. Em especial, essas linguagens é a única entendida pelo processador e é constituída inteiramente de números, de modo que se torna extremamente trabalhosa não só para o entendimento, mas também para o desenvolvimento de softwares. Não obstante, é importante falar, ainda acerca das vantagens que as linguagens de baixo nível possuem, visto que, mesmo que se distanciem da sintaxe humana ainda são úteis e vantajosas em determinados cenários. Em primeiro ponto, destaca-se que as mesmas são executadas com maior velocidade de processamento, além de ocupar menos espaços na memória do computador. Dentre essas linguagens, se tem o destaque ao Assembly. A qual possui uma notação um tanto quanto mais legível em relação à linguagem de máquina, mas ainda, de baixo nível. A mesma utiliza abreviações de palavras denominadas mnemônicas que indicam as operações que serão realizadas pelo processador. Ademais, deve-se destacar que mesmo de baixo nível, a linguagem necessita de um compilador para ser entendida pela máquina. E um ponto importante, são as aplicações dessa linguagem as quais versam sobre: • Desenvolvimento de compiladores, • Desenvolvimento de sistemas operacionais em tempo real, • Desenvolvimento de drivers para dispositivos eletrônicos. 3 QUESTÃO 3 3.1 ITEM A) RESENHA SOBRE LINGUAGENS DE MAR- CAÇÃO As Linguagens de Marcação são um tipo específico de linguagem computacional, em que o foco deixa de ser as estruturas de repetição, controle, operadores lógicos e afins e passam a ser as chamadas marcações. Essas utilizam as chamadas marcações ou também <tags> que são os elementos que estruturam o determinado arquivo de interesse, esse não é um programa. Um dos pontos importantes acerca das linguagens de marcação é a universalidade. Esse caráter possibilita a maior integração dos documentos escritos em diferentes plata- formas, de modo que, não seja necessário que esses sejam interpretados e formatado de maneira independente. Nesse sentido, essas linguagens ganharam grande notoriedade no ambiente Web, por conseguinte, houve um grande impulso para o desenvolvimento de ainda mais linguagens de marcação, dentre essas se destaca o HTML e o CSS. Não só isso, mas fora o ambiente Web, as linguagens de Marcação também possuem expressiva significância, em especial através do LaTeX. Linguagem utilizada para produção de textos acadêmicos, com enfoque na universalidade dos arquivos de modo que os mesmos possam ser compartilhados e compilados por diferentes usuários em diferentes computadores sem a perda da formatação do texto. Acerca dessa linguagem, destacamos o exemplo abaixo: \begin{itemize} \item item 1, \item item 2. \end{itemize} onde a marcação utilizada gera uma lista de itens enumerável. A quantidade de marcações disponível para o LaTeX é suficientemente grande, e nosso objetivo aqui não é explanar a linguagem em sua totalidade, porém reconhecendo sua versatilidade e com intuito de apresentarmos melhor acerca de algumas de suas marcas vamos ao segundo exemplo que é um tanto quanto mais robusto em comparação com o primeiro: \begin{theorem}{(Teorema do Ponto fixo de Banach)} Seja $C$ um espaço métrico completo. Suponha que a aplicação $\Phi:C \to C$ contínua é uma contração, isto é, existe uma constante $0\leq K <1$, tal que \begin{eqnarray} d(\Phi(g_1), \Phi(g_2)) &\leq& kd(g_1,g_2) \nonumber \end{eqnarray} para todos os $g_1,g_2 \in C$. Então, existe um e somente um $g \in C$ tal que $g=\Phi(g)$. \label{th-3.1-2} \end{theorem} cujo saída é exatamente: Teorema 3.1. (Teorema do Ponto fixo de Banach) Seja C um espaço métrico completo. Suponha que a aplicação Φ : C → C contínua é uma contração, isto é, existe uma constante 0 ≤ K < 1, tal que d(Φ(g1), Φ(g2)) ≤ kd(g1, g2) para todos os g1, g2 ∈ C. Então, existe um e somente um g ∈ C tal que g = Φ(g). Nesse exemplo, utilizamos diversas marcas, sendo estas: eqnarray, theorem, label, $$. As quais designiam um ambiente matemático (escrita de expressões matemáticas) com vetores, um ambiente de teoremas, criado pelo autor e pode ser modificado conforme a necessidade do usuário para, por exemplo: observação, exemplo, atividade dentre outros e a marca label que designa um rótulo, o qual pode ser utilizado para referenciar o bloco teorema conforme necessidade, por exemplo, ele pode ser acessado clicando aqui: 3.1. Além do LaTeX, a linguagem de marcação HTML também merece um destaque considerado, de fato muitas vezes essa é linguagem é a porta de entrada para usuários nas linguagens de marcação. O HTML é responsável por gerar páginas Web, por meio de marcas que ficam entre os símbolos: <>, não obstante, como exemplo para essa acesse o link: <https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen? usp=sharing>, o código encontra-se na pasta quest3-a. Foi preferível omitir o código ao longo do texto em decorrência do tamanho que o mesmo ocuparia. https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing 3.2 ITEM B) RESENHA SOBRE LINGUAGENS DE MÉDIO NÍVEL Uma linguagem de médio nível apresenta um nível intermediário entre o baixo e alto nível, sua sintaxe já aproximá-se da linguagem humana, porém a certas partes em que é nítido um distanciamento da mesma. Além disso, também nota-se em linguagens de médio nível uma necessidade em explicitar certas informações do código, por exemplo, a declaração do tipo de variáveis. Em relação às linguagens de médio nível, podemos citar a linguagem C e o FOR- TRAN, ambas linguagens de programação que apresentam características próximas a nossa linguagem. Para uma melhor visualização disso, vejamos o pequeno exemplo a seguir: program HELLO print *, 'Hello World' end program HELLO o programa acima é escrito em FORTRAN, mais precisamente FORTRAN 95. A sintaxe print já é próxima a nossa, porém em todo programa escrito em FORTRAN deve-se ter explicitado quando o programa termina, isto é, é necessário passar essa instrução ao programa. Em suma, essa é uma característica já presente em linguagens de mais baixo nível, em que se torna necessário mais informações para o programa. Com intuito de melhor verificar isso, consideremos o programa abaixo, o qual foi feito linguagem C #include <stdio.h> #include <stdlib.h> void main(){ int opss = 10; float a,b,c; printf("Bem vindo ao menu\n\n"); printf("0, ver operações entre dois números não nulos: \n"); printf("1, ver a média entre três números \n"); printf("2, ver o sucessor e antecessor de um número digitado\n"); printf("Outro número fecha o código\n"); printf("Insira sua opção de escolha: ") scanf("%d", &opss); while (opss < 3){ if( opss == 0 ){ // questão1 printf("Insira um número") scanf("%d", &a) printf("Insira um número") scanf("%d", &b) printf("\n A soma é : %0.1f", a + b); printf("\n A subtração é: %0.1f", a - b); printf("\n A multiplicação é: %0.1f", a * b); printf("\n A divisão é %0.1f \n", a / b ); printf("\n Você deseja acessar outra questão? \n "); scanf("%d", &opss); } if ( opss== 1){ // questão2 prinf("Insira um número") scanf("%d", &a) prinf("Insira um número") scanf("%d", &b) prinf("Insira um número") scanf("%d", &c) printf("\n A média é: %0.1f \n", (a + b + c) / 3); printf("\n Você deseja acessar outra questão? \n "); scanf("%d", &opss); } if ( opss == 2 ) { // questão 3 printf("\n Insira um número qualquer: "); scanf("%f",&a); printf("\n O número inserido foi: %0.1f,",a") printf("\n Seu sucessor é: %0.1f" printf("\n Seu antecessor é: %0.1f \n", a, a + 1, a - 1); printf("\n Você deseja acessar outra questão? \n "); scanf("%d", &opss); } } } O programa em contém estrutura de repetição (while) e estrutura condição (if). A ideia é que o usuário possa escolher entre três opções de questões e fornecer argumentos de entrada e o programa dá uma saída correspondente de acordo com a opção selecionada. Oselementos if, printf, já aproximam-se de uma linguagem de alto nível, enquanto que a declaração de variáveis feita em int opss, float a,b,c bem como a necessidade de criar a função no ínicio void main(){} tem-se já elementos de menor nível. 3.3 ITEMC) RESENHA SOBRE LINGUAGEMDE PESQUISA DECLARATIVA As linguagens de pesquisa declarativa seguem o paradigma de programação decla- rativo. Esse paradigma de programação é baseado na ideia de que o algorítimo construído não conterá a informação de como fazer toda as instruções lógicas como é comumente feito na programação imperativa, o enfoque do algorítimo nesse paradigma será em declarar o que deseja ser feito. Não obstante, as linguagens declarativas possuem íntima relação com as que seguem o paradigma de programação funcional. Não só isso, mas diversas linguagens de programação funcional tais como: Erlang, Haskell e Lisp admitem a abordagem declarativa. Visto que, mesmo uma linguagem não sendo puramente declarativa ela ainda assim admite o uso desse paradigma. Em síntese a grande vantagem de uso desse paradigma é a não preocupação com a estrutura lógica de como construir o algorítimo, no entanto, essa é direcionada para como se deve construir a declaração de modo a obter a finalidade desejada. Um forte exemplo dessa linguagem é a linguagem SQL, veremos um algorítimo simples que ilustra bem essa ideia, para tanto vamos considerar a seguinte tabela: alunos Curso Período EDP Topologia Análise Espaços Métricos Luke Skywalker Math.Bach. 6º 9 7 8 9 Ramanujan Math.Lic. 7º 3 6 8 4 Frodo Math.Bach. 8º 10 9 4 3 Anakin Math.Lic. 9º 9 9.6 9.4 10 Pikachu Math.Bach. 6º 2.3 7.8 8.8 9 Dirac Math.Lic. 6º 3 4.5 8.1 4.8 Feynman Math.lic. 6º 6.5 9 4.2 3.2 Elon Math.Lic. 7º 9 5.6 6.4 10 Tabela 3.1 – Disciplinas. pode-se então buscar cada uma das colunas com SQL da seguinte forma: Disciplinas.alunos e então é exibido a coluna das notas da disciplina EDP. Vamos melhorar a busca com outra declaração: SELECT alunos, EDP, Topologia FROM Disciplinas WHERE Curso=’Math.Lic’ and EDP < 7 or Topologia < 7 e faz-se a consulta na tabela Disciplinas, em que buscas os alunos do curso de licenciatura em matemática (Math.Lic.) que tenha tirado nota menor que 7 em EDP ou em Topologia. 4 QUESTÃO 4 Responda, em no máximo 10 linhas, cada um dos itens abaixo: 4.1 SOLUÇÃO 4.1.1 O que são compiladores Compiladores são programas com enfoque em traduzir algum programa que é escrito em uma linguagem de alto nível para um programa que seja equivalente em código para um processador. Em suma, linguagens de alto nível possuem um certo distanciamento da linguagem de máquina e são mais próximas da linguagem humana desse modo, o compilador irá fazer uma ponte, uma conexão entre essa linguagem de modo que o programa seja possível de ser processado, por exemplo, o compilador gfortran da linguagem Fortran. 4.1.2 O que são linguagens compiladas e linguagens interpreta- tivas e suas diferenças? Linguagens compiladas requerem o uso de compilador. Isto é, para que o programa escrito seja executável é necessário que se use o compilador, de modo a gerar um arquivo executável que contem um equivalente ao código escrito e esse executável sim é utilizado pelo computador, a exemplo: a linguagem C e Fortran. Já linguagens interpretativas não requerem o uso de um compilador, mas sim de um interpretador, esse que irá ler o código linha a linha verificando possíveis erros e adaptando as partes lidas para linguagem de máquina sem que haja a criação de um arquivo executável a exemplo se tem a linguagem C. 4.1.3 O que é a Máquina de Turing ? A máquina de Turing é um dispositivo teórico que também é conhecido como máquina universal. Esse modelo teórico é, na verdade, uma abstração de um computador restrito aos aspectos lógicos do funcionamento do mesmo, de modo que numa máquina de Turing seja possível modelar qualquer computador digital. A máquina universal consiste numa infinita, de memória unidimensional dividida em células. Há também uma "head", o elemento inicial da fita, a leitura é feita da esquerda para a direita. Além disso, é possível identificar em que ponto a computação está através de uma configuração, essa que por sua vez é dada por três informações: Estado atual, conteúdo da fita e localização da head. Não obstante, pode-se ter, ainda, quatro desfechos numa máquina de Turing: palavra aceite, palavra rejeitada, abortar e infinito (loop infinito). 5 QUESTÃO 5 Existem milhares de outras linguagens de programação não listadas aqui nessa atividade avaliativa ou utilizada durante a disciplina. Escolha uma e faça um resumo de no máximo 5 páginas, sobre sua história, suas particulares, construções de algorítimo e áreas de aplicação 5.1 SOLUÇÃO A linguagem escolhida foi a linguagem Shell. 5.1.1 Uma introdução a história do Shell Os sistemas operacionais derivados do Unix, em especial as distribuições Linux possuem um terminal que permite acesso a diversas funcionalidades e gerenciamento de processos do computador, acesso esse feito por um terminal shell. O qual permite, independente da distribuição a utilização de comandos comum as diferentes versões. Nesse sentido, surge a linguagem de programação Shell Script que são arquivos de texto que contém um ou mais comandos do shell. Desenvolvida em 1975 por por S.R Bourne, a primeira linguagem shell ficou conhecida como Bourne Shell (sh) e até hoje é utilizado devido a sua rapidez bem como leveza e simplicidade de uso. Naturalmente, variações desse shell foram desenvolvidas por outros programadores a exemplo temos o Korn Shell (ksh) desenvolvido por David Korn que buscava melhorar o Bourne Shell incorporando todos seus comandos e trazendo outras novidades. Além disso, se tem o C Shell (csh). Outra evolução do Bourne Shell, desenvolvida por Bill Joy, esse shell trouxe consigo aspectos importantes para a linguagem, visto que, trazia elementos da linguagem C para o shell, possibilitando uma sintaxe similar e hoje encontra-se na versão do Turbo C Shell que já contém mais melhorias em relação ao anterior. Outro Shell que deve ser mencionado é o Bash (Bourne Again Shell). O Bash é amplamente utilizado e contém melhorias do Bourne Shell, um dos motivos por sua utilização ser uma das mais expressivas se dá por conta da popularização das distribuições linux. 5.1.2 Um pouco da Sintaxe Com intuito de apresentarmos melhor a linguagem Shell vamos ver alguns recursos disponibilizados por ela para uma apresentação da sintaxe da mesma. Para tanto, faremos uma abordagem através de pequenos scripts que serão detalhados ao longo do texto de modo que os principais conceitos que queiramos mostrar sejam destacados. De início, mostraremos como exibir uma mensagem na tela do usuário como segue abaixo: #!/bin/bash # Primeiro script echo "Olá Mundo" a primeira linha contém o que chamamos de shebang, a expressão com #! determina o tipo de shell que iremos executar, no caso o bash. A segunda linha é um comentário em shell que é marcado pelo símbolo: #, já a terceira e última linha imprime na tela a mensa- gem entre aspas através do comando echo, uma observação importante é a possibilidade do uso de aspas duplas ou simples. Vamos, agora a um exemplo de implementação de um laço de repetição conforme apresentado abaixo: #!/bin/bash # Segundo Script for ((a=0 ; a <= 10; a++)); do echo "O número é: $a" done o script acima realiza um laço através da variável de iteração $a (as variáveis em shell script são marcadas por $ e lê-se dollar "nome da variável"). O laço utilizado recebe três parâmetros, os quais são separados pelo símbolo: ”; ”, o primeiro é valor inicial da variável a, o segundo é o critério de parada, e o terceiro a forma como ocorrerá a iteração e ela deve ser informada. Um ponto importante é que o laço for está dentro de uma estrutura do/done, a indentação é irrelevante, mas útil para melhor organização. Agora, veremos o uso das estruturas de controle, bem como alguns operadores relacionais, assim segue o seguinte script: #!/bin/bash if [$1 -gt $2 ]; then echo " $1 > $2 " elif [ $1 -lt $1 ]; then echo " $2 > $1 " elif [ $1 -eq $2 ]; then echo " $2 = $1 " fi esse script apresenta alguns pontos interessantes, primeiramente notemos o uso do if que é encerrado com a expressão fi (if ao contrário), note que as condições de verificações da estrutura estão em colchetes e entre o colchete e cada variável há um espaço, esse que é obrigatório, caso contrário o código imprime um erro, por exemplo: #!/bin/bash if [$1 -lt $2 ]; then echo "$1 < $2" fi teríamos um erro pois não há espaçamento entre [ e $1. Os operadores relacionais são -gt, -lt, -eq que são abreviações para greater than, less than e equal, respectivamente. As variáveis $1 e $2 são interessantes, pois na verdade são parâmetros que são fornecidos pelo usuário através do prompt de comando: o Shell, a imagem abaixo mostra o emprego dos parâmetros: Figura 5.1 – Exemplo da utilização do script acima. em que os parâmetros são apresentados na tabela seguinte. $1 5 6 6 6 1 10 $2 6 1 7 8 1 10 Tabela 5.1 – tabelas com os parâmetros utilizados no script acima. Por fim, vamos ver um último script, em que faremos a declaração de uma função em shell juntamente com algumas operações matemáticas. O código segue abaixo: #!/bin/bash OPERACOES(){ if [ $1 -eq 1 ]; then for ((b=0; b <= 10; b++)); do echo "Soma de $2 com $b: $(($2+b))" done elif [ $1 -eq 2 ]; then for ((b=0; b <= 10; b++)); do echo "Multiplicação de $2 com $b: $(($2*b))" done fi } for ((a=1;a < 3; a++)); do OPERACOES $a $1 done o último script é simples e busca imprimir a soma de um número dado com os números no intervalo [0, 10] bem como sua multiplicação. Implementamos isso através da função OPERACAO, cuja sintaxe é da forma NOME_DA_FUNÇÃO(){}. Um ponto importante aqui é dizer que as funções em shell não recebem parâmetro de entrada de forma explícita, no entanto, podemos usar o aprendido nos códigos acima para passar parâmetros a mesma. Utilizamos, para isso, o laço for em que o fizemos o mesmo variar de 1 até 3, o intervalo é [1, 3) de modo que as condições sejam verificadas pela função e se tenha a soma e multiplicação pelo parâmetro $1 definido pelo usuário. Note que, $2 na função é o parâmetro utilizado no laço for, e não necessariamente há uma necessidade de se inserir um segundo argumento no shell. 5.1.3 Aplicabilidades e usos Um dos pontos importantes a mencionar sobre a linguagem Shell é acerca da sua utilização. A linguagem é comumente utilizada em terminais das distribuições Linux e por possuir uma forte interação com o sistema, muitas vezes, é utilizada para o desenvol- vimento de scripts de automação de tarefas. Nesse sentindo, vale destacar a facilidade em manipulações de arquivos de texto que a linguagem oferece por meio das expressões regulares (REGEX) o código abaixo mostra a simplicidade dessas ações: date | cut -d " " -f4 >> arquivo.txt o código acima é executado diretamente no Shell, o comando date imprime a data no formato dia da semana, mês, dia do mês, hora, número do mês e ano todos separados por espaço, posteriormente o pipe "delimita a execução de outro comando que passa o anterior como argumento para o posterior, o cut que recebe date como entrada é executado com o argumento -d, esse seleciona os caracteres de interesse e exclui os demais o paramêtro é o tipo de separador utilizado entre os caracteres, em nosso exemplo: o espaço, o parâmetro -f4 busca o argumento que aparece na posição 4, mais precisamente após 3 vezes de aparição do delimitador utilizado, o símbolo >> faz um redirecionamento de saída, de modo que a saída seja direcionada ao arquivo.txt, que pode não existir, nesse caso o shell cria o arquivo e armazena nele a saída. 5.1.4 Implementação de um Script de automação De posse do apresentado acerca da linguagem Shell Script, iremos prosseguir com a construção de um Script de automação totalmente feito em Shell Script. Esse script combina Shell e Python, além de utilizar alguns arquivos em Fortran para a execução e tratamento de dados, foi utilizado a biblioteca matplotlib para a construção dos gráficos. Dada a extensão do script, foi preferível deixá-lo em arquivo, o qual pode ser acessado no seguinte link: <https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen? usp=sharing>, nele também encontra-se o script em python já em colab e um video de execução do script para entendimento do que se propõe automatizar. https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing https://drive.google.com/drive/folders/1ns7rDnpHk8EmF_N42B8p5-Fxbh7S7aen?usp=sharing REFERÊNCIAS TANENBAUM, A. S. , Sistemas Operacionais Modernos. Segunda Edição, Prentice Hall, 2003. Questão 1 Solução Questão 2 Solução Questão 3 item a) Resenha sobre linguagens de marcação item b) Resenha sobre linguagens de médio nível item c) Resenha sobre linguagem de pesquisa declarativa Questão 4 Solução O que são compiladores O que são linguagens compiladas e linguagens interpretativas e suas diferenças? O que é a Máquina de Turing ? Questão 5 Solução Uma introdução a história do Shell Um pouco da Sintaxe Aplicabilidades e usos Implementação de um Script de automação Referências
Compartilhar