Introdução ao Linux e Shell Script Daniel Gaspar Gonçalves de Souza daniel@gaspar.ws VII Encontro Acadêmico de Modelagem Computacional Janeiro/2014 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 1/ 105
Parte I Introdução à Linux Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 2/ 105
Conteúdo do Minicurso 1 Software Livre X Proprietário 2 Sistema Operacional 3 Linux: Um breve histórico 4 Por que (não) usar Linux? 5 Peças de um sistema Linux 6 Distribuições Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 3/ 105
Software livre Um software é dito livre quando atende aos quatro tipos de liberdade para os usuários: Executar o programa, para qualquer propósito; Estudar o software; Redistribuir cópias do programa; Modificar o programa e distribuir estas modificações. Ou seja, programa precisa ser distribuído juntamente com o seu código-fonte e sem restrições para que os usuários alterem e redistribuam esse código. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 4/ 105
Software gratuito Software livre Software gratuito Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 5/ 105
Conteúdo do Minicurso 1 Software Livre X Proprietário 2 Sistema Operacional 3 Linux: Um breve histórico 4 Por que (não) usar Linux? 5 Peças de um sistema Linux 6 Distribuições Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 6/ 105
Sistema Operacional Definição Um programa ou um conjunto de programas cuja função é gerenciar os recursos do sistema, fornecendo uma interface entre o computador e o usuário. Basicamente possui as seguintes funções: Definir qual programa recebe atenção do processador; Gerenciar memória; Criar um sistema de arquivos; Gerenciar usuários; Etc. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 7/ 105
Exemplos Microsoft Windows Linux UNIX Apple Mac OS Apple OS X Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 8/ 105
Conteúdo do Minicurso 1 Software Livre X Proprietário 2 Sistema Operacional 3 Linux: Um breve histórico 4 Por que (não) usar Linux? 5 Peças de um sistema Linux 6 Distribuições Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 9/ 105
Primeiros Sistemas Operacionais Sistemas Operacionais costumavam ser totalmente ligados ao hardware, compilados para um processador específico. Funcionamento físico do processador aparecia no SO. Exemplos: General Motors NAA-I/O (para IBM 704) IBM OS/360 (para IBM S/360) IBM DOS/360 (para IBM S/360) RT-11 (para PDP-11) Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 10/ 105
Primeiros Sistemas Operacionais Figura : IBM 704 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 11/ 105
Primeiros Sistemas Operacionais Figura : IBM S/360 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 12/ 105
Primeiros Sistemas Operacionais Figura : PDP-11 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 13/ 105
UNIX Em 1969, a AT&T Bell Labs lança o Sistema Operacional UNIX. Apenas um pequeno núcleo compilado em linguagem de máquina dependente do hardware (kernel); Grande parte do sistema separada do núcleo, escrita em C; Desenvolvimento de uma linguagem de programação para criação de módulos (surge a linguagem C); Sistema de arquivos padrão para todas as arquiteturas. Época do surgimento dos primeiros computadores pessoais. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 14/ 105
POSIX Em 1988, o IEEE publica um padrão para elaboração de Sistemas Operacionais chamado POSIX (Portable Operating System Interface) Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 15/ 105
GNU/Linux UNIX era proprietário (AT&T Bell Labs). Em 1991, Linus Torvalds reescreve o núcleo (kernel) deste sistema e o lança sob o nome de Linux com código fonte aberto (software livre). Desde 1983, Richard Stallman possuía um projeto de lançar o GNU, um Sistema Operacional totalmente livre. Já havia desenvolvido grande parte dos módulos superiores, mas o núcleo - chamado GNU Hurd - ainda estava bem atrasado. Com o lançamento do kernel Linux, usuários juntaram os dois projetos e lançaram o GNU/Linux. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 16/ 105
GNU/Linux (a) Richard Stallman (b) GNU (c) Linus Torvalds (d) Tux Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 17/ 105
Fatias de mercado dos SO s Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 18/ 105
Conteúdo do Minicurso 1 Software Livre X Proprietário 2 Sistema Operacional 3 Linux: Um breve histórico 4 Por que (não) usar Linux? 5 Peças de um sistema Linux 6 Distribuições Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 19/ 105
Vantagens Preço Sistemas Linux no geral são gratuitos. Uma cópia do Microsoft Windows 8.1 pode chegar a custar até R$ 699,00. Segurança Software de código aberto permite que todos leiam o que ele de fato está fazendo. Você confia seus dados à Microsoft? O que será que o Windows faz com suas informações? Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 20/ 105
Vantagens Mais segurança Por ser um sistema pouco utilizado, as pessoas mal-intencionadas preferem desenvolver vírus e outros malware para Microsfot Windows. Personalização Devido ao código ser aberto, qualquer pessoa pode modificar o sistema conforme sua necessidade ou gosto. Que tal colocar o Menu Iniciar do lado direito da tela? Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 21/ 105
Desvantagens Variedade de programas Como Linux não é muito popular, muitos fabricantes não lançam seus programas para o sistema. Suporte à Hardware Nem todos os fabricantes de hardware disponibilizam drivers para seus dispositivos para Linux. Existem controladores código-abertos que podem não ser tão bons quanto os proprietários. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 22/ 105
Conteúdo do Minicurso 1 Software Livre X Proprietário 2 Sistema Operacional 3 Linux: Um breve histórico 4 Por que (não) usar Linux? 5 Peças de um sistema Linux 6 Distribuições Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 23/ 105
Peças de um sistema Linux Diferente de sistemas proprietários, onde uma empresa desenvolve todo o software, um sistema Linux é composto por vários elementos desenvolvidos por toda a comunidade. Linux Kernel X Window System (X.Org) X Display Manager XDM (X Window Display Manager) KDM (KDE Display Manager) GDM (GNOME Display Manager) LightDM MDM Ambiente de Trabalho Demais software para o usuário Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 24/ 105
X Display Manager Figura : XDM Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 25/ 105
X Display Manager Figura : KDM Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 26/ 105
X Display Manager Figura : GDM Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 27/ 105
X Display Manager Figura : LightDM Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 28/ 105
X Display Manager Figura : MDM Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 29/ 105
Peças de um sistema Linux Diferente de sistemas proprietários, onde uma empresa desenvolve todo o software, um sistema Linux é composto por vários elementos desenvolvidos por toda a comunidade. Linux Kernel X Window System (X.Org) X Display Manager Ambiente de Trabalho GNOME KDE MATE Cinnamon Xfce LXDE Demais software para o usuário Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 30/ 105
Ambiente de Trabalho Figura : Gnome Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 31/ 105
Ambiente de Trabalho Figura : KDE Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 32/ 105
Ambiente de Trabalho Figura : Cinnamon Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 33/ 105
Ambiente de Trabalho Figura : MATE Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 34/ 105
Conteúdo do Minicurso 1 Software Livre X Proprietário 2 Sistema Operacional 3 Linux: Um breve histórico 4 Por que (não) usar Linux? 5 Peças de um sistema Linux 6 Distribuições Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 35/ 105
Distribuições Como um sistema Linux é composto por vários módulos e todos com opções código-aberto, é possível montar um sistema conforme sua preferência. Portanto, existem as chamadas distribuições de Linux. Ex: Ubuntu Uma das mais famosas distribuições. Derivada do Debian Kernel Linux + Gnome + Firefox, LibreOffice,... Mint Derivada do Ubuntu Kernel Linux + Cinnamon ou MATE Debian Uma das mais clássicas Possui arquitetura de software instalado baseada Nacional em de pacotes o que facilita a instalação e desinstalação de programas Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 36/ 105
Parte II Introdução ao Bash Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 37/ 105
Conteúdo do Minicurso 7 Usuários e Grupos 8 Estrutura de Arquivos 9 Definição de Shell Script 10 Apresentação do Console Linux 11 Comandos de Linux Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 38/ 105
Usuários e Grupos Em um Sistema Linux, a arquitetura de controle de acesso a arquivos, diretórios e periféricos é baseada em Usuários e Grupos. Usuário Uma pessoa que acessa o computador e possui um nome de usuário e uma senha respectiva. É necessário para acessar a máquina, seja localmente ou remotamente. Ex: Usuário: verao2014 Senha: verao2014 Cada usuário possui uma pasta pessoal onde deve guardar Nacional seus de arquivos. Esta pasta é chamada home do usuário. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 39/ 105
Usuários e Grupos Usuários podem estarem agrupados e cada grupo ter seus respectivos acessos garantidos ou negados. Usuário root Existe um usuário especial, chamado superusuário ou root que é o administrador do sistema. Este usuário pode acessar qualquer dispositivo e qualquer arquivo presente no computador e realizar alterações nos arquivos do sistema. Atenção O usuário root não deve ser utilizado normalmente, apenas para realizar manutenção do sistema (como instalar programas). A maioria dos sistemas não irá inclusive permitir que acesse interface Nacional gráfica de como root. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 40/ 105
Conteúdo do Minicurso 7 Usuários e Grupos 8 Estrutura de Arquivos 9 Definição de Shell Script 10 Apresentação do Console Linux 11 Comandos de Linux Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 41/ 105
Estrutura de Arquivos Como na maioria dos Sistemas Operacionais, os aquivos são estruturados em árvore. Pasta raiz ou root A raiz da estrutura de arquivos é representada pela pasta /, chamada pasta raiz ou root do sistema. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 42/ 105
Estrutura de Arquivos Dentro da pasta root temos diversas outras pastas: bin Executáveis do sistema boot Arquivos necessários na inicialização do computador dev Dispositivos de hardware presentes etc Arquivos de configuração dos programas instalados home Pastas pessoais dos usuários lib Bibliotecas do sistema root Pasta pessoal do usuário root media Outros dispositivos de armazenamento plugados: CD, Pendrive, Cartões de Memória, etc... No geral, os usuários limitados só tem privilégios de escrita ntro de de suas pastas pessoais. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 43/ 105
Estrutura de Arquivos O caminho completo de um diretório ou arquivo é dado pelo caminho traçado na árvore desde a raiz até o mesmo, separados por barras ( / ). Ex: /home/ d a n i e l /Documentos/ s l i d e s l i n u x. pdf Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 44/ 105
Conteúdo do Minicurso 7 Usuários e Grupos 8 Estrutura de Arquivos 9 Definição de Shell Script 10 Apresentação do Console Linux 11 Comandos de Linux Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 45/ 105
Definições Shell Programa que recebe, interpreta e executa os comandos de usuário, aparecendo na tela como uma linha de comandos, representada por um prompt, que aguarda na tela os comandos do usuário. Ex: Bash, Command.com, cmd.exe Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 46/ 105
Definições Shell Programa que recebe, interpreta e executa os comandos de usuário, aparecendo na tela como uma linha de comandos, representada por um prompt, que aguarda na tela os comandos do usuário. Ex: Bash, Command.com, cmd.exe Shell Script Linguagem de programação interpretada por um shell de um sistema operacional. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 46/ 105
Definições Bash Acrônimo de Bourne-again shell, é um shell criado em 1987 e usado como padrão da grande maioria dos kernels de Linux, Mac OS X e Darwin. Também disponível para Windows através de pacotes como cygwin. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 47/ 105
Características de um Shell Script Arquivo de texto puro (codificado UTF-8, por exemplo) Utiliza-se a extensão.sh Para se executar um Shell Script No terminal do Linux, chamar o interpretador bash passando como parâmetro o arquivo do script. Ex: bash meuscript.sh Adicionar o seguinte código à primeira linha do script: #!/bin/bash E marcar o script como executável com chmod +x meuscript.sh (Este passo precisa ser feito apenas uma vez) Após, o script pode ser executado chamando apenas seu nome:./meuscript.sh ou meuscript.sh Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 48/ 105
Conteúdo do Minicurso 7 Usuários e Grupos 8 Estrutura de Arquivos 9 Definição de Shell Script 10 Apresentação do Console Linux 11 Comandos de Linux Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 49/ 105
Console do Linux Disponíveis 6 terminais de modo texto pressionando CTRL + ALT + F1 até F6 Para voltar às sessões gráficas pressione CTRL + ALT + F7 até F12 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 50/ 105
Console do Linux Disponíveis 6 terminais de modo texto pressionando CTRL + ALT + F1 até F6 Para voltar às sessões gráficas pressione CTRL + ALT + F7 até F12 Consoles dentro da interface gráfica: gnome-terminal do ambiente gŕafico GNOME konsole do ambiente gráfico KDE xterm Editores de texto como o Kate já trazem um terminal em sua interface para facilitar o desenvolvimento e debugging Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 50/ 105
Console do Linux Nos Ubuntu mais antigos, é possível encontrar o gnome-terminal no menu Aplicativos > Acessórios > Terminal; Ou então é possível abrí-lo usando a combinação de teclas ALT + F2 e digitando gnome-terminal; Ou usando o atalho CTRL + ALT + T. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 51/ 105
Prompt de Comando usuário@máquina:pasta$ Ex: usuário: Nome do usuário logado no momento máquina: Nome do computador pasta: Pasta atual onde os comandos serão executados, ou onde os programas serão procurados. O símbolo indica que está na pasta home do usuário, normalmente /home/usuario $: Indica que o comando executado terá privilégios normais. Caso o prompt esteja com privilégios de superusuário, o símbolo se altera para # daniel@e200:~$ Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 52/ 105
Redirecionadores No console Linux é possível redirecionar a saída de um comando para um arquivo ou para outro comando, ou redirecionar o conteúdo de um arquivo para a entrada de um comando >: Redireciona a saída padrão para um arquivo (caso o arquivo já exista, o conteúdo dele será apagado) 2 >: Redireciona a saída de erro para um arquivo (caso o arquivo já exista, o conteúdo dele será apagado) >>: Redireciona a saída padrão para um arquivo (caso o arquivo já exista, será acrescentado no final) 2 >>: Redireciona a saída padrão para um arquivo (caso o arquivo já exista, será acrescentado no final) Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 53/ 105
Redirecionadores & >: Redireciona a saída padrão e a de erro para um arquivo (caso o arquivo já exista, o conteúdo dele será apagado) & >>: Redireciona a saída padrão e a de erro para um arquivo (caso o arquivo já exista, será acrescentado no final) l: Redireciona a saída de um comando para outro comando Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 54/ 105
Redirecionadores Ex: l s l a > l i s t a g e m. t x t t r \n < t e s t e. t x t c a t a r q u i v o. t x t grep o i Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 55/ 105
Conteúdo do Minicurso 7 Usuários e Grupos 8 Estrutura de Arquivos 9 Definição de Shell Script 10 Apresentação do Console Linux 11 Comandos de Linux Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 56/ 105
cd Altera o diretório de trabalho atual de acordo com o que for passado como parâmetro Caso seja informado como parâmetro apenas um nome, será procurado um subdiretório dentro do atual para entrar nele Caso o parâmetro se inicie com /, será buscado este diretório na raiz do sistema Caso o parâmetro seja.., o diretório será alterado para seu prórpio pai (subir um nível) Da mesma forma se pode subir dois níveis com cd../.., e assim sucessivamente Pode-se passar o parâmetro para ir para sua pastanacional pessoal de Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 57/ 105
cd Ex: daniel@e200 : $ cd Documentos daniel@e200 : / Documentos$ cd.. /.. daniel@e200 : / home$ cd daniel@e200 : $ cd /tmp daniel@e200 : / tmp$ Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 58/ 105
ls Lista conteúdo do diretório atual. daniel@e200 : $ cd Documentos daniel@e200 : / Documentos$ l s cronograma. odt s l i d e s. pdf daniel@e200 : / Documentos$ l s Area de t r a b a l h o m a t r i x. t a r. gz Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 59/ 105
mkdir Cria um novo diretório Caso seja informado como parâmetro apenas um nome, será criado um subdiretório dentro do atual Caso o parâmetro se inicie com /, será criado um diretório na raiz Caso o parâmetro se inicie com../, o diretório será criado dentro do pai do atual Da mesma forma se pode-se criar diretório dois níveis acima com mkdir../../nome, e assim sucessivamente Caso o parâmtro se inicie com / o diretório será criado dentro de sua pasta pessoal Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 60/ 105
mkdir Ex: daniel@e200 : / tmp$ mkdir t e s t e daniel@e200 : / tmp$ cd t e s t e daniel@e200 : / tmp/ t e s t e $ mkdir / p a s t a daniel@e200 : / tmp/ t e s t e $ cd / p a s t a daniel@e200 : / p a s t a$ Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 61/ 105
echo Imprime o argumento na tela Ex: Caso seja passado o parâmetro -e, o comando irá tratar caracteres especiais como \ n, \ t entre outros. Por padrão, após a impressão na tela uma linha é quebrada automaticamente. Para evitar isto, passar o parâmetro -n. echo abacate maduro abacate maduro echo abacate \n maduro abacate \n maduro echo e abacate \n maduro abacate maduro Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 62/ 105
cat Mostra o conteúdo de um arquivo de texto na tela Ex: c a t t e s t e. t x t Conteudo do a r q u i v o t e s t e. t x t Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 63/ 105
head Mostra as primeiras linhas de um arquivo de texto na tela É possível obter também os N primeiros bytes de um arquivo, mas neste curso só nos interessa as N primeiras linhas. É preciso passar a quantidade de linhas desejada pelo parâmetro -nx, onde X é a quantidade de linhas desejada. Ex: head n3. z i r. c f g #CaR P r o p e r t i e s #Sun Jun 06 1 0 : 1 8 : 1 8 BRT 2010 z i r k e l f r a m e. h=952 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 64/ 105
tail Mostra as últimas linhas de um arquivo de texto na tela É possível obter também os N últimos bytes de um arquivo, mas neste curso só nos interessa as N últimas linhas. É preciso passar a quantidade de linhas desejada pelo parâmetro -nx, onde X é a quantidade de linhas desejada. Ex: t a i l n3 t w i t t e r. html </ s c r i p t > </body></html> Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 65/ 105
tr Substitui todas as ocorrências de uma string por outra O arquivo ou frase de entrada precisa ser passado pelo redirecionador l ou pelo < Ex: echo Sao 3 h o r a s t r 3 6 Sao 6 h o r a s t r \n < t e s t e. t x t Conteudo do a r q u i v o t e s t e. t x t Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 66/ 105
sed O comando tr não se comporta muito bem com strings de tamanhos diferentes ou strings pequenas que apareçam no meio de palavras; Existe no bash o comando sed que, entre outras coisas, permite fazer uma substituição mais eficiente. Uso: s e d e ' s /ORIGINAL/SUBSTITUIDO/g ' O s indica que é uma substituição, e o g que é global (todas as instâncias do termo devem ser substituídas) Ex: echo Cont do a r q u i v o sed e ' s / a r q u i v o / o i /g ' Cont do o i Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 67/ 105
grep Mostra as linhas de um arquivo ou da saída de um comando nas quais é possível encontrar uma certa string Para procurar em um arquivo, passa-se o mesmo pela linha de comando: grep t r e c h o a s e r buscado a r q u i v o. t x t Para se procurar na saída de um comando, utiliza-se o redirecionador l: l s l a grep termo Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 68/ 105
su Realiza o login como usuário root. Deve ser usado para realizar manutenção do sistema. daniel@e200 $ su Senha : E200 d a n i e l # Neste caso, a senha que é pedida é a senha do usuário root. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 69/ 105
sudo Dá poder de superusuário ao usuário atual. Normalmente ativado em instalações domésticas. O administrador da máquina deve listar quais contas de usuário tem o privilégio de poder se tornar root. daniel@e200 $ c a t / e t c / f u s e. c o n f c a t : / e t c / f u s e. c o n f : Permissao negada daniel@e200 $ sudo c a t / e t c / f u s e. c o n f [ sudo ] password f o r d a n i e l : mount max = 1000 u s e r a l l o w o t h e r daniel@e200 $ Neste caso, a senha que é pedida é a senha do próprio usuário. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 70/ 105
sudo Figura : Via xkcd.com Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 71/ 105
Parte III Introdução à Shell Script Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 72/ 105
Conteúdo do Minicurso 12 Estrutura básica de um script 13 Linha de comando, Condicionais e Repetição 14 Leitura e Escrita de Arquivos 15 Operações Aritméticas Básicas e Usando BC Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 73/ 105
Estrutura básica de um script Basicamente, um script é uma sequência de comandos do bash que serão executados nesta ordem, separados por uma quebra de linha ou um ponto-e-vírgula. Atividade 1 Faça um script para imprimir na tela o aviso Abaixo está sua tabela de partições montadas: e mostrar embaixo a tabela de partições. Dica A tabela de partição num sistema Linux fica num arquivo de texto localizado em /etc/fstab. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 74/ 105
Estrutura básica de um script #! / b i n / bash echo Abaixo e s t a sua t a b e l a de p a r t. montadas : c a t / e t c / f s t a b Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 75/ 105
Variáveis Não há separação de variáveis por tipo no bash nem a necessidade de declaração das variáveis anteriormente. A definição de uma variável se dá em tempo de execução apenas definindo seu valor como abaixo: m i n h a s t r i n g= Oi, eu sou uma s t r i n g m e u i n t e i r o =15 Cuidado Não separe com espaços o sinal de igual do nome da variável, nem do valor da mesma. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 76/ 105
Variáveis Para se acessar o conteúdo de uma variável se utiliza o símbolo de $ seguido do nome da mesma. Ex: nome= D a n i e l echo Ola $nome Ola D a n i e l Para se alterar o valor de uma variável, basta novamente definí-la com o novo valor. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 77/ 105
Variáveis Para definir uma variável com o resultado de um comando, utiliza-se, no lugar das aspas, acentos graves (`). Ex: r e s u l t =`c a t t e s t e. txt ` echo R e s u l t a d o : $ r e s u l t R e s u l t a d o : Conteudo do a r q u i v o t e s t e. t x t Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 78/ 105
Variáveis Atividade 2 Faça um script que guarde a data de hoje numa variável e depois a imprima na tela. Dica O comando Linux para se obter a data de hoje é date +%x. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 79/ 105
Variáveis Atividade 2 Faça um script que guarde a data de hoje numa variável e depois a imprima na tela. Dica O comando Linux para se obter a data de hoje é date +%x. #! / b i n / bash h o j e=`date +%x ` echo Hoje eh d i a $ h o j e Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 79/ 105
Conteúdo do Minicurso 12 Estrutura básica de um script 13 Linha de comando, Condicionais e Repetição 14 Leitura e Escrita de Arquivos 15 Operações Aritméticas Básicas e Usando BC Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 80/ 105
If - Else No bash, as estruturas de decisão e repetição são bem parecidas com as demais linguagens, porém alguns detalhes devem ser percebidos. i f [ $ v a r i a v e l == minha s t r i n g ] ; then echo Eh i g u a l! e l s e echo Eh d i f e r e n t e! f i Cuidado Obrigatoriamente a instrução then precisa vir em uma nova Nacional linha, de ou separada por ponto-e-vírgula. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 81/ 105
If - Else Existem diversos operadores booleanos que podem ser usados numa instrução if: ==: Compara duas strings e retorna verdadeiro se forem iguais!=: Compara duas strings e retorna verdadeiro se forem diferentes -eq: Compara dois inteiros e retorna verdadeiro se forem iguais -ne: Compara dois inteiros e retorna verdadeiro se forem diferentes -gt: Compara dois inteiros e retorna verdadeiro se o primeiro for maior -lt: Compara dois inteiros e retorna verdadeiro se o primeiro for menor Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 82/ 105
If - Else -ge: Compara dois inteiros e retorna verdadeiro se o primeiro for maior ou igual -le: Compara dois inteiros e retorna verdadeiro se o primeiro for menor ou igual -a: AND Logico: Retorna verdadeiro se as duas condições são verdadeiras -o: OR Logico: Retorna verdadeiro se pelo menos uma das duas condições é verdadeira Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 83/ 105
If - Else Ex: i f [ $ v a r i a v e l == minha s t r i n g ] ; then i f [ $ v a r i a v e l!= minha s t r i n g ] ; then i f [ $ v a l o r gt 5 ] ; then i f [ $ v a l o r ge 5 a $ v a l o r l e 10 ] ; then Cuidado Respeite o espaço que tem depois da abertura do colchetenacional e o antes de do seu fechamento. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 84/ 105
If - Else Atividade 3 Faça um script que pergunte um mês (número) para o usuário, consulte o mês atual e informe se estamos ou não neste mês. Dica O comando Linux para se obter a data de hoje é date +%m. Dica Para se ler uma variável do usuário se utiliza o comando read nomevariavel. Depois é só acessá-la normalmente com $ na frente. Cuidado Apesar do número do mês ser um inteiro, ao ler do usuário ou consultar no sistema, ele vem no formato de uma string. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 85/ 105
If - Else #! / b i n / bash echo D i g i t e um numero de mes : read mes a t u a l =`date +%m` i f [ $mes == $ a t u a l ] ; then echo O mes d i g i t a d o eh o a t u a l. e l s e echo O mes d i g i t a d o nao eh o a t u a l. f i Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 86/ 105
Linha de comando Atividade 4 Altere o script anterior para que, ao invés do número do mês ser perguntado ao usuário pelo read, ele seja recebido via parâmetro de linha de comando. Dica Os parâmetros passados por linha de comando para um script podem ser lidos nele nas variáveis especiais $1, $2 e assim por diante. Cuidado Ao executar um script que espera receber parâmetros de linha de comando, você deve, no ato de invocá-lo, passar estes parâmetros, como, neste exemplo:./meuscript.sh 10 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 87/ 105
Linha de comando #! / b i n / bash a t u a l =`date +%m` i f [ $1 == $ a t u a l ] ; then echo O mes d i g i t a d o eh o a t u a l. e l s e echo O mes d i g i t a d o nao eh o a t u a l. f i Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 88/ 105
Linha de comando Tente executar o script sem passar nenhum parâmtero. Não é este o comportamento que queremos que ele tenha. Atividade 5 Altere o script da atividade 4 para que se verifique, antes de tudo se a quantidade de parâmetro passada é igual a 1. Dica A quantidade de parâmetros passada a um script pode ser obtida na variável especial $#. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 89/ 105
Linha de comando #! / b i n / bash i f [ $# eq 1 ] ; then a t u a l =`date +%m` i f [ $1 == $ a t u a l ] ; then echo O mes d i g i t a d o eh o a t u a l. e l s e echo O mes d i g i t a d o nao eh o a t u a l. f i e l s e echo I n f o r m e um mes v i a l i n h a de comando Nacional. de f i Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 90/ 105
Case Caso a quantidade de testes a ser realizada seja muito grande, usar uma estrutura como case pode vir a ajudar bastante. c a s e $ v a r i a v e l i n V a l o r 1 ) echo V a l o r 1 f o i e s c o l h i d o ; ; V a l o r 2 ) echo V a l o r 2 f o i e s c o l h i d o ; ; ) echo V a l o r d i f e r e n t e e s c o l h i d o ; ; e s a c Cuidado Os ponto-e-vírgula dobrados servem para terminar cada condição do case. Caso deseja-se executar mais de um comando dentro Nacional de cada de caso, é possível separá-los com um ponto-e-vírgula simples. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 91/ 105
For Usado para fazer um laço de repetição quando já se sabe antes a quantidade de repetições a serem realizadas. f o r i i n $ v e t o r do echo Estou na p o s i c a o $ i done Cuidado Diferentemente de outras linguagens de programação, a instrução for não aceita diretamente valores inteiros como limites (quantidades), e sim varre por cima de um vetor de tamanho fixo. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 92/ 105
For Apesar de não aceitar diretamente valores inteiros como limites da repetição, existe uma maneira de fazer um for parecido do a estrutura da maioria das linguagens. Atividade 6 Faça um script que escreva de 1 até 50 na tela usando for. Dica O comando seq de Linux cria um vetor de valores recebendo o inicial, o incremento (passo) e o final. Por exemplo, para gerar uma sequência que vai de 0 à 10, com passo de 2 em 2, temos: seq 0 2 10 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 93/ 105
For #! / b i n / bash f o r i i n ` seq 1 1 50 `; do echo Numero $ i done Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 94/ 105
Conteúdo do Minicurso 12 Estrutura básica de um script 13 Linha de comando, Condicionais e Repetição 14 Leitura e Escrita de Arquivos 15 Operações Aritméticas Básicas e Usando BC Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 95/ 105
Leitura de Arquivos A leitura de arquivos no bash pode ser feita indiretamente pegando a saída do comando cat. Este não é o único método, mas é eficiente para arquivos de apenas uma linha. Atividade 7 Lembra-se da Atividade 4? Crie um arquivo mes.txt e salve dentro dele apenas um número representando um mês. Altere o script da Atividade 4 para, ao invés de receber o mês pela linha de comando, ele leia o valor dentro deste arquivo. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 96/ 105
Leitura de Arquivos #! / b i n / bash a t u a l =`date +%m` mes=`c a t mes. txt ` i f [ $mes == $ a t u a l ] ; then echo O mes d i g i t a d o eh o a t u a l. e l s e echo O mes d i g i t a d o nao eh o a t u a l. f i Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 97/ 105
Escrita de Arquivos A escrita de arquivos, por sua vez, é realizada simplesmente redirecionando a saída do comando echo para um arquivo. Atividade 8 Modifique o último script para que, ao invés de imprimir na tela, ele escreva em um arquivo res.txt se o mês digitado é o atual ou não. Dica Lembre-se que o redirecionador > apaga todo o conteúdo do arquivo de destino e mantém apenas a última escrita, enquanto o >> vai acrescentando texto no final do arquivo. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 98/ 105
Escrita de Arquivos #! / b i n / bash a t u a l =`date +%m` mes=`c a t mes. txt ` i f [ $mes == $ a t u a l ] ; then echo O mes d i g i t a d o eh o a t u a l. > r e s. t x t e l s e echo O mes d i g i t a d o nao eh o a t u a l. > r e s. t x t f i Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 99/ 105
Conteúdo do Minicurso 12 Estrutura básica de um script 13 Linha de comando, Condicionais e Repetição 14 Leitura e Escrita de Arquivos 15 Operações Aritméticas Básicas e Usando BC Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 100/ 105
Aritmética Básica Para operações simples e com números inteiros, pode-se utilizar o comando expr passando como parâmetro a expressão a ser realizada. Atividade 9 Faça um script que pergunte ao usuário 2 número e apresente a soma, subtração, multiplicação, divisão inteira e resto da divisão dos mesmos. Dica O caractere * possui um significado especial no bash, portanto, para utilizá-lo a fim de multiplicar, é preciso escapá-lo com uma barra invertida antes. Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 101/ 105
Aritmética Básica #! / b i n / bash echo D i g i t e o p r i m e i r o numero : read num1 echo D i g i t e o segundo numero : read num2 soma=`e x p r $num1 + $num2` d i f f =`e x p r $num1 $num2` prod=`e x p r $num1 \ $num2` d i v =`e x p r $num1 / $num2` r e s t o =`e x p r $num1 % $num2` echo Soma : $soma echo Subtracao : $ d i f f echo Produto : $prod echo Quociente : $ d i v echo Resto : $ r e s t o Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 102/ 105
Aritmética de Ponto Flutuante Para operações mais complicadas, incluindo cálculos científicos e/ou com números decimais, utiliza-se o bc - bash calculator. Sua notação de uso é a seguinte: r e s u l t a d o=$ ( echo s c a l e=x ; EXPRESSAO bc ) Onde X é a quantidade de casas decimais, e EXPRESSÃO é a expressão matemática que se deseja calcular. Atividade 10 Faça um script que pergunte o raio de um círculo e informe sua área e o comprimento de sua circinferência, ambos com 2 casas decimais. Dica A círculo = πr 2 e P circunferência = 2πr Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 103/ 105
Aritmética de Ponto Flutuante #! / b i n / bash echo Entre com o r a i o : read r a i o a r e a=$ ( echo s c a l e =2; 3.14 $ r a i o ˆ2 bc ) comp=$ ( echo s c a l e =2; 2 3.14 $ r a i o bc ) echo Area : $ a r e a echo Comprimento da C i r c u n f e r e n c i a : $comp Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 104/ 105
Introdução ao Linux e Shell Script Daniel Gaspar Gonçalves de Souza daniel@gaspar.ws VII Encontro Acadêmico de Modelagem Computacional Janeiro/2014 Daniel Gaspar (daniel@gaspar.ws) Introdução ao Linux e Shell Script 105/ 105