Este documento é um manual sobre shell script que contém 10 partes. Cada parte aborda um tópico diferente relacionado a shell script como expressões regulares, comandos grep, cut, test e loops. O documento fornece exemplos e explicações detalhadas sobre como usar esses recursos do shell script.
Este documento fornece informações sobre o programa Quanta Plus, incluindo como instalá-lo e usá-lo. Também discute configurações, menus, trabalhos com projetos e criação de modelos.
O documento discute o programa Squid, um proxy cache para a Internet. Ele descreve o que é o Squid, seu plano de ensino, instalação, configuração básica e avançada, incluindo autenticação de usuários e limitação de banda. O documento fornece instruções detalhadas para configurar e usar o Squid em redes.
O documento apresenta um plano de ensino para um curso sobre Ruby on Rails. Apresenta tópicos como objetivo, público-alvo, pré-requisitos, cronograma e programação do curso. Também inclui informações sobre licença do conteúdo e instalação do framework Ruby on Rails.
Este documento fornece uma introdução ao editor de texto Vim, descrevendo seu objetivo educacional, público-alvo, pré-requisitos, metodologia e cronograma do curso. Ele também inclui guias introdutórios sobre comandos do Vim e lições sobre interagindo com o editor, movendo texto e cursor, buscando texto e editando arquivos.
Este documento fornece instruções sobre como manipular pacotes no Linux, incluindo como usar as ferramentas dpkg, APT e Synaptic para instalar, atualizar e remover pacotes. Ele explica os conceitos básicos de pacotes e repositórios e fornece guias passo a passo para executar tarefas comuns relacionadas a pacotes.
Este documento fornece uma introdução à linguagem SQL, incluindo seu objetivo de ensinar os principais conceitos da linguagem, como seleção, inserção, atualização e exclusão de dados em bancos de dados relacionais.
Este documento fornece informações sobre o Qemu, um software livre que permite a emulação de hardware. Ele discute o que é o Qemu, como instalá-lo e usá-lo para rodar sistemas operacionais em ambientes virtuais. Além disso, fornece detalhes sobre o Qemu-Launcher, uma interface gráfica para facilitar o uso do Qemu.
Este documento fornece uma introdução ao Unified Modeling Language (UML) e inclui informações sobre o plano de ensino, conceitos iniciais, diagramas estruturais e comportamentais de UML.
Este documento fornece informações sobre o programa Quanta Plus, incluindo como instalá-lo e usá-lo. Também discute configurações, menus, trabalhos com projetos e criação de modelos.
O documento discute o programa Squid, um proxy cache para a Internet. Ele descreve o que é o Squid, seu plano de ensino, instalação, configuração básica e avançada, incluindo autenticação de usuários e limitação de banda. O documento fornece instruções detalhadas para configurar e usar o Squid em redes.
O documento apresenta um plano de ensino para um curso sobre Ruby on Rails. Apresenta tópicos como objetivo, público-alvo, pré-requisitos, cronograma e programação do curso. Também inclui informações sobre licença do conteúdo e instalação do framework Ruby on Rails.
Este documento fornece uma introdução ao editor de texto Vim, descrevendo seu objetivo educacional, público-alvo, pré-requisitos, metodologia e cronograma do curso. Ele também inclui guias introdutórios sobre comandos do Vim e lições sobre interagindo com o editor, movendo texto e cursor, buscando texto e editando arquivos.
Este documento fornece instruções sobre como manipular pacotes no Linux, incluindo como usar as ferramentas dpkg, APT e Synaptic para instalar, atualizar e remover pacotes. Ele explica os conceitos básicos de pacotes e repositórios e fornece guias passo a passo para executar tarefas comuns relacionadas a pacotes.
Este documento fornece uma introdução à linguagem SQL, incluindo seu objetivo de ensinar os principais conceitos da linguagem, como seleção, inserção, atualização e exclusão de dados em bancos de dados relacionais.
Este documento fornece informações sobre o Qemu, um software livre que permite a emulação de hardware. Ele discute o que é o Qemu, como instalá-lo e usá-lo para rodar sistemas operacionais em ambientes virtuais. Além disso, fornece detalhes sobre o Qemu-Launcher, uma interface gráfica para facilitar o uso do Qemu.
Este documento fornece uma introdução ao Unified Modeling Language (UML) e inclui informações sobre o plano de ensino, conceitos iniciais, diagramas estruturais e comportamentais de UML.
O documento discute o DotProject, um software de gerenciamento de projetos livre e de código aberto. Ele fornece detalhes sobre a instalação e uso básico do DotProject, incluindo a criação de empresas, projetos, tarefas e outros itens.
Este documento fornece uma introdução ao Zope, um framework web open source escrito em Python. Ele discute o que é Zope, seu objetivo de ensinar os principais conceitos e funcionalidades, incluindo como ele é um sistema de gerenciamento de conteúdo que permite a publicação e gerenciamento de sites dinâmicos.
O documento discute drivers de dispositivos no Linux, incluindo introdução a drivers de dispositivos, estruturas importantes como file operations e filp, e exemplos passo a passo para desenvolvimento de um driver simples chamado mydev.
Este documento fornece informações sobre tunelamento, incluindo um plano de ensino, ferramentas de tunelamento como Netcat e OpenSSH, e exemplos práticos de como configurar túneis usando essas ferramentas. O documento também discute como tunelamento pode ser usado para contornar firewalls e criptografar conexões.
Este documento fornece informações sobre o wxPython, um framework para desenvolvimento de interfaces gráficas para usuários em Python. Ele discute o objetivo, público-alvo e metodologia de um curso sobre wxPython, além de introduzir os principais conceitos como janelas, menus e layouts.
Este documento apresenta um plano de ensino sobre o SAMBA. Ele contém nove lições que cobrem tópicos como introdução ao SAMBA, instalação, configuração, compartilhamentos, uso do SAMBA como servidor PDC e ferramentas de administração. O documento fornece instruções passo-a-passo para configurar e administrar um servidor SAMBA.
Este documento fornece informações sobre o curso XDialog, incluindo seu objetivo, público-alvo, pré-requisitos, programa e avaliação. Além disso, discute detalhes sobre a instalação e uso do XDialog, um programa para criação de diálogos gráficos no Linux.
Este documento fornece informações sobre o SquidGuard, um programa de filtragem de conteúdo para o proxy Squid. Ele discute o que é o SquidGuard, como instalá-lo e configurá-lo, e explica como ele funciona junto com o Squid para fornecer controle de acesso à Internet baseado em lista negra/branca.
Este documento apresenta um plano de ensino para um curso sobre o programa Screen. Inclui informações sobre objetivos, público-alvo, pré-requisitos, cronograma e avaliação. Também contém instruções sobre instalação, configuração e uso do Screen, incluindo acesso a múltiplas sessões e aplicações em segundo plano.
Este documento fornece uma introdução ao Javascript, incluindo seu objetivo, público-alvo, pré-requisitos, descrição, metodologia e cronograma de ensino. Ele também discute tópicos-chave como sintaxe, variáveis, strings, objetos, arrays, operadores, funções e classes.
Este documento fornece uma introdução ao SELinux, discutindo seu objetivo, plano de ensino e módulos introdutórios. Inclui informações sobre pré-requisitos, instalação e configuração do SELinux, além de abordar contas de usuários e regras de segurança.
Este documento fornece instruções sobre como instalar e configurar o sistema de gerenciamento de conteúdo Horde no Linux. Ele discute os pré-requisitos do sistema, como Apache, MySQL e PHP, e orienta o leitor passo a passo pelo processo de instalação e configuração do Horde e de seus aplicativos.
O documento discute o protocolo XDMCP (X Display Manager Control Protocol), incluindo sua história, instalação e configuração. Fornece detalhes sobre como usar o XDMCP via GDM para gerenciar displays remotos.
O documento descreve um plano de ensino para Tcl/Tk, incluindo objetivo, público-alvo, pré-requisitos, cronograma e avaliação. Também fornece instruções básicas sobre a instalação e uso de Tcl/Tk.
Este documento apresenta um curso sobre Python-GTK. Ele descreve o objetivo, público-alvo, pré-requisitos, programação, avaliação e bibliografia do curso. Além disso, apresenta o conteúdo de 8 lições sobre desenvolvimento de interfaces gráficas com Python e GTK.
O documento descreve um plano de ensino para um curso sobre servidores de email seguros. O plano inclui objetivos, público-alvo, pré-requisitos, cronograma e avaliação do curso. Além disso, aborda tópicos como instalação, configuração e integração de ferramentas de email seguro como AMaViSd-new, ClamAV e SpamAssassin.
Esta apostila sobre JSP e Servlets discute: 1) O que são JSP e Servlets, como tecnologias para desenvolvimento web Java; 2) Um plano de ensino para JSP e Servlets; 3) A licença GNU para usar e distribuir o conteúdo da apostila.
O documento discute o Java Database Connectivity (JDBC), incluindo sua instalação e conceitos básicos e avançados. Ele fornece detalhes sobre como conectar e interagir com bancos de dados relacionais usando JDBC, incluindo a criação e manipulação de tabelas, inserção, atualização e recuperação de dados, e o uso de transações.
Esta apostila sobre Java básico discute: 1) Uma introdução sobre o que é Java, sua história e aplicações; 2) Informações gerais sobre como instalar o Java Development Kit e configurar o ambiente de desenvolvimento; 3) Uma licença que permite a redistribuição e modificação da documentação.
O documento descreve a introdução ao sistema operacional OpenSolaris, incluindo seu histórico, vantagens, instalação em máquina virtual e computador, configuração de rede, idioma e drivers, e uso das interfaces gráfica e de texto. É compilado a partir de diversos materiais livres e licenciado sob a GNU Free Documentation License.
This document discusses the basics of writing shell scripts in Linux. It covers:
- Stringing multiple commands together in a shell script by placing them on separate lines.
- Creating a script file with the #!/bin/bash line to specify the shell, and adding commands and comments.
- Ensuring the script file is executable by using chmod.
- Using echo to display messages and strings, including proper use of quotes.
This document provides an overview of shell scripting concepts in Linux. It discusses shell types including login shells and interactive shells. It covers how shells are invoked and how variables, commands, and processes work within the shell environment. Key topics include variable setting and substitution, command grouping and substitution, shell scripts, functions, parameters, and conditionally running commands based on return values.
O documento discute o DotProject, um software de gerenciamento de projetos livre e de código aberto. Ele fornece detalhes sobre a instalação e uso básico do DotProject, incluindo a criação de empresas, projetos, tarefas e outros itens.
Este documento fornece uma introdução ao Zope, um framework web open source escrito em Python. Ele discute o que é Zope, seu objetivo de ensinar os principais conceitos e funcionalidades, incluindo como ele é um sistema de gerenciamento de conteúdo que permite a publicação e gerenciamento de sites dinâmicos.
O documento discute drivers de dispositivos no Linux, incluindo introdução a drivers de dispositivos, estruturas importantes como file operations e filp, e exemplos passo a passo para desenvolvimento de um driver simples chamado mydev.
Este documento fornece informações sobre tunelamento, incluindo um plano de ensino, ferramentas de tunelamento como Netcat e OpenSSH, e exemplos práticos de como configurar túneis usando essas ferramentas. O documento também discute como tunelamento pode ser usado para contornar firewalls e criptografar conexões.
Este documento fornece informações sobre o wxPython, um framework para desenvolvimento de interfaces gráficas para usuários em Python. Ele discute o objetivo, público-alvo e metodologia de um curso sobre wxPython, além de introduzir os principais conceitos como janelas, menus e layouts.
Este documento apresenta um plano de ensino sobre o SAMBA. Ele contém nove lições que cobrem tópicos como introdução ao SAMBA, instalação, configuração, compartilhamentos, uso do SAMBA como servidor PDC e ferramentas de administração. O documento fornece instruções passo-a-passo para configurar e administrar um servidor SAMBA.
Este documento fornece informações sobre o curso XDialog, incluindo seu objetivo, público-alvo, pré-requisitos, programa e avaliação. Além disso, discute detalhes sobre a instalação e uso do XDialog, um programa para criação de diálogos gráficos no Linux.
Este documento fornece informações sobre o SquidGuard, um programa de filtragem de conteúdo para o proxy Squid. Ele discute o que é o SquidGuard, como instalá-lo e configurá-lo, e explica como ele funciona junto com o Squid para fornecer controle de acesso à Internet baseado em lista negra/branca.
Este documento apresenta um plano de ensino para um curso sobre o programa Screen. Inclui informações sobre objetivos, público-alvo, pré-requisitos, cronograma e avaliação. Também contém instruções sobre instalação, configuração e uso do Screen, incluindo acesso a múltiplas sessões e aplicações em segundo plano.
Este documento fornece uma introdução ao Javascript, incluindo seu objetivo, público-alvo, pré-requisitos, descrição, metodologia e cronograma de ensino. Ele também discute tópicos-chave como sintaxe, variáveis, strings, objetos, arrays, operadores, funções e classes.
Este documento fornece uma introdução ao SELinux, discutindo seu objetivo, plano de ensino e módulos introdutórios. Inclui informações sobre pré-requisitos, instalação e configuração do SELinux, além de abordar contas de usuários e regras de segurança.
Este documento fornece instruções sobre como instalar e configurar o sistema de gerenciamento de conteúdo Horde no Linux. Ele discute os pré-requisitos do sistema, como Apache, MySQL e PHP, e orienta o leitor passo a passo pelo processo de instalação e configuração do Horde e de seus aplicativos.
O documento discute o protocolo XDMCP (X Display Manager Control Protocol), incluindo sua história, instalação e configuração. Fornece detalhes sobre como usar o XDMCP via GDM para gerenciar displays remotos.
O documento descreve um plano de ensino para Tcl/Tk, incluindo objetivo, público-alvo, pré-requisitos, cronograma e avaliação. Também fornece instruções básicas sobre a instalação e uso de Tcl/Tk.
Este documento apresenta um curso sobre Python-GTK. Ele descreve o objetivo, público-alvo, pré-requisitos, programação, avaliação e bibliografia do curso. Além disso, apresenta o conteúdo de 8 lições sobre desenvolvimento de interfaces gráficas com Python e GTK.
O documento descreve um plano de ensino para um curso sobre servidores de email seguros. O plano inclui objetivos, público-alvo, pré-requisitos, cronograma e avaliação do curso. Além disso, aborda tópicos como instalação, configuração e integração de ferramentas de email seguro como AMaViSd-new, ClamAV e SpamAssassin.
Esta apostila sobre JSP e Servlets discute: 1) O que são JSP e Servlets, como tecnologias para desenvolvimento web Java; 2) Um plano de ensino para JSP e Servlets; 3) A licença GNU para usar e distribuir o conteúdo da apostila.
O documento discute o Java Database Connectivity (JDBC), incluindo sua instalação e conceitos básicos e avançados. Ele fornece detalhes sobre como conectar e interagir com bancos de dados relacionais usando JDBC, incluindo a criação e manipulação de tabelas, inserção, atualização e recuperação de dados, e o uso de transações.
Esta apostila sobre Java básico discute: 1) Uma introdução sobre o que é Java, sua história e aplicações; 2) Informações gerais sobre como instalar o Java Development Kit e configurar o ambiente de desenvolvimento; 3) Uma licença que permite a redistribuição e modificação da documentação.
O documento descreve a introdução ao sistema operacional OpenSolaris, incluindo seu histórico, vantagens, instalação em máquina virtual e computador, configuração de rede, idioma e drivers, e uso das interfaces gráfica e de texto. É compilado a partir de diversos materiais livres e licenciado sob a GNU Free Documentation License.
This document discusses the basics of writing shell scripts in Linux. It covers:
- Stringing multiple commands together in a shell script by placing them on separate lines.
- Creating a script file with the #!/bin/bash line to specify the shell, and adding commands and comments.
- Ensuring the script file is executable by using chmod.
- Using echo to display messages and strings, including proper use of quotes.
This document provides an overview of shell scripting concepts in Linux. It discusses shell types including login shells and interactive shells. It covers how shells are invoked and how variables, commands, and processes work within the shell environment. Key topics include variable setting and substitution, command grouping and substitution, shell scripts, functions, parameters, and conditionally running commands based on return values.
This document provides an overview of Linux Bash shell scripting. It covers topics such as writing basic scripts, variables, conditionals, loops, functions, arguments, and input/output redirection. Examples are given for many common scripting tasks like arithmetic operations, string manipulation, file operations, and comparing values. The document is intended to teach the basics of scripting in the Linux Bash shell.
(1) To write a shell script, use an editor like vi or mcedit to write the script code.
(2) Set execute permissions on the script file using chmod. For example, chmod 755 filename.
(3) Execute the script by running it directly with bash/sh, or by using ./filename if in the same directory.
This allows writing a simple first shell script to print "Knowledge is Power" to the screen.
This document provides an introduction and overview of shell scripting in Linux. It discusses what a shell script is, when they should and should not be used, examples of common shell scripts, and an introduction to programming features commonly used in shell scripts such as variables, conditionals, loops, command line arguments, and more. Key points covered include that shell scripts allow automating command execution, are useful for repetitive tasks, and come with programming features to customize behavior.
This document is a presentation on introducing Linux shell scripting. It begins by stating that the talk is aimed at those who can open a terminal and type commands. It then outlines what will be covered, including basic shell commands, combining commands, creating simple scripts, and using cron for automation. The document provides examples of commands for files, disks, processes, and networks. It also demonstrates how to combine commands using pipes and redirection. Finally, it shows how to create simple scripts and discusses using cron for automation.
Apache Mesos is a cluster manager that provides efficient resource sharing for distributed applications across a shared pool of nodes. It allows organizations to run applications like Hadoop, Spark, and Storm on large clusters with high utilization. Mesos addresses issues with prior solutions that constrained everything as "jobs" or required static partitioning. It has been adopted by companies like Twitter, Airbnb, and Hubspot to improve efficiency and allow applications to dynamically scale resources.
The document provides an introduction to UNIX shell scripting basics. It discusses what a shell and shell script are, how to run commands and write simple shell scripts using bash. It covers basics like variables, conditionals, loops, pipes and redirection to process inputs, outputs and errors when running programs from shell scripts.
This document discusses shell scripting and provides information on various shells, commands, and scripting basics. It covers:
- Common shells like Bourne, C, and Korn shells. The Bourne shell is typically the default and fastest, while the C shell adds features like alias and history.
- Basic bash commands like cd, ls, pwd, cp, mv, less, cat, grep, echo, touch, mkdir, chmod, and rm.
- The superuser/root user with full privileges and password security best practices.
- How login works and the difference between .login and .cshrc initialization files.
- Exiting or logging out of shells.
This document discusses shells and shell scripting in Linux. It provides information on common Linux shells like Bash, Bourne shell, C shell, etc. It describes the basic functions of shells like command interpretation, I/O redirection, variables, parameters and more. Shell scripts allow automating tasks and complex series of commands. The document also covers shell script basics, special parameters, variables, I/O redirection operators and more shell scripting concepts.
- Linux originated as a clone of the UNIX operating system. Key developers included Linus Torvalds and developers from the GNU project.
- Linux is open source, multi-user, and can run on a variety of hardware. It includes components like the Linux kernel, shell, terminal emulator, and desktop environments.
- The document provides information on common Linux commands, files, users/groups, permissions, and startup scripts. It describes the Linux file system and compression/archiving utilities.
What is Apache Mesos and how to use it. A short introduction to distributed fault-tolerant systems with using ZooKeeper and Mesos. #installfest Prague 2014
Mesos: The Operating System for your DatacenterDavid Greenberg
Maybe you’ve heard of Mesos—that thing that you can run Hadoop on. I think it powers Twitter? Isn’t it an Apache project, or something?
In this talk, we’ll learn all about Mesos—what it is, how you can leverage it to simplify your infrastructure and reduce AWS/cloud computing costs, and why you should develop your next application on top of it. This talk will give you the tools you need to understand whether Mesos is the right fit for your infrastructure, and several starting points for learning more about Mesos.
Apache Mesos: a simple explanation of basicsGladson Manuel
Mesos is a distributed systems kernel that allows sharing of computing resources across multiple distributed applications or frameworks. It provides scalability, fault tolerance, and resource isolation. Mesos runs on every machine in a distributed cluster and acts as a mediator between systems and applications. The Mesos architecture uses a master-slave design where the master manages resource offers from slaves to frameworks. Frameworks use schedulers to launch and manage tasks on slaves based on resource availability.
Este documento fornece informações sobre PHP, incluindo o que é PHP, como instalá-lo e configurá-lo, sintaxe básica, tipos de dados, operadores, estruturas de controle e funções. O documento também descreve o plano de ensino para um curso de PHP.
Este documento fornece uma introdução básica ao sistema operacional Linux, incluindo sua história, características, comandos básicos e avançados, além de conceitos importantes como arquivos, diretórios e permissões.
1. O documento é um tutorial sobre a linguagem de programação Ruby.
2. Ele explica os conceitos básicos da linguagem como variáveis, tipos de dados, estruturas de controle e classes.
3. O tutorial também aborda tópicos como entrada e saída, exceções, módulos, threads e acesso a bancos de dados.
Este documento é uma apostila sobre conceitos básicos da linguagem C# para programação .NET. A apostila introduz os principais tópicos como a plataforma .NET, a estrutura de um programa C#, variáveis, comandos, operadores, programação orientada a objetos, tratamento de erros, manipulação de arquivos e conexão com banco de dados. O documento é dividido em 12 seções principais cobrindo esses assuntos fundamentais da linguagem C#.
O documento discute conceitos fundamentais de computação como arquitetura de computadores, sistemas operacionais e processadores. Aborda tópicos como estrutura da CPU, conjuntos de instruções, gerenciamento de memória, sistemas de arquivos e principais processadores do mercado como Intel e AMD.
Este documento fornece uma introdução aos microcontroladores PIC18, descrevendo sua arquitetura, memória, periféricos e ferramentas de programação. Foi atualizado três vezes para alterar esquemas elétricos, corpo do documento e copyright. Ele resume os principais componentes e recursos dos PIC18 e fornece informações sobre como programá-los usando MPLAB e linguagem C.
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalRafael Carvalho
A TV digital interativa traz inúmeras facilidades e oportunidades para os programas de televisão.
Com o uso deste sistema, os telespectadores podem ter acesso a jogos e programas interativos cujo conteúdo pode ser moldado de acordo com a sua escolha.
Nessa apostila você terá acesso a uma introdução ao desenvolvimento de aplicações para TV Digital.
Este manual descreve o editor LaTeX Kile. Ele explica como iniciar um novo documento LaTeX usando modelos, editar documentos LaTeX usando recursos como realce de sintaxe e autocompletamento, e compilar documentos. O manual também cobre assistentes, menus personalizáveis e ferramentas de construção.
1. O documento é uma apostila sobre eletrônica digital que apresenta conceitos como sistemas de numeração, álgebra de Boole, circuitos lógicos combinatórios e sequenciais.
2. A apostila inclui 10 capítulos que abordam tópicos como numeração binária e hexadecimal, portas lógicas, famílias de circuitos digitais, flip-flops e contadores.
3. O documento fornece uma introdução abrangente aos fundamentos da eletrônica digital.
Este documento apresenta uma apostila sobre a linguagem de programação Perl. Ele contém 11 lições sobre tópicos básicos como variáveis, arrays, hashes, expressões regulares e objetos. A apostila também discute tópicos mais avançados como módulos, callbacks e processamento de arquivos e URLs.
O documento discute os fundamentos da programação em Java, incluindo tópicos como: 1) introdução a computadores, linguagem de programação e Java; 2) variáveis e tipos de dados; 3) operadores. O documento fornece exemplos de código e explica erros comuns.
O documento discute introdução ao Linux, instalação de distribuições Debian e CentOS, primeiros passos no terminal, obtenção de ajuda, comandos básicos, estrutura de diretórios, editores de texto, administração da shell e introdução a redes no Linux.
O documento apresenta um livro sobre a linguagem de programação Fortran 95. O livro inclui capítulos sobre conceitos básicos da linguagem, trabalhar com arquivos de entrada e saída, estruturas de controle, variáveis compostas como vetores e matrizes, alocação dinâmica de memória, e sub-rotinas e funções. O livro é destinado a estudantes e profissionais interessados em aprender os fundamentos da linguagem Fortran.
O documento é um manual de instruções para o framework CakePHP. Ele fornece uma visão geral dos principais conceitos do CakePHP, incluindo suas convenções de nomenclatura, camadas Model-View-Controller, ciclo de requisições e recursos como controllers, views e models. O manual também inclui tutoriais e guias para tópicos como implantação, segurança, testes e mais.
1. O documento discute o desenvolvimento web com JSF 2 e JPA 2.
2. Os tópicos incluem banco de dados, JDBC, JPA e Hibernate, web container, visão geral do JSF 2, componentes visuais, Facelets, navegação e managed beans.
3. O documento fornece exemplos de código e exercícios para cada tópico.
1. O documento discute fundamentos de controle clássico, incluindo modelagem, representação e análise de sistemas de controle.
2. As seções abordam tópicos como diagramas de blocos, resposta no tempo e frequência, propriedades básicas de sistemas realimentados e estruturas de controladores.
3. Há também discussões sobre objetivos de controle, métodos diretos de projeto e projeto no domínio da frequência.
1. O documento discute fundamentos de controle clássico, incluindo modelagem, representação e análise de sistemas de controle.
2. As seções abordam tópicos como diagramas de blocos, resposta no tempo e frequência, propriedades básicas de sistemas realimentados e estruturas de controladores.
3. Há também discussões sobre objetivos de controle, métodos diretos de projeto e projeto no domínio da frequência.
Este documento apresenta uma apostila sobre programação em Python. Ele começa explicando o que é programação em Python e seu plano de ensino, incluindo objetivos, público-alvo, pré-requisitos, descrição, metodologia e cronograma. Em seguida, fornece uma visão geral da linguagem Python, incluindo suas características, histórico, organização e licença. Por fim, apresenta tópicos como tipos de dados, operadores, estruturas de controle, estruturas de dados, funções, módulos,
Este guia apresenta os principais conceitos da linguagem Pascal em 3 frases ou menos, incluindo a estrutura de um programa Pascal, tipos de dados, expressões, comandos e funções predefinidas.
Este documento fornece informações sobre um curso de programação PHP para Moodle, incluindo seu objetivo, público-alvo, pré-requisitos, descrição, metodologia, cronograma, programa, avaliação e bibliografia. Ele também discute os principais arquivos e funções do Moodle, como config.php, version.php, file.php e index.php, além de módulos, permissões de usuário, sistema de seleção de idioma e criação de novos módulos.
1. O documento é uma apostila sobre a linguagem de programação Turbo Pascal. Ele apresenta os principais conceitos da linguagem como tipos de dados, variáveis, estruturas de decisão e repetição.
2. O documento está organizado em 17 capítulos que cobrem tópicos como unidades pré-definidas, arrays unidimensionais e multidimensionais, registros e tipos definidos pelo usuário.
3. Cada capítulo apresenta exemplos de código Pascal para ilustrar um conceito específico da linguagem como a estrutura IF/ELSE,
O documento fornece um guia rápido da linguagem de programação Pascal, descrevendo sua estrutura básica, comentários, declaração de variáveis e constantes, tipos de dados, operadores, estruturas de controle e outros elementos importantes da linguagem.
[1] O documento discute a criação de jogos com o Blender Game Engine (BGE), enfatizando a importância do planejamento prévio através da definição de objetivos claros e da lógica de programação. [2] É apresentada a noção de fluxogramas e algoritmos para representar processos lógicos de forma visual e textual, respectivamente. [3] São introduzidos conceitos básicos como variáveis, tipos de dados, estruturas condicionais e funções para manipulação de dados.
Este documento apresenta uma introdução à linguagem de programação Python, incluindo tópicos como instalação, ambientes de desenvolvimento, modo interativo, tipos de dados, instruções de controle de fluxo, estruturação de código, entrada/saída, biblioteca padrão e aplicações ao cálculo numérico.
Este documento apresenta um curso sobre a linguagem de programação Python. Ele inclui seções sobre conceitos básicos da linguagem, como tipagem forte e orientação a objetos, além de explicar como usar o interpretador Python, módulos, funções built-in como help() e dir(), e tipos de dados como strings e listas.
1. O documento apresenta uma aula introdutória sobre programação em Python.
2. A aula inclui tópicos como "Hello World", variáveis, condicionais, laços, funções, classes e módulos.
3. O documento serve como um manual de referência rápida sobre os principais conceitos e recursos da linguagem Python.
This document provides an overview and introduction to threading in C#. It discusses key threading concepts such as threads versus processes, when to use threads, creating and starting threads, passing data to threads, naming threads, foreground and background threads, thread priority, exception handling, blocking, sleeping and spinning, joining threads, locking for thread safety, wait handles, synchronization contexts, and more advanced topics such as non-blocking synchronization, wait and pulse, suspend and resume, aborting threads, and ending application domains and processes. The document is presented as a multi-part guide to threading in C#, with examples provided throughout to illustrate the concepts.
A função remove acentos de um texto em C# iterando sobre cada caractere, substituindo caracteres acentuados por suas versões sem acento e adicionando os demais caracteres inalterados à string resultante.
O documento descreve como remover caracteres especiais de um TextBox em C# ao clicar em um botão. Ele fornece um método que remove caracteres como vírgula, ponto e vírgula, sinal de adição definidos em uma variável "trim" do texto no TextBox. O método procura esses caracteres e remove um de cada vez até nenhum ser encontrado mais.
Uma função em C# para obter o IP externo fazendo uma requisição para o site MeuIP e retornando a string com o IP encontrada na resposta. A função faz uma requisição HTTP, lê a resposta, procura pelo texto "IP" e extrai a string com o endereço IP.
O documento explica as diferenças entre usar try/finally e using para liberar recursos em C#. Embora ambos liberam recursos, o using faz isso automaticamente, enquanto try/finally requer que o desenvolvedor libere recursos manualmente no bloco finally. O documento fornece um exemplo mostrando como usar try/finally versus using para liberar um objeto TextWriter.
O documento discute sobre:
- Estruturas de controle de fluxo no C# como if/else, for, while e blocos;
- Sintaxe básica para cada estrutura de controle de fluxo;
- Exemplos simples de uso de if/else, for e while.
Este documento discute vários controles de interface do usuário em C# para aplicativos Windows, incluindo:
1) Propriedades como Dock e Anchor para posicionar controles em formulários;
2) Diálogos como OpenFileDialog e SaveFileDialog;
3) Toolbars com imagens;
4) Status bars para mostrar informações de estado.
1) O documento discute sistemas de arquivos e classes utilizadas para manipulação de arquivos em .NET, incluindo FileStream, BinaryReader, StreamReader e StreamWriter.
2) É explicado como ler e escrever arquivos de texto usando StreamReader e StreamWriter, respectivamente.
3) Métodos úteis como Create, Open, Copy e Delete são discutidos para manipulação de arquivos e pastas.
1. O documento introduz os principais conceitos e noções de utilização de um sistema Linux típico, com foco no uso da linha de comandos.
2. O sistema operacional Linux é baseado no kernel Linux e compartilha dos conceitos dos sistemas Unix originais, sendo multitarefa, multiusuário e representando todos os dispositivos como arquivos dentro de uma estrutura de diretórios hierárquica.
3. A linha de comando e os utilitários de sistema permitem executar aplicativos, manipular arquivos e diretórios
O documento apresenta uma introdução sobre shells e shell scripts, abordando: 1) O que são shells e shell scripts; 2) As variáveis de ambiente usadas nos shells; 3) O formato dos arquivos de shell scripts.
Este documento explica como controlar dispositivos externos através da porta paralela do PC usando C#. Ele descreve os modos de operação e endereços da porta paralela, apresenta a biblioteca Inpout32.dll para acessar a porta paralela em sistemas Windows e fornece um exemplo de código C# para enviar dados para LEDs conectados à porta paralela.
O documento discute classes em C#, incluindo: (1) classes são importantes para programação orientada a objetos; (2) namespaces organizam classes em aplicações; (3) modificadores de acesso controlam visibilidade de membros de classe.
This document provides an introduction and overview of a book about learning C#. It discusses the authors and their backgrounds, provides an introduction to C# and .NET, and previews the book's structure and content. The first chapter begins by showing the reader how to set up their environment and write a basic "Hello World" C# program to get started learning the language. It introduces the concept of classes and methods in C# and demonstrates compiling and running a simple program that outputs text.
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, Betel, Ordenança para exercer a fé, 2Tr24, Pr Henrique, EBD NA TV, 2° TRIMESTRE DE 2024, ADULTOS, EDITORA BETEL, TEMA, ORDENANÇAS BÍBLICAS, Doutrina Fundamentais Imperativas aos Cristãos para uma vida bem-sucedida e de Comunhão com DEUS, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Comentários, Bispo Abner Ferreira, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
Atividade letra da música - Espalhe Amor, Anavitória.Mary Alvarenga
A música 'Espalhe Amor', interpretada pela cantora Anavitória é uma celebração do amor e de sua capacidade de transformar e conectar as pessoas. A letra sugere uma reflexão sobre como o amor, quando verdadeiramente compartilhado, pode ultrapassar barreiras alcançando outros corações e provocando mudanças positivas.
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, Central Gospel, Os Mortos Em Cristo, 1Tr24, Pr Henrique, EBD NA TV, Revista ano 11, nº 1, Revista Estudo Bíblico Jovens E Adultos, Central Gospel, 2º Trimestre de 2024, Professor, Tema, Os Grandes Temas Do Fim, Comentarista, Pr. Joá Caitano, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Biblioteca UCS
A biblioteca abriga, em seu acervo de coleções especiais o terceiro volume da obra editada em Lisboa, em 1843. Sua exibe
detalhes dourados e vermelhos. A obra narra um romance de cavalaria, relatando a
vida e façanhas do cavaleiro Clarimundo,
que se torna Rei da Hungria e Imperador
de Constantinopla.
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24, Pr Henrique, EBD NA TV, Lições Bíblicas, 2º Trimestre de 2024, adultos, Tema, A CARREIRA QUE NOS ESTÁ PROPOSTA, O CAMINHO DA SALVAÇÃO, SANTIDADE E PERSEVERANÇA PARA CHEGAR AO CÉU, Coment Osiel Gomes, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, de Almeida Silva, tel-What, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
9. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância;
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas;
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores;
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais;
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real;
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;
• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens
e descobertas;
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto - chave na comunicação pela Internet;
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
8
10. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
9
11. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
10
13. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)
Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-
leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição
de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,
nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.
This is an unofficial translation of the GNU General Documentation License into Brazilian Por-
tuguese. It was not published by the Free Software Foundation, and does not legally state the
distribution terms for software that uses the GFDL–only the original English text of the GFDL does
that. However, we hope that this translation will help Portuguese speakers understand the GFDL
better.
Licença de Documentação Livre GNU Versão 1.1, Março de 2000
Copyright (C) 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas
não é permitido alterá-lo.
INTRODUÇÃO
O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no
sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,
com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém
para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável
pelas modificações feitas por terceiros.
Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do
documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-
ral (GNU GPL), que é um copyleft para software livre.
Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software
livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que
provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a
manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente
do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-
cipalmente para trabalhos cujo propósito seja de introdução ou referência.
APLICABILIDADE E DEFINIÇÕES
Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo
detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.
O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um
12
14. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
licenciado e é referida como "você".
Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento
ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra
língua.
Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-
clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do
Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente
nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a
Seção Secundária pode não explicar nada de matemática).
Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-
onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.
As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como
sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.
Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa
Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.
Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-
mente, representada num formato cuja especificação esteja disponível ao público geral, cujos
conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores
de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou
(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de
servir como entrada a formatadores de texto ou para tradução automática para uma variedade
de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato
de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-
sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é
"Transparente"é chamada de "Opaca".
Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-
ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML
usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e
projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos
proprietários que podem ser lidos e editados apenas com processadores de texto proprietários,
SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam
disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com
finalidade apenas de saída.
A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,
mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,
o material que esta Licença requer que apareça na página do título. Para trabalhos que não
tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-
minente do título do trabalho, precedendo o início do corpo do texto.
13
15. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
FAZENDO CÓPIAS EXATAS
Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não
comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta
Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-
cente nenhuma outra condição, quaisquer que sejam, às desta Licença.
Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de
cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-
pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,
você também precisa respeitar as condições da seção 3.
Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também
pode exibir cópias publicamente.
FAZENDO CÓPIAS EM QUANTIDADE
Se você publicar cópias do Documento em número maior que 100, e a nota de licença do
Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara
e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e
Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e
legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-
pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar
outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas
preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia
exata em outros aspectos.
Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma
legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa
verdadeira, e continuar os outros nas páginas adjacentes.
Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você
precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia
Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente
completa do Documento acessível publicamente em uma rede de computadores, à qual o público
usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de
protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-
mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar
que esta cópia Transparente vai permanecer acessível desta forma na localização especificada
por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-
mente ou através de seus agentes ou distribuidores) daquela edição para o público.
É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de
redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você
com uma versão atualizada do Documento.
14
16. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
MODIFICAÇÕES
Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-
ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,
com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição
e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além
disso, você precisa fazer o seguinte na versão modificada:
A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-
cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados
na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se
o editor original daquela versão lhe der permissão;
B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-
veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco
dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que
cinco);
C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;
D. Preservar todas as notas de copyright do Documento;
E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às
outras notas de copyright;
F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público
o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico
abaixo;
G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de
Capa requeridos dados na nota de licença do Documento;
H. Incluir uma cópia inalterada desta Licença;
I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo
pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de
Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o
título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar
um item descrevendo a Versão Modificada, tal como descrito na sentença anterior;
J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma
cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-
mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção
"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado
pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira
der sua permissão;
K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da
15
17. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-
buidores e/ou dedicatórias dados;
L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em
seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;
M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão
Modificada;
N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro
título dado a uma Seção Invariante.
Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como
Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar
por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus
títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-
sam ser diferentes de qualquer outro título de seção.
Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-
quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por
exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a
definição oficial de um padrão.
Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente
, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos
de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de
Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.
Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por
você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode
adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que
adicionou a passagem antiga.
O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus
nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer
Versão Modificada.
COMBINANDO DOCUMENTOS
Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob
os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-
binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste
todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.
O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes
Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver
múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de
16
18. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor
origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste
nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.
Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-
sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine
quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as
seções entituladas como "Endosso".
COLETÂNEAS DE DOCUMENTOS
Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados
sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com
uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia
exata de cada um dos Documentos em todos os outros aspectos.
Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob
esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta
Licença em todos os outros aspectos relacionados à cópia exata daquele documento.
AGREGAÇÃO COM TRABALHOS INDEPENDENTES
Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-
parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-
são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela
compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros
trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim
compilados, e eles não são trabalhos derivados do Documento.
Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,
então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa
do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.
Senão eles precisarão aparecer nas capas de todo o agregado.
TRADUÇÃO
Tradução é considerada como um tipo de modificação, então você pode distribuir traduções
do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções
requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir
traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas
Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-
clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a
17
19. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.
TÉRMINO
Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-
samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-
ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos
sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta
Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total
acordo com esta Licença.
REVISÕES FUTURAS DESTA LICENÇA
A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-
tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão
presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja
http://www.gnu.org/copyleft/.
A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar
que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você
tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão
posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o
Documento não especificar um número de Versão desta Licença, você pode escolher qualquer
versão já publicada (não como rascunho) pela Free Software Foundation.
ADENDO: Como usar esta Licença para seus documentos
Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença
no documento e ponha as seguintes notas de copyright e licenças logo após a página de título:
Copyright (c) ANO SEU NOME.
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença
de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-
ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da
Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-
cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".
Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de
dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de
Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os
Textos da Quarta Capa.
Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-
mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,
18
20. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
tal como a GNU General Public License, para permitir o seu uso em software livre.
19
22. Capítulo 1
O que é Shell Script
Shell é o nome que se dá à linha de comando em modo texto dos sistemas operacionais
Linux e UNIX. E, portanto, os shell scripts são um meio de se juntar uma porção de comandos
shell em um só arquivo para serem executados quantas vezes forem necessárias. Os arquivos
de lote (bach) do windows são similares, apenas com uma significativa diferença, já que a linha
de comando de sistemas Unix e Linux é mais poderosa.
21
23. Capítulo 2
Plano de ensino
2.1 Objetivo
verb Capacitar o usuário para o aprendizado básico dos comandos do Linux.
2.2 Público Alvo
Usuários que tenham perfil administrativo, desenvolvedores, programadores e interessados
em geral.
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, funcionários públicos e ter conhecimentos básicos
para operar um computador com uma distribuição baseada no Debian instalada.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. O curso tem duração de uma semana e possui um conjunto
de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de
acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com
as datas pré-estabelecidas em cada tópico.
2.5 Metodologia
O curso está dividido da seguinte maneira:
Duração Descrição do Módulo
1 semana Expressões Regulares
2 semana Ambiente Shell e Comandos de manipulação de caracteres
Todo o material está no formato de lições, e estará disponível ao longo do curso. Ao final de
cada semana do curso será disponibilizada a prova referente ao módulo estudado anteriormente
22
24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
que também conterá perguntas sobre os textos indicados. Utilize o material de cada semana e
os exemplos disponibilizados para se preparar para prova.
As lições contêm o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces-
sárias, desde que estejam dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada li-
ção, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição seja
menor que 6.0, sugerimos que você faça novamente esta lição.
Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições
quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis
para que possam ser consultados durante a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-
sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada ao fórum. Diariamente os monitores darão respostas e esclarecimentos.
2.6 Programa
O curso de CVS oferecerá o seguinte conteúdo:
• Expressões regulares;
• Ambiente Shell, Linhas de comando, Caracteres de remoção, redirecionamento e ambiente;
• A família grep, Passagens de parâmetros;
• Comando cut, Comando tr, Usando separadores, Comando condicionais;
• O comando eval, O trap não atrapalha, O comando getopts;
• Comando test, Simplificações dos comandos condicionais;
• Comandos de Loop;
• Um pouco mais de Loops e matemática;
• O comando tput;
• Funções;
• Variáveis do Shell;
• Named Pipes.
2.7 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
• Expressões Regulares;
23
25. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Ambiente Shell;
• Comandos de manipulação de caracteres;
• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.
Instrumentos de avaliação:
• Participação ativa nas atividades programadas.
• Avaliação ao final do curso.
• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições
• AF = Avaliações
2.8 Bibliografia
• Site http://aurelio.net/shell/
• Site: http://www.ic.unicamp.br/ celio/mc514/bash/bash.html
24
26. Capítulo 3
Introdução
Sejam bem vindos ao curso de Bash Básico!
O curso tem duração de apenas duas semanas e consiste na leitura de alguns livros e lições
e, ao término delas, realizar algumas avaliações. Todas essas atividades valem pontuação. Para
um bom aproveitamento do curso é importante que haja entrosamento com os materiais, os fó-
runs e os tutores. Seja participativo, questione e tire suas dúvidas. O material didático é do prof.
Júlio Neves e de fato não há nada melhor que aprender brincando. É interessante que já esteja
instalado o Linux e que deixe o terminal sempre aberto. Assim facilita acompanhar o raciocínio
da leitura. Qualquer dúvida quanto ao comando pode ser resolvida digitando no Shell:
$ man nomedocomando
ou ainda discutindo concosco no fórum. Assim aprendemos juntos a funcionalidade de cada
um.
Bom trabalho!
25
27. Capítulo 4
Expressões Regulares
4.1 Introdução
Uma Expressão Regular (ER) é um método formal de se especificar um padrão de texto.
É uma composição de símbolos, caracteres com funções especiais, chamados "metacaracte-
res"que, agrupados entre si e com caracteres literais, formam uma seqüência, uma expressão.
Essa expressão é testada em textos e retorna sucesso caso este texto obedeça exatamente a
todas as suas condições. Diz-se que o texto "casou"com a expressão.
A ERs servem para se dizer algo abrangente de forma específica. Definido o padrão de busca,
tem-se uma lista (finita ou não) de possibilidades de casamento. Em um exemplo rápido, [rgp]ato
pode casar "rato", "gato"e "pato"].
As ERs são úteis para buscar ou validar textos variáveis como:
• data;
• horário;
• número IP;
• endereço de e-mail;
• endereço de Internet;
• declaração de uma função ();
• dados na coluna N de um texto;
• dados que estão entre <tags></tags>;
• número de telefone, RG, CPF, cartão de crédito.
Vários editores de texto e linguagens de programação têm suporte a ERs, então, o tempo inves-
tido em seu aprendizado é recompensado pela larga variedade de aplicativos onde ele pode ser
praticado.
4.2 Comando grep
Para não precisar listar todo o conteúdo de um arquivo por completo para apenas saber os
dados do usuário "root", pode-se usar o grep para pesquisar e retornar somente a linha dele. O
26
28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
comando grep tem o seguinte formato:
grep palavra arquivo
Vamos utilizar como exemplo o arquivo /etc/passwd, que é a base de usuários de um sistema
UNIX/Linux. Vale a pena, antes, verificar como que se constitui esse arquivo dando o comando:
$cat /etc/passwd
Observa-se que serão obtidas várias linhas, onde cada um se refere a um usuário diferente.
E cada linha possui o seguinte formato:
login : senha : UID : GID : Nome completo : Diretório $HOME : shellz
Voltando ao grep.
Para "pescar"somente a linha do usuário root faremos:
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
4.3 Os Metacaracteres
Cada metacaracteres é uma ferramenta que tem uma função específica. Servem para dar
mais poder às pesquisas, informando padrões e posições impossíveis de se especificar usando
somente caracteres normais.
Os metacaracteres são pequenos pedacinhos simples, que agrupados entre si ou com carac-
teres normais formam algo maior, uma expressão. O importante é compreender bem cada um
individualmente, e depois apenas lê-los em seqüência.
Metacaracteres Representantes
São aqueles cuja função é representar um ou mais caracteres.
Ponto .
Lista [...]
Lista Negada [^...]
O ponto
O ponto é nosso curinga solitário, que está sempre à procura de um casamento não importa
com quem seja. Pode ser um número, uma letra, um TAB, um , o que vier ele traça, pois o ponto
casa qualquer coisa.
Exemplos:
"n.o"casaria: não, nao, ...
27
29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
".eclado"casaria: teclado, Teclado, ...
"12.45"casaria: 12:45, 12 45, 12.45, ...
A lista
Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que
quer, e nada diferente daquilo, a lista casa com quem ela conhece. Toda "lista"(os colchetes e
seu conteúdo) vale para apenas uma posição, um caractere, por maior que seja.
Exemplos:
n[ãa]o não, nao, ...
[Tt]eclado teclado, Teclado, ....
12[:. ]45 12:45, 12 45, 12.45, ...
A lista é de certa forma exigente. Sendo assim:
Evite Prefira:
[0123456789] [0-9]
[0-9][0-9]:[0-9][0-9] [012][0-9]:[0-5][0-9]
[A-z] [A-Za-z]
Lista negada
A lista negada é exatamente igual à lista, podendo ter caracteres literais, intervalos e classes
POSIX. Tudo o que se aplica a lista normal, se aplica à negada também.
A única diferença é que ela possui lógica inversa, ou seja, ela casará com qualquer coisa, fora os
componentes listados.
Observe que a diferença em sua notação é que o primeiro caractere da lista é um circunflexo, ele
indica que esta é uma lista negada. Então, se [0-9] são números, [^0-9] é qualquer coisa fora
números. Pode ser letras, símbolos, espaço em branco, qualquer coisa menos números. Porém,
ao iniciar o circunflexo (^) fora das chaves possui outro significado diferente: simboliza o início
de uma linha. Mas tem de ser alguma coisa. Só porque ela é uma lista negada isso não significa
que ela pode casar "nada".
Exemplos:
[A-Z^] casa maiúsculas e o circunflexo e [^A-Z^]casa tudo fora isso.
Como mandam as regras da boa escrita, sempre após caracteres de pontuação como a vírgula
ou o ponto, devemos ter um espaço em branco os separando do resto do texto.
Então, vamos procurar por qualquer coisa que não o espaço após a pontuação:
[:;,.!?][^ ]
4.4 Metacaracteres quantificadores
Os quantificadores servem para indicar o número de repetições permitidas para a entidade
imediatamente anterior. Essa entidade pode ser um caractere ou metacaractere. Em outras pa-
lavras, eles dizem a quantidade de repetições que o átomo anterior pode ter, quantas vezes ele
pode aparecer.
São eles:
opcional ?
asterisco *
mais +
28
30. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
chaves
Opcional
É útil para procurar palavras no singular e plural e pode ser tornar opcionais caracteres e me-
tacaracteres.
Exemplos:
Expressão Casa com
Ondas? Onda Ondas
Senadora? Senador Senadora
[BFM]?ala ala Bala Fala Mala
Asterisco
Pode aparecer em qualquer quantidade. O curinga .* é o tudo e o nada, qualquer coisa. Exem-
plos:
6*0 0, 60, 660, 6660, ..., 666666666660, ...
bi*p bp, bip, biip, biiip, biiiip...
b[ip]* b, bi, bip, biipp, bpipipi, biiiiip ...
Mais
Tem funcionamento idêntico ao do asterisco, tudo o que vale para um, se aplica ao outro. A
única diferença é que o mais (+) não é opcional, então a entidade anterior deve casar pelo menos
uma vez, e pode ter várias. Sua utilidade é quando queremos no mínimo uma repetição. Exem-
plos:
6+0 60, 660, 6660, ..., 666666660, ...
bi+p bip, biip, biiip, biiiip...
b[ip]+ bi, bip, biipp, bpipipi, biiiiip, bppp, ...
Chaves
As chaves são a solução para uma quantificação mais controlada, onde se pode especificar exa-
tamente quantas repetições se quer da entidade anterior. Colocando um número entre chaves " ",
indica-se uma quantidade de repetições do caractere (ou metacaractere) anterior. As chaves são
precisas podendo especificar um número exato, um mínimo, um máximo, ou uma faixa numérica.
Elas, inclusive, simulam o *, + e ?.
Exemplos:
n,m significa de n até m vezes, assim algo como 61,4 casa 6, 66, 666 e 6666. Só, nada mais que
isso.
0,1 zero ou 1 (igual ao opcional)
0, zero ou mais (igual ao asterisco)
1, um ou mais (igual ao mais)
3 exatamente
29
31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.5 Metacaracteres tipo âncora
São aqueles que não casam caracteres ou definem quantidades, ao invés disso eles marcam
uma posição específica na linha. Assim, eles não podem ser quantificados, então o mais, o aste-
risco e as chaves não têm influência sobre âncoras.
São eles:
• circunflexo - ^
• cifrão - $
• borda - /b
Explicando cada metacaractere
4.5.1 Circunflexo
Este metacaractere (do tipo de posicionamento por representar uma posição específica da
linha) simboliza o início de uma linha. É também o marcador de lista negada, mas apenas dentro
da lista (e no começo), fora dela ele é a âncora que marca o início de uma linha, veja:
^[0-9]
significa que casa com uma linha começando com qualquer algarismo. O inverso disso seria:
^[^0-9]
4.5.2 Cifrão - o fim
Este é similar e complementar ao circunflexo, pois representa o fim de uma linha e só é válido
no final de uma expressão regular.
Quando demos o comando:
$ grep bash$ /etc/passwd
significa que procuramos pela palavra "bash"no final da linha, ou ainda, a palavra "bash"seguida
de um fim de linha.
Esse cifrão é o mesmo caractere que é utilizado para identificar as variáveis do shell, como $PWD
e $HOME. Para evitar possíveis problemas com a expansão de variáveis, é preciso "proteger"a
expressão regular passada ao grep. A proteção é feita colocando-se a ER entre ’aspas simples’
fazendo:
$ grep ’bash$’ /etc/passwd
Veja outros exemplos:
30
32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
.
4.5.3 Borda - a limítrofe
A borda marca os limites de uma palavra, ou seja, onde ela começa e/ou termina. É muito útil
para casar palavras exatas, e não partes de palavras. Palavra aqui é um conceito que engloba
apenas letras, números e o sublinhado:
[A-Za-z0-9_]
Veja os exemplos:
Veja como se comportam as ERs nas palavras dia, diafragma, radial, melodia e bom-dia!:
• dia - - - dia, diafragma, radial, melodia, bom-dia!
• bdia - - - dia, diafragma, bom-dia!
• diab - - - dia, melodia, bom-dia!
• bdiab — dia, bom-dia!
4.6 Outros metacaracteres
Vamos ver outros metacaracteres, que têm funções específicas e não relacionadas entre si,
portanto não podem ser agrupados em outra classe fora a tradicional "outros". Mas atenção, isso
não quer dizer que eles são inferiores, pelo contrário, o poder das ERs é multiplicado com seu
uso e um mundo de possibilidades novas se abre a sua frente.
São eles:
• escape
• ou |
• grupo ()
• retrovisor /n
4.7 Explicando-os melhor
4.7.1 Escape
Temos duas formas de casar um metacaractere dentro de uma ER:
• Usando Listas: Lua[*] casa com Lua*
31
33. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• "Escapando"o Caractere: Lua* casa com Lua*
Isto é, a contrabarra () "escapa"qualquer metacaractere, tirando todos os seus poderes. O es-
cape é tão poderoso que pode escapar a si próprio! O casa uma barra invertida literal. Então,
agora que sabemos muito sobre ERs, que tal uma expressão para casar um número de RG?
Lembre-se que ele tem o formato n.nnn.nnn-n, é fácil!
[0-9].[0-9]{3}.[0-9]{3}-[0-9]
O * = [*] = asterisco literal
Ironia -> O escape escapa o escape, escapando-se a si próprio, simultaneamente.
4.7.2 Ou
Para procurar por uma coisa ou outra, deve-se usar o pipe "|" e delimitar as opções com
os parênteses "( )". É muito comum em uma posição específica de nossa Expressão Regular
(ER) termos mais de uma alternativa possível, por exemplo, ao casar um cumprimento amistoso,
podemos ter uma terminação diferente para cada parte do dia:
boa-tarde|boa-noite
O ’ou’ serve para esses casos em que precisamos dessas alternativas. Essa ER se lê: "ou
boa-tarde, ou boa-noite", ou seja "ou isso ou aquilo". Lembre que a lista também é uma espécie
de ou (|), mas apenas para uma letra, então:
[gpr]ato é o mesmo que gato|pato|rato
São similares, embora nesse caso em que apenas uma letra muda entre as alternativas, a lista é
a melhor escolha. Em outro exemplo, o ou é útil também para casarmos um endereço de Internet,
que pode ser uma página, ou um sítio FTP http://|ftp://
4.7.3 Grupo
Assim como artistas famosos e personalidades que conseguem arrastar multidões, o grupo
tem o dom de juntar vários tipos de sujeitos em um mesmo local. Dentro de um grupo podemos
ter um ou mais caracteres, metacarateres e inclusive outros grupos. Como em uma expressão
matemática, os parênteses definem um grupo e seu conteúdo pode ser visto como um bloco na
expressão.
Todos os metacaracteres quantificadores que vimos anteriormente podem ter seu poder ampli-
ado pelo grupo, pois ele lhes dá mais abrangência. E o ’ou’, pelo contrário, tem sua abrangência
limitada pelo grupo, e pode parecer estranho, mas é essa limitação que lhe dá mais poder.
Em um exemplo simples,
(ai)+ agrupa a palavra ai e esse grupo está quantificado pelo mais (+). Isso quer dizer que
casamos várias repetições da palavra, como ai, aiai, aiaiai, ... E assim podemos agrupar tudo o
32
34. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
que quisermos, literais e metacaracteres, e quantificá-los:
(ha!)+ ha!, ha!ha!, ha!ha!ha!, ...
(.[0-9]){3} .0.6.2, .2.8.9, .6.6.6, ...
(www˙)?zz.com www.zz.com, zz.com
E em especial, nosso amigo ou ganha limites ou seu poder cresce:
boa-(tarde|noite) boa-tarde, boa-noite
#(|n.|núm) 6 # 6, n. 6, núm 6
(in|con)?certo incerto, concerto, certo
Podemos criar subgrupos também, então imagine que você esteja procurando o nome de um
supermercado em uma listagem e não sabe se este é um mercado, supermercado ou um hiper-
mercado.
(super|hiper)mercado
Consegue casar as duas últimas possibilidades, mas note que nas alternativas super e hiper
temos um trecho per comum aos dois, então podíamos "alternativizar"apenas as diferenças su e
hi:
(su|hi)permercado
Precisamos também casar apenas o mercado sem os aumentativos, então temos de agrupá-
los e torná-los opcionais:
((su|hi)per)?mercado
Ei! E se tivesse minimercado também?
(mini|(su|hi)per)?mercado
4.7.4 Retrovisor
(quero)- 1
Mas esse 1 não é o tal do escape?
Pois é, lembra que o escape () servia para tirar os poderes do metacaractere seguinte. En-
tão, a essa definição agora incluímos: a não ser que este próximo caractere seja um número de
1 a 9, então estamos lidando com um retrovisor.
Notou o detalhe? Podemos ter no máximo 9 retrovisores por ER, então 10 é o retrovisor nú-
mero 1 seguido de um zero.
O verdadeiro poder do retrovisor é quando não sabemos exatamente qual texto o grupo casará.
Vamos estender o quero do exemplo anterior para "qualquer palavra":
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html ([A-
33
35. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Za-z]+)-1
Viu o poder dessa ER? Ela casa palavras repetidas separadas por um traço, como o próprio
quero-quero, e mais: bate-bate, come-come, etc. Mas, e se tornássemos o traço opcional?
([A-Za-z]+)-?1
Com uma modificação pequena, fazemos um minicorretor ortográfico para procurar por palavras
repetidas como estas em um texto:
([A-Za-z]+) 1
Mas, lembre-se que procuramos por palavras inteiras e não apenas trechos delas, então pre-
cisamos usar as bordas para completar nossa ER:
b([A-Za-z]+) 1b
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html Como
já dito, podemos usar no máximo nove retrovisores. Vamos ver uns exemplos com mais de um
de nossos amigos novos:
• (lenta)(mente) é 2 1 lentamente é mente lenta
• ((band)eira)nte 1 2a bandeirante bandeira banda
• in(d)ol(or) é sem 1 2 indolor é sem dor
• ((((a)b)c)d)-1 = 1, 2, 3, 4 abcd-1 = abcd,abc,ab,a
Repare que numeram-se retrovisores contando os grupos da esquerda para a direita.
Ao usar um (grupo) qualquer, você ganha um brinde, e muitas vezes nem sabe. O brinde é o
trecho de texto casado pela ER que está no grupo, que fica guardado em um cantinho especial e
pode ser usado em outras partes da mesma ER.
Então, o retrovisor 1 é uma referência ao texto casado do primeiro grupo, nesse caso quero,
ficando, no fim das contas, a expressão que queríamos. O retrovisor pode ser lembrado também
como um link ou um ladrão, pois copia o texto do grupo.
Como o nome diz, é retrovisor porque ele "olha pra trás", para buscar um trecho já casado.
Isso é muito útil para casar trechos repetidos em uma mesma linha. Veja bem, é o texto, e não a
ER.
Como exemplo, em um texto, procuramos quero-quero. Podemos procurar literalmente por quero-
quero, mas assim não tem graça, vamos usar o grupo e o retrovisor para fazer isso.
34
36. Capítulo 5
Parte I
5.1 Diálogo
Diálogo entre um Linuxer e um empurrador de mouse:
- Quem é o Bash?
- O Bash é o filho mais novo da família Shell.
- Pô cara! Estás a fim de me deixar maluco? Eu tinha uma dúvida e você me deixa com duas! -
Não, maluco você já é há muito tempo. Desde que se decidiu a usar aquele sistema operacional
que você tem que dar dez boots por dia e não tem domínio nenhum sobre o que está acontecendo
no seu computador. Mas deixa isso prá lá, vou te explicar o que é Shell e os componentes de sua
família e ao final da explanação você dirá: "Meu Deus do Shell! Porque eu não optei pelo Linux
antes?".
5.2 O ambiente Linux
Para você entender o que é e como funciona o Shell, primeiro será mostrado como funciona
o ambiente em camadas do Linux. Dê uma olhada no gráfico abaixo:
35
37. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
.
Neste gráfico dá para ver que a camada de hardware é a mais profunda e é formada pelos com-
ponentes físicos do seu computador. Envolvendo esta, vem a camada do kernel que é o cerne do
Linux, seu núcleo, é quem coloca o hardware para funcionar fazendo seu gerenciamento e con-
trole. Os programas e comandos que envolvem o kernel, dele se utilizam para realizar as tarefas
aplicativas para que foram desenvolvidos. Fechando tudo isso vem o Shell que leva este nome
porque em inglês, Shell significa concha, carapaça, isto é, fica entre o usuário e o sistema opera-
cional, de forma que tudo que interage com o sistema operacional, tem que passar pelo seu crivo.
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html
5.3 O ambiente Shell
Bom já que para chegar ao núcleo do Linux, no seu kernel que é o que interessa a todo apli-
cativo, é necessária a filtragem do Shell, vamos entender como ele funciona de forma a tirar o
máximo proveito das inúmeras facilidades que ele nos oferece.
O Linux por definição é um sistema multiusuário - não podemos nunca esquecer disto - e para per-
mitir o acesso de determinados usuários e barrar a entrada de outros, existe um arquivo chamado
/etc/passwd que além de fornecer dados para esta função de "leão-de-chácara"do Linux, tam-
bém provê informações para o login daqueles que passaram por esta primeira barreira. O último
campo de seus registros informa ao sistema qual Shell a pessoa receberá ao se "logar"(ARGH!!!).
Lembra que foi falado de Shell, família, irmão? Pois é, vamos começar a entender isto: o Shell,
que se vale da imagem de uma concha envolvendo o sistema operacional propriamente dito, é o
nome genérico para tratar os filhos desta idéia que, ao longo dos anos de existência do sistema
operacional Unix foram aparecendo. Atualmente existem diversos sabores de Shell, dentre estes
é destacado o sh (Bourne Shell), o ksh (Korn Shell), bash (Bourne Again Shell) e o csh (C Shell).
5.4 Uma rápida passagem nos principais sabores de Shell
Bourne Shell (sh)
Desenvolvido por Stephen Bourne da Bell Labs (da AT&T onde também foi desenvolvido o Unix),
este foi durante muitos anos o Shell default do sistema operacional Unix. É também chamado de
Standard Shell por ter sido durante vários anos o único e até hoje é o mais utilizado até porque
ele foi portado para todos os ambientes Unix e distros Linux.
Korn Shell (ksh)
Desenvolvido por David Korn, também da Bell Labs, é um superset do sh, isto é, possui todas as
facilidades do sh e a elas agregou muitas outras. A compatibilidade total com o sh vem trazendo
muitos usuários e programadores de Shell para este ambiente.
Bourne Again Shell (bash)
Este é o Shell mais moderno e cujo número de adeptos mais cresce em todo o mundo, seja
por ser o Shell default do Linux, seu sistema operacional hospedeiro, seja por sua grande diver-
sidade de comandos que incorpora inclusive diversos instruções características do C Shell. C
36
38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Shell (csh)
Desenvolvido por Bill Joy da Berkley University é o Shell mais utilizado em ambientes *BSD e
Xenix. A estruturação de seus comandos é bem similar à da linguagem C. Seu grande pecado foi
ignorar a compatibilidade com o sh, partindo por um caminho próprio.
Além destes Shells existem outros, mas, neste curso, será abordado somente sobre os três pri-
meiros tratando-os genericamente por Shell e assinalando as especificidades de cada um que
porventura hajam.
Atenção: Quando foi dito que o último campo do /etc/passwd informa ao sistema
qual é o Shell que o usuário receberá ao se "logar", é para ser interpretado ao
pé-da-letra, isto é, se neste campo do seu registro estiver prog, a pessoa ao
acessar o sistema receberá a tela de execução do programa prog e ao terminar
a sua execução ganhará imediatamente um logout. Imagine o quanto se pode
incrementar a segurança com este simples. artifício.
5.5 Explicando o funcionamento do Shell
O Shell é o primeiro programa que você ganha ao se "logar"no Linux. É ele que resolverá vá-
rias coisas de forma a não onerar o kernel com tarefas repetitivas, aliviando-o para tratar assuntos
mais nobres. Como cada usuário possui o seu próprio Shell interpondo-se entre ele e o Linux, é
o Shell quem interpreta os comandos que são teclados e examina as suas sintaxes, passando-os
esmiuçados para execução.
O Shell é um interpretador (ou será intérprete) que traz consigo uma poderosa linguagem com
comandos de alto nível, que permite construção de loops (laços), de tomadas de decisão e de
armazenamento de valores em variáveis, como será mostrado.
Será explicado as principais tarefas que o Shell cumpre, na sua ordem de execução. Preste aten-
ção nesta ordem porque ela é fundamental para o entendimento do resto do nosso bate papo.
Exame da Linha de Comandos
Neste exame, o Shell identifica os caracteres especiais (reservados) que têm significado para
interpretação da linha, logo após verifica se a linha passada é um comando ou uma atribuição.
Comando
Quando uma linha é digitada no prompt do Linux, ela é dividida em pedaços separados por es-
paço em branco: o primeiro pedaço é o nome do programa que terá sua existência pesquisada;
identifica em seguida, nesta ordem, opções/parâmetros, redirecionamentos e variáveis.
Quando o programa identificado existe, o Shell verifica as permissões dos arquivos envolvidos
(inclusive o próprio programa), dando um erro caso você não esteja credenciado a executar esta
tarefa.
Atribuição
Se o Shell encontra dois campos separados por um sinal de igual ()= sem espaços em branco
37
39. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
entre eles, identifica esta seqüência como uma atribuição.
Exemplos:
$ ls linux
linux
Neste exemplo, o Shell identificou o ls como um programa e o linux como um parâmetro pas-
sado para o programa ls.
$ valor=1000
Neste caso, por não haver espaços em branco (já dá para notar que o branco é um dos ca-
racteres reservados) o Shell identificou uma atribuição e colocou 1000 na variável valor.
Jamais Faça:
$ valor = 1000
bash: valor: not found
Neste caso, o Bash achou a palavra valor isolada por brancos e julgou que você estivesse man-
dando executar um programa chamado valor, para o qual estaria passando dois parâmetros: = e
1000.
Resolução de Redirecionamentos
Após identificar os componentes da linha que você teclou, o Shell parte para a resolução de
redirecionamentos. O Shell tem incorporado ao seu elenco de vantagens o que chamamos de
redirecionamento, que pode ser de entrada (stdin), de saída (stdout) ou dos erros (stderr), con-
forme será explicado a seguir.
Substituição de Variáveis
Neste ponto, o Shell verifica se as eventuais variáveis (parâmetros começados por $), encontra-
das no escopo do comando, estão definidas e as substitui por seus valores atuais.
Substituição de Meta Caracteres
Se algum metacaractere (*, ? ou []) foi encontrado na linha de comando, neste ponto ele
será substituído por seus possíveis valores. Supondo que o único arquivo no seu diretório cor-
rente começado pela letra n seja um diretório chamado "nomegrandeprachuchu", se você fizer:
$ cd n*
Passa Linha de Comando para o kernel
Completadas as tarefas anteriores, o Shell monta a linha de comandos, já com todas as subs-
tituições feitas, chama o kernel para executá-la em um novo Shell (Shell filho), ganhando um
número de processo (PID ou Process Identification) e permanece inativo durante a execução do
programa. Uma vez encerrado este processo (juntamente com o Shell filho), recebe novamente
o controle e, exibindo um prompt, mostra que está pronto para executar outros comandos.
38
40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.6 Caracteres para remoção do significado
É isso mesmo, quando não se deseja que o Shell interprete um caractere especial, deve-se
"escondê-lo"dele. Isso pode ser feito de três formas distintas:
Apóstrofo ou plic (’)
Quando o Shell vê uma cadeia de caracteres entre apóstrofos ('), ele tira os apóstrofos da ca-
deia e não interpreta seu conteúdo.
$ ls linux*
linuxmagazine
$ ls ’linux*’
bash: linux* no such file or directory
No primeiro caso, o Shell "expandiu"o asterisco e descobriu o arquivo linuxmagazine para lis-
tar. No segundo, os apóstrofos inibiram a interpretação do Shell e veio a resposta que não existe
o arquivo linux*.
Contrabarra ou Barra Invertida ()
Idêntico aos apóstrofos exceto que a barra invertida inibe a interpretação somente do caractere
que a segue.
Suponha que você, acidentalmente, tenha criado um arquivo chamado * (asterisco) - que alguns
sabores de Unix permitem - e deseja removê-lo. Se você fizesse:
$ rm *
Estaria cometendo um grande erro, pois o rm removeria todos os arquivos do diretório corrente.
A melhor forma de fazer o pretendido é:
$ rm *
Desta forma, o Shell não interpretaria o asterisco e em conseqüência não faria a sua expan-
são.
Faça a seguinte experiência científica:
$ cd /etc
$ echo ’*’
$ echo *
$ echo *
Viu a diferença? Então, não precisa explicar mais.
Aspas (")
Exatamente igual ao apóstrofo exceto que, se a cadeia entre aspas contiver um cifrão ($), uma
crase (`), ou uma barra invertida (), estes caracteres serão interpretados pelo Shell.
Não precisa se preocupar, não foi dado exemplos do uso das aspas por que você ainda não co-
nhece o cifrão($) nem a crase (`). Daqui para frente veremos com muita constância o uso destes
39
41. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
caracteres especiais, o mais importante é entender o significado de cada um.
5.7 Caracteres de redirecionamento
5.7.1 Caracteres de redirecionamento
A maioria dos comandos tem uma entrada, uma saída e pode gerar erros. Esta entrada é
chamada Entrada Padrão ou stdin e seu default é o teclado do terminal. Analogamente, a saída
do comando é chamada Saída Padrão ou stdout e seu default é a tela do terminal. Para a tela
também são enviadas por default as mensagens de erro oriundas do comando que neste caso é
a chamada Saída de Erro Padrão ou stderr. Veremos agora, como alterar este estado de coisas.
Vamos fazer um programa gago. Para isto faça:
$ cat
O cat é uma instrução que lista o conteúdo do arquivo especificado para a Saída Padrão (st-
dout). Caso a entrada não seja definida, ele espera os dados da stdin. Como não foi especificada
a entrada, ele está esperando-a pelo teclado (Entrada Padrão) e como também não foi citada a
saída, o que será teclado irá para a tela (Saída Padrão) fazendo desta forma, um programa gago.
Experimente!
5.7.2 Redirecionamento da Saída Padrão
Para especificarmos a saída de um programa usamos o > (maior que) ou o » (maior, maior)
seguido do nome do arquivo para o qual se deseja mandar a saída. Vamos transformar o pro-
grama gago em um editor de textos.
$ cat > Arq
O cat continua sem ter a entrada especificada, portanto está aguardando que os dados sejam
teclados, porém a sua saída está sendo desviada para o arquivo Arq. Assim sendo, tudo que
esta sendo teclado esta indo para dentro de Arq, de forma que fizemos o editor de textos mais
curto e ruim do planeta.
Se fizermos, novamente:
$ cat > Arq
Os dados contidos em Arq serão perdidos, já que antes do redirecionamento o ShellArq estava
vazio. Para colocar mais informações no final do arquivo, deveriamos ter feito: criará um $
cat » Arq
Atenção: Como já haviamos lhe dito, o Shell resolve a linha e depois manda o
comando para a execução. Assim, se você redirecionar a saída de um arquivo
40
42. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
para ele próprio, primeiramente o Shell "esvazia"este arquivo e depois manda o
comando para execução, desta forma você acabou de perder o conteúdo do seu
arquivo. Com isso dá para notar que o » (maior maior) serve para inserir texto
no final do arquivo.
5.7.3 Redirecionamento da Saída de erro Padrão
Assim como o default do Shell é receber os dados do teclado e mandar as saídas para a
tela, os erros também serão enviados para a tela se você não especificar para onde deverão ser
enviados. Para redirecionar os erros use 2> SaidaDeErro. Note que entre o número 2 e o sinal de
maior (>) não existe espaço em branco. Atenção: Não confunda » com 2>. O primeiro anexa
dados ao final de um arquivo, e o segundo redireciona a Saída de Erro Padrão (stderr) para
um arquivo que está sendo designado. Isso é importante.
Suponha que durante a execução de um script você pode, ou não (dependendo do rumo to-
mado pela execução do programa), ter criado um arquivo chamado /tmp/seraqueexiste$$. Para
não ficar sujeira no seu disco, ao final do script você colocaria uma linha:
$ rm /tmp/seraqueexiste$ $ (dois cifrões juntos)
Caso o arquivo não existisse seria enviado para a tela uma mensagem de erro. Para que isso
não aconteça, deve-se fazer:
$ rm /tmp/seraqueexiste$ $ 2> /dev/null (dois cifrões juntos)
Sobre o exemplo visto, há duas dicas:
Dica 1:
O $ $ (dois cifrões juntos) contêm o PID, isto é, o número do seu processo. Como o Linux
é multiusuário, é bom anexar sempre o $ $ (dois cifrões juntos) ao nome dos
arquivos que serão usados por várias pessoas para não haver problema de propriedade,
isto é, caso você batizasse o seu arquivo simplesmente como seraqueexiste, o primeiro
que o usasse (criando-o então) seria o seu dono e todos os outros ganhariam um erro
quando tentassem gravar algo nele.
Para que você teste a Saída de Erro Padrão direto no prompt do seu Shell, vamos dar mais
um exemplo. Faça:
$ ls naoexiste
bash: naoexiste no such file or directory
$ ls naoexiste 2> arquivodeerros
$
hspace*1cmtextbf$ cat arquivodeerros
bash: naoexiste no such file or directory
Neste exemplo, vimos que quando fizemos um ls em naoexiste, ganhamos uma mensagem
de erro. Após, redirecionarmos a Saída de Erro Padrão para arquivodeerros e executarmos o
41
43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
mesmo comando, recebemos somente o prompt na tela. Quando listamos o conteúdo do arquivo
para o qual foi redirecionada a Saída de Erro Padrão, vimos que a mensagem de erro tinha sido
armazenada nele. Faça este teste.
Dica 2:
- Quem é esse tal de /dev/null?
- Em Unix existe um arquivo fantasma. Chama-se /dev/null. Tudo que é mandado para
este arquivo some, assemelha-se a um Buraco Negro. No caso do exemplo, como não nos
interessava guardar a possível mensagem de erro oriunda do comando rm, redirecionamos-
a para este arquivo.
É interessante notar que estes caracteres de redirecionamento são cumulativos, isto é, se no
exemplo anterior fizéssemos:
$ ls naoexiste 2» arquivodeerros
a mensagem de erro oriunda do ls seria anexada ao final de arquivodeerros.
5.7.4 Redirecionamento da Entrada Padrão
Para fazermos o redirecionamento da Entrada Padrão, usamos o < (menor que).
- E para que serve isso? - você irá perguntar.
-Com esse exemplo você entenderá:
Suponha que você queira mandar um email para o seu chefe. Ao invés de sair redigindo o email
direto no prompt da tela de forma a tornar impossível a correção de uma frase anterior onde, sem
querer, escreveu um "nós vai", você edita um arquivo com o conteúdo da mensagem e após umas
quinze verificações sem constatar nenhum erro, decide enviá-lo e para tal, faz:
$ mail chefe < arquivocommailparaochefe
O seu chefe, então, receberá o conteúdo do arquivocommailparaochefe.
Um outro tipo de redirecionamento que o Shell te permite é o chamado here document. Ele é
representado por « (menor menor) e serve para indicar ao Shell que o escopo de um comando
começa na linha seguinte e termina quando encontra uma linha cujo conteúdo seja unicamente o
label que segue o sinal «.
Veja o fragmento de script a seguir, com uma rotina de ftp:
$ ftp -ivn hostremoto « fimftp
user $Usuário $Senha
binary
get arquivoremoto
fimftp
Aqui, temos muitos detalhes interessantes:
1. As opções que foram usadas para o ftp (-ivn) servem para ele ir listando tudo que está acon-
tecendo (-v de verbose), para não perguntar se você tem certeza de que deseja transmitir
42
44. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cada arquivo (-i de interactive), e finalmente a opção -n serve para dizer ao ftp para ele
não solicitar o usuário e sua senha, pois esses serão informados pela instrução específica
(user).
2. Quando foi usado o « fimftp, estava dizendo o seguinte para o intérprete: "Shell, não faça
nada a partir daqui até encontrar o label fimftp. Você não entenderia nada, já que são
instruções específicas do comando ftp e você não entende nada de =ftp=".
Se fosse só isso seria simples, mas pelo próprio exemplo dá para ver que existem duas variáveis
($Usuário e $Senha), que o Shell resolverá antes do redirecionamento. Mas a grande vantagem
desse tipo de construção é que ela permite que comandos também sejam interpretados dentro
do escopo do here document, o que também contraria o que foi dito. Depois será explicado como
isso funciona. Agora não dá, pois está faltando ferramenta.
1. O comando user é do repertório de instruções do ftp e serve para passar o usuário e a senha
que haviam sido lidos em uma rotina anterior a esse fragmento de código e colocados,
respectivamente, nas duas variáveis: $Usuário e $Senha.
2. . O binary é outra instrução do ftp, que serve para indicar que a transferência de arquivore-
moto será feita em modo binário, isto é, o conteúdo do arquivo não será interpretado para
saber se está em ASCII, EBCDIC, ...
3. O get arquivoremoto diz ao ftp para pegar esse arquivo em hostremoto e trazê-lo para o
nosso host local. Se fosse para mandar o arquivo, usaríamos o comando put.
Atenção: Um erro muito freqüente no uso de labels (como o fimftp do exemplo anterior) é
causado pela presença de espaços em branco antes ou após o mesmo. Fique muito atento
quanto a isso, por que este tipo de erro cria problemas no programador, até que seja de-
tectado. Lembre-se: um label que se preze tem que ter uma linha inteira só para ele.
5.8 Redirecionamento de Comandos
Os redirecionamentos que falamos até aqui sempre se referiam a arquivos, isto é mandavam
para arquivo, recebiam de arquivo, simulavam arquivo local e etc. O que veremos a partir de
agora redireciona a saída de um comando para a entrada de outro, é muito utilizado e ajuda bas-
tante. Seu nome é pipe (que em inglês significa tubo, já que ele encana a saída de um comando
para a entrada de outro) e sua representação é uma barra vertical (|).
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html $
ls | wc -l
21
O comando ls passou a lista de arquivos para o comando wc, que quando está com a opção
-l conta a quantidade de linhas que recebeu. Desta forma, podemos afirmar categoricamente que
no diretório existiam 21 arquivos.
$ cat /etc/passwd |sort | lp
43
45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Esta linha de comandos manda a listagem do arquivo /etc/passwd para a entrada do comando
sort. Este a classifica e manda-a para o lp que é o gerenciador do spool de impressão.
5.9 Caracteres de Ambiente
Normalmente, ao priorizar uma expressão você a coloca entre parênteses, por causa da arit-
mética é normal pensarmos desta forma. Mas em Shell o que prioriza mesmo são as crases (`)
e não os parênteses. Vamos dar exemplos de uso das crases para você entender melhor.
Eu quero saber quantos usuários estão "logados"no computador que eu administro. Eu posso
fazer:
$ who | wc -l
8
O comando who passa a lista de usuários conectados para o comando wc -l que conta quan-
tas linhas recebeu e lista a resposta na tela. Pois bem, mas ao invés de ter um oito solto na tela,
o que quero é que ele esteja no meio de uma frase.
Para mandar frases para a tela, uso o comando echo, ficando assim:
$ echo "Existem who | wc -l usuários conectados"
Existem who | wc -l usuários conectados
Não funcionou, e não foi por causa das aspas que eu coloquei, mas sim por que eu teria que
ter executado o who | wc -l antes do echo. Para resolver este problema, tenho que priorizar esta
segunda parte do comando com o uso de crases, fazendo assim:
$ echo "Existem ’who | wc -l’ usuários conectados"
Existem 8 usuários conectados
Para eliminar esse monte de brancos antes do 8 que o wc -l produziu, basta tirar as aspas. Assim:
$ echo Existem ’who | wc -l’ usuários conectados
Existem 8 usuários conectados
Como foi dito antes, as aspas protegem tudo que está dentro dos seus limites, da interpreta-
ção do Shell. Como para o Shell basta um espaço em branco como separador, os vários espaços
serão trocado por um único após a retirada das aspas.
Quando estiver no Shell, você deve sempre dar um comando em cada linha. Para agrupar co-
mandos em uma mesma linha, terá que separá-los por ponto-e-vírgula(;). Então:
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html $pwd
; cd /etc; pwd; cd -; pwd
/home/meudir
44
46. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
/etc/
/home/meudir
Neste exemplo, listamos o nome do diretório corrente com o comando pwd, mudamos para o
diretório /etc, novamente listamos o nome do diretório e, finalmente, voltamos para o diretório
onde estava anteriormente (cd -), listando seu nome. Repare que foi colocado o ponto-e-vírgula
(;) de todas as formas possíveis para mostrar que não importa se existem espaços em branco
antes ou após este caractere.
Finalmente, vamos ver o caso dos parênteses. Veja só o caso a seguir, bem parecido com o
exemplo anterior:
$ (pwd ; cd /etc ; pwd;)
/home/meudir
/etc/
$ pwd
/home/meudir
- Quequeiiisso minha gente? Eu estava no /home/meudir, mudei para o /etc, constatei que
estava neste diretório com o pwd seguinte, e quando o agrupamento de comandos terminou, eu
vi que continuava no /etc/meudir, como se eu nunca houvesse saído de lá!
- Ih! Será que tem coisa de mágico aí?
- Tá me estranhando, rapaz? Não é nada disso! O interessante do uso de parênteses é que
ele invoca um novo Shell para executar os comandos que estão no seu interior. Desta forma,
realmente fomos para o diretório /etc, porém quando todos os comandos dentro dos parênteses
foram executados, o novo Shell que estava no diretório /etcShell anterior cujo diretório corrente
era /home/meudir. Faça outros testes usando cd, e ls para você firmar o conceito.
Agora que já conhecemos estes conceitos veja só este exemplo:
$ mail suporte « FIM
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html >Ola
suporte, hoje as ’date"+%hh:mm"’
>ocorreu novamente aquele problema
>que eu havia reportado por
>telefone. Conforme seu pedido
>ai vai uma listagem dos arquivos
>do diretorio:
>’ls -l’
>Abracos a todos.
>FIM
Finalmente, agora, temos conhecimento para mostrar o que havíamos conversado sobre here
document. Os comandos entre crases (‘) serão priorizados e, portanto, o Shell os executará an-
tes da instrução mail. Quando o suporte receber o e-mail, verá que os comandos date e ls foram
executados imediatamente antes do comando mail, recebendo então uma fotografia do ambiente
no momento em que a correspondência foi enviada.
45
47. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
O prompt primário default do Shell, como vimos, é o cifrão ($), porém o Shell usa o conceito
de prompt secundário, ou de continuação de comando que é enviado para a tela quando há uma
quebra de linha e a instrução não terminou. Esse prompt, é representado por um sinal de maior
(>), que vemos precedendo a partir da 2ª linha do exemplo.
Para finalizar e bagunçar tudo, devo dizer que existe uma construção mais moderna que vem
sendo utilizada como forma de priorização de execução de comandos, tal qual as crases (‘). São
as construções do tipo $(cmd), onde cmd é um (ou vários) comando que será(ão) executado(s)
com prioridade em seu contexto.
Assim sendo, o uso de crases (‘) ou construções do tipo $(cmd) servem para o mesmo fim, po-
rém para quem trabalha com sistemas operacionais de diversos fornecedores (multiplataforma),
aconselho o uso das crases já que o $(cmd) não foi portado para todos os sabores de Shell. Aqui
dentro do Botequim, usarei ambas as formas, indistintamente.
Vejamos novamente o exemplo dado para as crases sob esta nova ótica:
$ echo Existem $(who | grep wc -l) usuários conectados
Existem 8 usuários conectados
Veja só este caso:
$ Arqs=ls
$ echo $Arqs
ls
Neste exemplo, eu fiz uma atribuição (=) e executei uma instrução. O que eu queria era que a
variável $Arqs, recebesse a saída do comando ls. Como as instruções de um script são interpre-
tadas de cima para baixo e da esquerda para a direita, a atribuição foi feita antes da execução
do ls. Para fazer o que desejamos é necessário que eu priorize a execução deste comando em
detrimento da atribuição e isto pode ser feito de qualquer uma das maneiras a seguir:
$ Arqs=’ls’
ou:
$ Arqs=$(ls)
Para encerrar este assunto, vamos ver só mais um exemplo. Digamos que eu queira colocar
dentro da variável $Arqs a listagem longa (ls -l) de todos os arquivos começados por arq e segui-
dos de um único caractere (?). Eu deveria fazer:
$ Arqs=$(ls -l arq?)
ou:
$ Arqs=’ls -l arq?’
Mas veja:
46
48. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ echo $Arqs
-rw-r–r–
1 jneves jneves 19 May 24 19:41 arq1 -rw-r–r– 1 jneves jneves 23 May
24 19:43 arq2 -rw-r–r– 1 jneves jneves 1866 Jan 22 2003 arql
- Pô, saiu tudo embolado!
- Pois é cara, como eu já te disse, se você deixar o Shell "ver"os espaços em branco, sempre
que houver diversos espaços juntos, eles serão trocados por apenas um. Para que a listagem
saia bonitinha, é necessário proteger a variável da interpretação do Shell, assim:
$ echo "$Arqs"
-rw-r–r– 1 jneves jneves 19 May 24 19:41 arq1
-rw-r–r– 1 jneves jneves 23 May 24 19:43 arq2
-rw-r–r– 1 jneves jneves 1866 Jan 22 2003 arql
- Olhe, amigo, vá treinando esses exemplos, porque, quando nos encontrarmos novamente, vou
lhe explicar uma série de instruções típicas de programação Shell. Tchau! Ahh! Só mais uma
coisinha que eu ia esquecendo de lhe dizer. Em Shell, o "jogo da velha"(#) é usado quando de-
sejamos fazer um comentário.
$ exit # pede a conta ao garcon
47
49. Capítulo 6
Parte II
6.1 Diálogo
- Garçom! Traz um "chops"e dois "pastel". O meu amigo hoje não vai beber por que ele final-
mente esta sendo apresentado a um verdadeiro sistema operacional e ainda tem muita coisa a
aprender! - E então, amigo, tá entendendo tudo que te expliquei até agora? - Entendendo eu tô,
mas não vi nada prático nisso... - Calma rapaz, o que te falei até agora, serve como base ao que
há de vir daqui pra frente. Vamos usar estas ferramentas que vimos para montar programas es-
truturados, que o Shell permite. Você verá porque até na TV já teve programa chamado "O Shell
é o Limite". - Para começar vamos falar dos comandos da família grep. - grep? Não conheço
nenhum termo em inglês com este nome... - É claro, grep é um acrônimo Global Regular Expres-
sion Print, que usa expressões regulares para pesquisar a ocorrência de cadeias de caracteres
na entrada definida (se bem que há uma lenda sobre como este comando foi nomeado: no editor
de textos "ed", o avô do "vim", o comando usado para buscas era g/_expressao regular_/p, ou no
inglês g/_re_/p.). Por falar em expressões regulares (ou regexp), o Aurélio Marinho Jargas tem
todas as dicas em sua página (inclusive tutorias) que abordam o tema. Se você está mesmo a
fim de aprender a programar em Shell, Perl, Python, ... Acho bom você ler estes artigos para te
ajudar no que está para vir.
Pergunta: O grep é um aplicativo para linha de comando que faz buscas no conteúdo dos arqui-
vos. Aceita expressões regulares e ao utilizá-las no grep é recomendado utilizar escapes "¨para
caracteres como "*"para que o bash não o entenda como um curinga para nomes de arquivos. A
definição dada está correta?
6.2 Eu fico com o grep, você com a gripe
Esse negócio de gripe é brincadeira! É só um pretexto para pedir umas caipirinhas. Mas
voltando à vaca fria, eu te falei que o grep procura cadeia de caracteres dentro de uma entrada
definida, mas o que vem a ser uma "entrada definida"? Bem, existem várias formas de definir a
entrada do comando grep. Vejamos: Pesquisando em um arquivo:
$ grep rafael /etc/passwd
Pesquisando em vários arquivos:
$ grep grep *.sh
48
50. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Pesquisando na saída de comando:
$ who | grep Pelegrino
No 1º exemplo, o mais simples, procurei a palavra rafael em qualquer lugar do arquivo /etc/passwd.
Se quisesse procurá-la como um login name, isto é, somente no início dos registros deste arquivo,
eu deveria fazer:
$ grep '^rafael’ /etc/passwd
E para que serve este circunflexo e os apóstrofos? O circunflexo (^), se você tivesse lido os
artigos anteriores sobre expressões regulares que te falei, saberia que servem para limitar a
pesquisa ao início de cada linha, e os apóstrofos (’) servem para o Shell não interpretar este
circunflexo, deixando-o passar incólume para o comando grep.
O grep aceita como entrada, a saída de outro comando redirecionado por um pipe (isto é muito
comum em Shell e é um tremendo acelerador de execução de comando já que atua como se
a saída de um programa fosse guardada em disco e o segundo programa lesse este arquivo
gerado), desta forma, no 3º exemplo, o comando who listou as pessoas "logadas"na mesma má-
quina que você (não se esqueça jamais: o Linux é multiusuário) e o grep foi usado para verificar
se o Pelegrino estava trabalhando ou "coçando".
6.3 A família grep
Este comando grep é muito conhecido, pois é usado com muita freqüência, o que muitas
pessoas desconhecem é que existem três comandos na família grep, que são:
• grep;
• egrep;
• fgrep.
A principais características diferenciais entre os 3 são:
• O grep pode ou não usar expressões regulares simples, porém no caso de não usá-las, o
fgrep é melhor, por ser mais rápido;
• O egrep ("e"de extended, extendido) é muito poderoso no uso de expressões regulares. Por
ser o mais lento da família, só deve ser usado quando for necessária a elaboração de uma
expressão regular não aceita pelo grep;
• O fgrep ("f"de fast, rápido, ou de "file", arquivo) como o nome diz é o rapidinho da família,
executa o serviço de forma muito veloz (por vezes é cerca de 30% mais veloz que o grep e
50% mais que o egrep), porém não permite o uso de expressões regulares na pesquisa.
Atenção: Tudo que foi dito acima sobre velocidade, só se aplica à família de comandos
grep do Unix. No Linux o grep é sempre mais veloz, já que os outros dois (fgrep e egrep)
são scripts em Shell que chamam o primeiro.
49
51. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Agora que você já conhece as diferenças entre os membros da família, me diga: o que você
acha dos três exemplos que eu dei antes das explicações?
- Eu achei que o fgrep resolveria o teu problema de forma mais veloz do que o grep.
- Perfeito! Tô vendo que você está atento! Está entendendo tudo que estou te explicando! Então
vamos ver mais exemplos para clarear de vez as diferenças de uso dos membros da família.
6.4 Exemplos da família grep
Exemplos
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html Eu sei
que em um arquivo existe um texto falando sobre Linux só não tenho certeza se está escrito com
L maiúsculo ou l minúsculo. Posso fazer de duas formas:
$ egrep (Linux | linux) arquivo.txt
ou
$ grep [Ll]inux arquivo.txt
No primeiro caso, a expressão regular complexa "(Linux | linux)"usa os parênteses para agru-
par as opções e a barra vertical (|) como um "ou"lógico, isto é, estou procurando Linux ou linux.
No segundo, a expressão regular [Ll]inux significa: começado por L ou l seguido de inux. Por
esta expressão ser mais simples, o grep consegue resolvê-la, portanto acho melhor usar a se-
gunda forma, já que o egrep tornaria a pesquisa mais lenta.
Outro exemplo. Para listar todos os subdiretórios do diretório corrente, basta:
$ ls -l | grep '^d’
drwxr-xr-x 3 root root 4096 Dec 18 2000 doc
drwxr-xr-x 11 root root 4096 Jul 13 18:58 freeciv
drwxr-xr-x 3 root root 4096 Oct 17 2000 gimp
drwxr-xr-x 3 root root 4096 Aug 8 2000 gnome
drwxr-xr-x 2 root root 4096 Aug 8 2000 idl
drwxrwxr-x 14 root root 4096 Jul 13 18:58 locale
drwxrwxr-x 12 root root 4096 Jan 14 2000 lyx
drwxrwxr-x 3 root root 4096 Jan 17 2000 pixmaps
drwxr-xr-x 3 root root 4096 Jul 2 20:30 scribus
drwxrwxr-x 3 root root 4096 Jan 17 2000 sounds
drwxr-xr-x 3 root root 4096 Dec 18 2000 xine
No exemplo que acabamos de ver, o circunflexo (^) serviu para limitar a pesquisa à primeira
posição da saída do ls longo. Os apóstrofos foram colocados para o Shell não "ver"o circunflexo
(^).
50
52. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Vamos ver mais um. Sabemos que as quatro primeiras posições possíveis de um ls -l de um
arquivo comum (arquivo comum! Não é diretório, nem link, nem...) devem ser:
.
Assim sendo, para descobrir todos os arquivos executáveis em um determinado diretório eu de-
veria fazer:
$ ls -la | egrep '^-..(x|s)’
-rwxr-xr-x 1 root root 2875 Jun 18 19:38 rc
-rwxr-xr-x 1 root root 857 Aug 9 22:03 rc.local
-rwxr-xr-x 1 root root 18453 Jul 6 17:28 rc.sysinit
Onde novamente usamos o circunflexo (^) para limitar a pesquisa ao início de cada linha, então
as linhas listadas serão as que começam por um traço (-), seguido de qualquer coisa (o ponto
quando usado como uma expressão regular significa qualquer coisa), novamente seguido de
qualquer coisa, vindo a seguir um x ou um s.
Obteríamos o mesmo resultado se fizéssemos:
$ ls -la | grep '^-..[xs]'
e agilizaríamos a pesquisa.
6.5 Vamos montar uma cdteca
Vamos começar a desenvolver programas, acho que a montagem de um banco de dados de
músicas é bacana para efeito didático (e útil nesses tempos de downloads de mp3 e "queima-
dores"de CDs). Não se esqueça que, da mesma forma que vamos desenvolver um monte de
programas para organizar os seus CDs de música, com pequenas adaptações, você pode fazer
o mesmo com os CDs de software que vêm com a Linux Magazine e outros que você compra ou
queima, disponibilizando este banco de software, desta forma ganhando muitos pontos com seu
chefe. Para todos que trabalham com você (o Linux é multiusuário, e como tal deve ser explo-
rado).
- Espera! De onde eu vou receber os dados dos CDs?
- Inicialmente, vou lhe mostrar como o seu programa pode receber parâmetros de quem o estiver
executando e em breve, ensinarei a ler os dados pela tela ou de um arquivo.
6.6 Passando parâmetros
O layout do arquivo músicas será o seguinte:
51
53. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
nome do álbum^intérprete1~nome da música1:..:intérprete~nome da música
isto é, o nome do álbum será separado por um circunflexo (^) do resto do registro, que é formado
por diversos grupos compostos pelo intérprete de cada música do CD e a respectiva música in-
terpretada. Estes grupos são separados entre si por dois-pontos (:) e internamente, o intérprete
será separado por um til (~) do nome da música.
Eu quero escrever um programa que chamado musinc, incluirá registros no meu arquivo musicas.
Eu passarei o conteúdo de cada álbum como parâmetro na chamada do programa fazendo assim:
$ musinc "álbum^interprete~musica:interprete~musica:..."
Desta forma o programa musinc estará recebendo os dados de cada álbum como se fosse uma
variável. A única diferença entre um parâmetro recebido e uma variável é que os primeiros re-
cebem nomes numéricos (nome numérico fica muito esquisito, né? O que quis dizer é que seus
nomes são formados por um e somente um algarismo), isto é $1, $2, $3, ..., $9. Vamos, antes de
tudo, fazer um teste:
Exemplos
$ cat teste
#!/bin/bash
# Programa para testar passagem de parametros
echo "1o. parm -> $1"
echo "2o. parm -> $2"
echo "3o. parm -> $3"
Vamos executá-lo:
$ teste passando parametros para testar
bash: teste: cannot execute
Ops! Esqueci-me de torná-lo executável. Vou fazê-lo de forma a permitir que todos possam
executá-lo e em seguida vou testá-lo:
$ chmod 755 teste
$ teste passando parametros para testar
1o. parm -> passando
2o. parm -> parametros
3o. parm -> para
Repare que a palavra testar, que seria o quarto parâmetro, não foi listada. Isto deu-se justa-
mente porque o programa teste só listava os três primeiros parâmetros. Vamos executá-lo de
outra forma:
$ teste "passando parametros"para testar
1o. parm -> passando parametros
52