Buscar

Programação para Servidore 1 ao 10

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 187 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 187 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 187 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação para servidores
Redes de Computadores – DANIEL RIBEIRO MATOS
Fortaleza, 2017.1
Padrão Inverso no grep
● Continuando nossa agenda, vamos 
para as opções de alterar ou deletar 
uma linha
● Primeiramente, pense como podemos 
realizar a ação de deletar uma linha?Com o grep nós conseguimos mostrar a linha de um arquivo que contém o padrão especificado
grep joão /etc/agenda.txt
A linha acima retornará todas as linhas que contenham o padrão 
joão
E se eu quiser justamente o contrário?
Lista todas as linhas que não contem o padrão especificado
Padrão Inverso no grep
● Será que o grep não nos dá esta opção?
– Dúvidas sobre comandos:
● man grep
-v, --invert-match
 Invert the sense of matching, to select non-matching lines
De posse dessa informação, como podemos fazer 
para apagar um registro de nossa agenda?
Vamos usar uma busca com o padrão de inverter, 
assim o resultado do grep seria nosso arquivo já com 
a linha deletada!
Padrão Inverso no grep
● Ou seja:
grep -v $apagar $agenda
– Esse comando irá gerar nossa agenda sem a linha que 
contem o padrão a apagar. Agora queremos que esta saída, 
seja nosso arquivo de agenda original.
– Para não ocorrer risco de perder nosso arquivo de agenda, 
vamos fazer um backup antes de sobrescrevê-lo:
cp $agenda $agenda.bkp
– Em seguida, vamos jogar nosso novo arquivo em um local 
temporário
grep -v $apagar $AGENDA > /tmp/apagado
– E finalmente, sobrescrevemos nossa agenda:
mv /tmp/apagado $agenda
Modificando uma entrada
● Para modificar a entrada, podemos 
fazer da seguinte maneira:
– Apago a entrada e procedo como se fosse por a 
primeira vez
● Tentem implementar este caso.
FUNÇÕES
Funções
● Notem que para implementar o alterar, 
nós utilizamos o mesmo código de 
remover e adicionar
– Foi preciso duplicar código.
● Poderíamos criar uma função que insere 
um novo registro e uma que apaga um 
registro com base em um padrão
– Com isso não precisaríamos redigitar o código de 
adicionar e remover um registro
funcao () { comando1; comando 2; ... }
● Ou:
funcao ()
{
comando1;
comando2;
…
}
funcao é o nome da função, ao utilizar 
uma função, a partir de agora, se eu 
precisar realizar o trabalho da função, 
ao invés de digitar novamente todos 
os comandos, utilizo somente: funcao 
e todos os comamdos internos serão 
executados.
● Teríamos então, algo como:
adicionar_entrada ( ) 
{
echo “Digite a linha a incluir:”
read entrada
grep “$entrada” $1
if [ $? -eq 1 ]
then 
echo “Adicionando entrada”
echo $entrada >> $1
else
echo “Já existe a entrada no arquivo $agenda
fi
}
O $1, que em um script reprenta o primeiro 
argumento recebido por um script, dentro 
de uma função representa o primeiro 
argumento que a função recebeu. Para 
chamar a função, deve ser feito:
adicionar_entrada $ARQUIVO_AGENDA
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/16
Programação para
Servidores
Aula 1: Introdução ao Shell Script
INTRODUÇÃO
Nesta aula, travaremos o primeiro contato com a disciplina de Programação para Servidores. Nossas tarefas se iniciam
com a preparação do ambiente para as aulas, onde é necessário, no mínimo, um editor de textos simples e um terminal
de comandos com interpretador bash. 
Veremos ainda os conceitos de shell script e, ainda, linguagens compiladas e interpretadas.
OBJETIVOS
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/16
Descrever o ambiente de trabalho do laboratório;
Diferenciar as linguagens interpretadas e as linguagens compiladas;
Reconhecer caracteres especiais em programação shell;
De�nir o conceito de shell script e sua utilização em computação.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/16
UM POUCO DE TEORIA
Nossa disciplina é iminentemente prática.
Colocaremos a mão na massa. Mas é claro
que precisaremos entender “o quê” estamos
fazendo antes de treinar o “como fazer”.
Vamos, então, analisar conceitos
importantes.
DEFINIÇÃO DE SHELL SCRIPT
Shell script é uma linguagem de programação interpretada usada
em vários sistemas operacionais. 
Na linha de comandos de um interpretador (shell), podemos-
empregar diversos comandos um após o outro ou combiná-los
em uma mesma linha. 
Alguns comandos oferecem relativa complexidade, exigindo
repetidas tentativas até obter sucesso. Semanas depois são
feitas novas tentativas até acertar.
Então, como posso salvar a
sequência correta?
Se forem inseridas diversas linhas de comandos em um arquivo
texto simples, tem-se em um shell script. Uma vez criado, um
shell script pode ser reutilizado quantas vezes for necessário.
 
Todos os sistemas Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades
administrativas e de manutenção do sistema. Os arquivos de lote (batch) do Windows são também exemplos de shell
scripts. 
Nesta disciplina, estudaremos apenas os comandos em lote do Linux, mas os princípios da funcionalidade são os
mesmos do Command prompt ou do PowerShell dos sistemas Microsoft. Por serem facilmente agendados para
execução em horas pré-de�nidas através do crontab, os shell scripts são usados para construções de ferramentas
indispensáveis aos administradores de sistemas Unix. 
Destacamos ainda que vamos mostrar o caminho, mas seria quase impossível a�rmar que veremos todos os
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/16
comandos possíveis em bash. 
Vamos abordar algumas ações comuns no dia a dia dos administradores de rede e de sistemas linux. É um bom
começo. 
Ao longo de sua trajetória pro�ssional, muitos problemas aparecerão. Para cada um deles será exigido um pouco de
conceituação e muita dedicação e esforço na busca pela melhor solução.
PRINCIPAIS RAZÕES PARA SE UTILIZAR SHELL SCRIPTS
Dentre as principais razões para se utilizar shell scripts, podem ser citadas: 
Simplicidade
Por ser uma linguagem de alto
nível, é possível expressar
operações complexas de forma
simples.
Portabilidade
Por ser universal entre sistemas
Unix, existe uma grande chance de
um shell script escrito para um
sistema ser transferido para outro
sem necessidade de alterações.
Facilidade de desenvolvimento
Pode-se desenvolver um shell
script poderoso e útil em pouco
tempo.
Recursos
Utilização de poucos recursos por
necessitar apenas de linhas de
comandos textuais.
Controle
Maior controle sobre os arquivos e
o sistema operacional.
Programação Script
O conhecimento básico de programação script (glossário) é essencial para quem deseja tornar-se um administrador de
sistemas. 
Durante o processo de boot, uma máquina Linux executa os shell scripts em /etc/rc.d para con�gurar o sistema e os
serviços. 
Uma compreensão detalhada de tais scripts de inicialização é importante para analisar o comportamento de um
sistema e, possivelmente, modi�cá-lo. 
Scripts VERSUS Linguagens Compiladas
PREPARANDO O AMBIENTE PARA A DISCIPLINA
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/16
Para o ambiente de trabalho da disciplina, propomos o uso da
distribuição Fedora 12, que pode ser instalada diretamente nas
estações do laboratório ou utilizada em máquinas virtuais. 
Para a virtualização, propomos o uso do software free Oracle VM
VirtualBox. 
Não há, necessariamente, obrigação de uso desses produtos. A
proposta é tão somente por sua adaptação ao per�l de hardware
padrão da maior parte dos computadores em uso atualmente.
Outra vantagem é que o arquivo de disco virtual não é tão grande
e permiteque você copie o arquivo para uso em mais de uma
estação. 
A única imposição é que o SO possua o interpretador de
comandos “bash”.
 
ORACLE VM VIRTUALBOX
Vamos a um passo a passo utilizando o VirtualBox (glossário) e instalando o Fedora 12 (glossário).
 
Criando uma nova máquina virtual 
 
Abra o Virtual Box e clique em NOVO (ícone no topo à esquerda). 
 
 
 
Na primeira janela, digite o nome da máquina virtual e selecione o SO. 
 
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/16
 
 
Clique em próximo e selecione a quantidade de memória RAM da máquina virtual. 
 
 
De�nindo o disco virtual 
 
O próximo passo é de�nir o disco virtual. Você tem a opção de de�ni-lo, usando um disco existente ou criar outro disco. 
 
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/16
 
 
Por padrão, os discos virtuais do VirtualBox são, na verdade, arquivos com extensão “.VDI”.
Para a opção de usar disco existente, é possível “ler” discos virtuais criados em outros virtualizadores, como VHD do
VMWare ou VHDX do 
Hyper-V. 
Caso vá criar um novo disco, selecione o tamanho (para o Fedora 12 um disco de 10Gb é su�ciente) e de�na se ele terá
tamanho �xo ou dinamicamente alocado. 
Com tamanho �xo, já será criado um arquivo com 10Gb. No dinamicamente alocado, o arquivo começa “zerado” e vai
crescendo à medida que gravamos dados no HD virtual. 
O primeiro caso é ligeiramente mais rápido. Entretanto, o segundo é muito mais utilizado. 
   
 
 
Pronto. A máquina está criada, mas temos ainda bastante
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/16
trabalho pela frente. 
 
 
 
A máquina ainda está desligada como um hardware que acabou de ser montado. Vamos, então, à instalação do SO.
 
Ajustes de con�gurações
Antes de ligar a máquina, vamos ajustar as con�gurações: 
Selecione a máquina e clique em Con�gurações. 
Na opção Geral – Avançado, marque as opções de Bi-direcional para Área de transferência compartilhada e Arrastar e
Soltar. 
Assim é possível copiar texto do Windows e colar no Linux. Para programação, facilita muito o trabalho. 
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/16
Em uma máquina física, seria necessário encontrar o DVD de instalação para prosseguir. Na máquina virtual, vamos
“apontar” o DVD virtual para o arquivo ISO. 
Selecione Armazenamento – Controladora SATA e clique no ícone de um DVD com “+”. 
Clique em Escolher disco. 
Indique onde se encontra o arquivo. 
 
Antes de ligar a máquina, vamos aproveitar e con�gurar a
rede.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/16
A interface virtual de rede pode ser ajustada de diversas formas. Vamos con�gurar no modo “Bridge” e associá-la à sua
interface física ativa (normalmente Ethernet, a cabo, ou Wi-�, sem �o). 
É possível alterar essa associação a qualquer momento. O problema é que em algumas versões do VirtualBox é
necessário desligar a máquina para acessar o menu de rede. 
 
A máquina virtual está con�gurada, vamos à instalação do
Linux.
Selecione a sua máquina e clique em Iniciar. Aparecerá, então, a tela semelhante a que teríamos em uma instalação do
Linux numa máquina física. 
A sequência de opções de instalação varia bastante para cada distribuição Linux. 
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 11/16
Nessa fase, é importante destacar alguns aspectos: 
Para liberar a seta do mouse de dentro da janela virtual,
clique na tecla CRTL da direita; 
Se você clicar CRTL+ALT+DEL, o comando será recebido
pelo Windows. Para enviar um CRTL+ALT+DEL à máquina
virtual, clique CTRL da direita+DEL.
Após instalado, você já pode trabalhar com o novo SO. 
A exibição da nova janela pode ser em tela cheia, em janela ou no modo Seamless (mesclado com o Windows). Para
escolher outro modo, selecione Visualizar e teste as opções. 
 
 
 
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 12/16
Veja como �ca o Fedora12 sobre o Windows 10 em modo
Seamless.
Meu primeiro script ou Alô Mundo. 
Construindo o primeiro script. 
Criar um arquivo script1.sh. 
Na interface grá�ca, abra o Gerenciador de Arquivos, selecione o diretório (recomendamos um diretório dentro de
/home, por exemplo /home/scripts). 
Dentro do diretório, selecione Novo > Documento de Texto. 
No Terminal, digite: 
 
Para executar o script digite: 
 
 
 
Funcionou? Parabéns, esse foi o primeiro script.
Mensagem de erro? 
Reveja o código fonte e veri�que se o usuário possui direito de execução no arquivo. Para isso, digite: 
 
 
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 13/16
 
Para atribuir o direito de execução, digite: 
 
 
 
Tente de novo, agora deve funcionar.
LINHA DE APRENDIZAGEM
Antes de encerrarmos, cabe uma discussão interessante. 
A linha de aprendizagem mais comum vai do mais simples para o mais complexo. 
Ninguém aprende a andar de bicicleta sendo largado pela primeira vez para descer uma ladeira íngreme. Primeiro
usamos as rodinhas, depois uma bicicleta maior, na grama e em terreno plano, depois as curvas, maior velocidade etc.
E anos depois alguns loucos praticam downhill, que é aquela modalidade de mountain bike que consiste em descer o
mais rapidamente possível um percurso! 
Da mesma forma, ao longo desta disciplina, alguns alunos ganharão �uência para usar apenas o terminal, enquanto
outros já possuem essa capacidade. 
Para iniciantes, é fortemente recomendado que utilizem a interface grá�ca Gnome ou KDE ou qualquer outra à sua
escolha. 
O foco de nossa disciplina é a programação para comandos bash e não o uso exclusivo do terminal. 
Nas próximas aulas vamos simpli�car as descrições, destacando novos comandos, mas omitindo procedimentos de
aulas passadas.
Ficou com dúvidas? Volte e comece de novo. Esta aula é
fundamental para prosseguir na disciplina.
EXERCÍCIOS
Para �nalizar, responda as questões a seguir: 
1. Sobre Shell script é correto a�rmar que:
A) Shell script é uma linguagem de programação interpretada usada em vários sistemas operacionais;
B) Os programas em Shell script necessitam ser compilados;
C) Um Script que utilize o interpretador bash pode rodar em qualquer dispositivo;
D) O comando “echo teste” produz um som no alto falante do sistema;
E) Os arquivos de um Shell script possuem extensão “.EXE”.
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 14/16
2. Assinale a alternativa INCORRETA:
A) Arquivos de lote reúnem diversos comandos do sistema;
B) Os arquivos de lote (batch) do Windows são também exemplos de shell scripts;
C) Em um terminal bash, é possível digitar uma sequência de comandos separados por ponto e vírgula;
D) Programas .EXE são scripts interpretados;
E) Além do bash, o Linux possui outros interpretadores de comando com o sh e ash.
Justi�cativa
3. Entre as características abaixo, selecione aquela que não é uma vantagem ao se utilizar shell scripts:
A) Portabilidade. Por ser universal entre sistemas Unix, existe uma grande chance de um shell script escrito para um sistema
ser transferido para outro sem necessidade de alterações;
B) Facilidade de desenvolvimento. Pode-se desenvolver um shell script poderoso e útil em pouco tempo;
C) Performance – shell scripts ocupam muitos recursos do sistema por exigirem muito processamento;D) Recursos. Utilização de poucos recursos por necessitar apenas de linhas de comandos textuais;
E) Simplicidade. Por ser uma linguagem de alto nível, é possível expressar operações complexas de forma e simples.
Justi�cativa
4. Tais programas devem ser traduzidos para um código objeto (por intermédio de um compilador) e posteriormente
ligados a funções em bibliotecas (por intermédio de um linkeditor) a �m de se obter um programa executável. Os
programas executáveis podem ser executados diretamente pelo hardware do computador. 
Assinale a alternativa incorreta:
A) A maioria dos programas, notadamente os comerciais, são escritos em linguagens compiladas;
B) Programas compilados devem ser traduzidos para um código objeto (por intermédio de um compilador);
C) Um programa compilado só funciona na máquina onde esteja instalada a sua biblioteca;
D) Os programas executáveis podem ser executados diretamente pelo hardware do computador;
E) A grande vantagem na utilização de programas escritos em linguagens compiladas é a performance que se obtém.
Justi�cativa
5. Assinale a a�rmativa INCORRETA:
A) Linguagens scripts geralmente são interpretadas;
B) O Shell Script não pode ser reutilizado em outro servidor;
C) Gerenciar tarefas simples e repetitivas é característica da administração de sistemas;
D) Com Shell Script, as instruções são buscadas uma após outra a �m de serem executadas;
E) Uma grande vantagem na utilização de scripts é sua simplicidade.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 15/16
Justi�cativa
Glossário
PROGRAMAÇÃO SCRIPT
A programação script não é difícil de dominar, pois scripts podem ser construídos em pequenas seções, existindo apenas um
conjunto relativamente pequeno de operadores especí�cos e opções para aprender. 
A sintaxe é simples e direta, semelhante à execução de forma encadeada de utilitários na linha de comando, e há apenas algumas
regras que regem a sua utilização.
VIRTUALBOX
Download do Virtual Box: <https://www.virtualbox.org/wiki/Downloads (https://www.virtualbox.org/wiki/Downloads)> 
O processo de instalação é absolutamente simples. 
Fique atento, pois é necessário autorizar o software a acessar as interfaces de redes. Alguns sistemas de �rewall e de antivírus
podem identi�cá-lo como um programa irregular.
VIRTUALBOX
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 16/16
Download do Fedora 
Baixe um arquivo ISO, pois ele permite gerar um DVD de instalação ou ser montado pelo software de virtualização. 
A versão 12 pode ser encontrada em: 
<https://archives.fedoraproject.org 
/pub/archive/fedora/linux/releases/12/Fedora/i386/iso/
(https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/12/Fedora/i386/iso/)> 
O link para o DVD é Fedora-12-i386-DVD.iso
Programação para servidores
Aula 2
Redes de Computadores – DANIEL RIBEIRO MATOS
Fortaleza, 2017.1
Importante!
● O Shell script remete à filosofia clássica do 
Unix de quebrar projetos complexos em tarefas 
mais simples, concatenadas entre 
componentes e utilitários[1]
1 - Advanced Bash Scripting Gide – tldp.org
Diferentes Shells
● Existem diversos shells para Unix
– Bash, TCSH, CSH, Korn Shell, etc
● Bash (Bourne-Again shell) é praticamente um 
padrão para shell script em Unix
A maioria dos scripts mais simples funciona em qualquer 
shell
Exemplo de script
● Em geral, um script é apenas uma sequência 
de comandos digitados em um arquivo
# Limpeza de Logs
# Executar como root
cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
echo "Arquivos de Log apagados!"
A vantagem de por os comandos em um script vai além de não ter que redigitar todos 
os comandos um a um. O script se torna um programa, um utilitário e ele pode ser 
facilmente modificado ou customizado para uma aplicação particular
Uma versão melhorada
Você irá descobrir constantemente maneiras 
de melhorar scripts escritos anteriormente
#!/bin/bash
● A primeira linha de um script, inicia com o 
caractere #, que indica comentário, porém a 
combinação #! é um marcador de tipo de 
arquivo 
– através dessa combinação, o SO sabe que o arquivo é um 
script e não um arquivo texto comum.
● Em seguida o interpretador do script
– /bin/bash
● Se o script consiste somente em uma 
sequência de comandos genérica (não usa 
nenhum recurso específico do shell), a 
primeira linha pode ser omitida.
Executando um script
Executando um script
● Pode-se utilizar:
– sh nome_do_script
● sh aponta para o bash em sistemas Linux
– bash nome_do_script
● Ou digitar diretamente o nome do script:
– ./nome_do_script
– nome_do_script
● Se o script estiver no PATH
Executando um script
● Para executar um script diretamente, o arquivo 
do script precisa ter permissão de execução
– Para dar permissão de execução, utiliza-se o chmod no 
Linux
– chmod 775 nome_do_script ou:
– chmod +x nome_do_script
Exercício:
Escreva um script que, quando executado, 
informe a data e hora, liste os usuários 
logados e diga há quanto tempo o sistema 
está ligado (uptime). O Script então, salva 
esta informação em um LOG
Variáveis
● Uma variável é um rótulo (um nome), atribuído 
a determinados dados na memória
● Exemplo:
– Em um script, ao invés de sempre chamar o comando date 
para verificar a data de hoje, podemos criar uma variável 
data que irá guardar o valor da data atual e utilizada 
sempre que necessário (assim o comando date só é 
chamado uma vez)
Variáveis
● Declarar variáveis em shell é simples, basta digitar um nome para a variável 
e lhe atribuir um valor:
variavel_x=10
variavel_y=”Agora sei shell”
– Para declarar strings, sempre use aspas duplas, ou a variável assumirá apenas o valor da primeira 
palavra:
variavel_y=Agora sei shell
irá guardar “Agora” em variável_y e tentará executar o comando “sei shell”
● Variáveis sempre começam com uma letra ou um “_”, outros caracteres ou 
números não são permitidos no início
● Não podem haver espaços entre a variável e o sinal de atribuição
– VariavelA=10 e não: VariavelA = 10
● Para utilizar uma variável, basta chamá-la com o 
caractere $ na frente:
– echo $variavel_x
– echo $variavel_y
● Para limpar o valor de uma variável:
– variavel=
● As variáveis não tem tipo (tudo é string)
– Podem ser realizadas operações aritméticas com variáveis 
numéricas
● Para uma variável receber o valor de um 
comando, é preciso utilizar alguns caracteres 
especiais:
data=date
– O comando acima, fará com que a variável data receba o 
valor “date” e não o resultado da execução do comando 
date
● Existem duas maneiras de executar um 
comando no meio de uma linha em um script:
– data = $(date)
– data=`date`
● Atenção, é o acento crase e não as aspas simples
Refaça o exercício anterior utilizando 
variáveis
Argumentos
Argumentos
● Argumentos servem para passar opções para scripts. 
● São muito úteis para deixar seus scripts o mais 
genérico possível e selecionar as opções através de 
argumentos
– Por exemplo, ao invés de um script apagar arquivos temporários em 
um determinado diretório, contendo dentro do script:
rm /tmp/files
podemos passar o diretório como argumento para o script:
./apaga_temporarios /tmp/files
– Assim eu posso utilizar esse script para apagar arquivos temporários 
de qualquer diretório, basta passar como argumento
Argumentos
● Argumentos podem ser passados para scripts 
pela linha de comando, eles são 
automaticamente salvos nas variáveis:
– $0, $1, $2… (onde 0 é o nome do próprio script, $1 o 
primeiro argumento, 2 é o segundo e assim sucessivamente)
● Exemplo:– ./apaga_temporarios /tmp/files /var/tmp/
dentro do script, o primeiro argumento pode ser acessado 
como $0 e o segundo como $1
Escreva um script que mostra na tela o nome 
do script executado e os argumentos que 
recebe (até 3 argumentos)
Faça com que o script mostre todos os 
argumentos na mesma linha, separados por 
vírgula:
./teste.sh, arg1, arg2, arg3
Agora modifique para que a saída seja:
Variável $0: ./teste.sh
Variável $1: arg1
Variável $2: arg2
Variável $3: arg3
● Como o caractere $ é um caractere especial, para que 
ele seja exibido na tela, é preciso utilizar o caractere de 
escape “\”. 
● Esse caractere diz ao shell que o próximo caractere é 
texto, e não um caractere especial, assim ele não tenta 
interpretá-lo
● Se você por uma string dentro de aspas simples, o shell 
não irá interpretar nenhum caractere especial:
echo ‘variavel $0’ $0
– Exibe:
variavel $0 valor_da_variavel
● As aspas duplas “ “ agrupam o texto em uma 
mesma string, mas o shell irá interpretar todos 
os caracteres especiais dentro das aspas, a não 
ser que um caractere de escape o diga para 
não fazê-lo:
X=”A variavel \$Y é igual a: $Y”
● Irá exibir:
A variavel $Y é igual a: valor_de_y
Expressões condicionais
Expressões condicionais
● Para executar um bloco de código, dependendo se 
uma variável ou resultado de um comando possui 
determinado valor, utiliza-se o construtor if/then
– Esse construtor testa se a saída do comando é 0 (0 significa sucesso), 
e caso afirmativo, executa o bloco após o then
● De modo geral, a sintaxe seria:
if [ condição ] 
then
código para verdadeiro
else
código para falso
fi
● De uma maneira mais geral:
if [ condicao1 ]
then
commando1
commando2
commando3
elif [ condicao2 ]
then
command4
command5
eles
comando_default
fi
test
● Os colchetes [ ] no comando if, na verdade são 
uma chamada ao comando test
– man test
● O test é utilizado para avaliar expressões e 
trabalhar com arquivos
– Podemos fazer um if para verificar se um arquivo existe, 
por exemplo, caso contrário ele deve ser criado
Operandos de arquivos do comando test
● -e : arquivo existe
● -f : é um arquivo regular (não é diretório nem dispositivo)
● -s : não tem tamanho zero
● -d : é um diretório
● -b : é um dispositivo de bloco
● -c : é um dispositivo de caractere
● -r : tem permissão de leitura
● -w : tem permissão de escrita
● -x : tem permissão de execução
Exemplo: 
if [ -e /tmp/teste ]
then
echo “arquivo existe”
else 
touch /tmp/teste
echo “arquivo criado”
fi 
Operadores de comparação numéricos
● -eq : igual
● -ne : diferente
● -gt : maior que
● -ge : maior ou igual
● -lt : menor que
● -le : menor ou igual
Exemplo: 
if [ $x -gt 0 ]
then
echo “Variavel X é positiva”
elif [ $x -eq 0 ]
 echo “Variavel X é zero”
else 
echo “Variavel X é negativa”
fi 
Operadores de Comparação de strings
● = igual
● == igual (mesmo que =)
● != diferente
● < menor que (em ordem alfabética ASCII)
● > maior que (em ordem alfabética ASCII)
● -z string é nula (tem tamanho zero)
● -n string não é nula
Exemplo: 
if [ $x = “teste” ]
then
echo “X = teste”
fi 
Atividade 1
● Escreva um script que:
– Teste se um arquivo existe (este arquivo deve ser passado 
como parâmetro e guardado na variável ARQUIVO)
– Se o arquivo não existir, escrever no terminal 
“arquivo nome_do_arquivo não existe” 
e o arquivo deve ser criado
– Se existir, escrever no terminal 
“arquivo nome_do_arquivo existe” 
e verificar se a quantidade de linhas do arquivo é maior ou 
igual a 2, exibir no terminal se é ou não maior que 2.
Dica, para saber a quantidade de linhas de um arquivo, utiliza-se o comando 
“wc -l arquivo”, porém o resultado do wc mostra além da quantidade de 
linhas, o nome do arquivo. Para que ele resulte apenas na quantidade de 
linhas usamos o operador pipe “|” junto com o comando “cat”
cat arquivo | wc -l
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/13
Programação para
Servidores
Aula 2 - Programação Script 1 – Variáveis e
testes
INTRODUÇÃO
Na aula 2, vamos começar a construir os primeiros scripts. Inicialmente com reduzida complexidade e depois
apresentaremos os conceitos de variáveis, sua simbologia e sintaxe.
Veremos também os argumentos ou, melhor, os valores enviados ao script. Finalizaremos com as estruturas de
decisão if / then / else / � (sim, termina com � – if ao contrário) e case, que termina com esac.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/13
OBJETIVOS
Explicar a substituição de variáveis em shell script;
Identi�car os tipos de variáveis especiais e as formas de proteção de variáveis com aspas;
Identi�car os mecanismos de testes em shell script;
Aplicar as estruturas de decisão if/else.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/13
VARIÁVEIS
Durante seu curso, você já deve ter ouvido o termo “variável” diversas vezes, mas você saberia explicar o conceito de
variável?
Variável é a forma que as linguagens de programação utilizam para representar dados.
Uma variável nada mais é do que um rótulo, um nome atribuído a uma posição ou conjunto de posições na memória do
computador contendo um item de dados. Cada variável possui um valor, que representa a informação que foi atribuída
a ela.
Compreendeu? Observe a seguinte analogia:
Imagine uma posição na memória do computador como um pote.
Agora, imagine que você precisa do conteúdo de um determinado pote. Mas, como são muitos potes, como você
escolherá o certo?
Neste exemplo, a variável “comprimidos” poderia ter como valor “aspirina”.
Em shell script, o nome de uma variável começa sempre por uma letra ou por um sublinhado, e pode conter qualquer
quantidade de letras, dígitos e/ou sublinhados.
O conteúdo de uma variável é armazenado como uma string e não há limite para a quantidade de caracteres que ela
pode conter.
A atribuição de valores a uma variável é feita escrevendo-se o nome da variável seguido imediatamente do caractere =
e o valor a ser atribuído, sem qualquer espaço entre eles.
Para atribuir uma variável com valor que contenha espaços, o valor deverá ser colocado entre aspas.
Veja alguns exemplos de atribuição de valores a variáveis:
Para obter o valor de uma variável, utiliza-se o caractere $ precedendo seu nome. Por exemplo:
Para limpar o valor de uma variável basta fazer uma atribuição nula. Por exemplo:
Ao contrário de muitas linguagens de programação, o shell não separa suas variáveis por tipo (glossário). Em shell
script, as variáveis são sequências de caracteres (strings), mas, dependendo do contexto, podem ser realizadas
operações aritméticas sobre as variáveis.
ARGUMENTOS
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/13
Os argumentos são passados para o script a partir da linha de comando por intermédio das variáveis.
Quando executamos um script como o exemplo a seguir, o servidor1, servidor2.com e 5 são três parâmetros passados
ao script.
Observe outro exemplo:
Depois de 9, os argumentos devem ser colocados entre chaves. Por exemplo:
PROTEÇÃO COM ASPAS
Proteção com aspas (quoting) é a forma utilizada para informar ao shell como interpretar os dados passados.
ESCAPE COM BARRA INVERTIDA
Preceder um caractere com uma barra invertida (\) diz ao shell para tratar literalmente o caractere.
ASPAS SIMPLES
Aspas simples ('......') forçam o shell a tratar literalmente tudo o que estiver entre o par de aspas.
Não é possível encaixar aspas simples dentro de uma string protegida por aspas simples, pois nema barra invertida é
especial dentro de aspas simples.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/13
ASPAS DUPLAS
Aspas duplas ("......") agrupam o texto como uma única string, porém o shell processa caracteres de escape, variáveis,
substituição de comandos etc.
ESTRUTURA DE DECISÃO - IF
O construtor if/then testa se a saída do comando anterior é 0 (em UNIX, 0 signi�ca sucesso) e, em caso a�rmativo,
executa um ou mais comandos.
Em versões mais recentes do shell, foi introduzido o comando [[ ... ]], que estendeu os comandos de teste realizando
comparações de uma forma mais familiar para os programadores de outras linguagens.
É comum esbarrar na sintaxe de um comando, o foco é o problema que se pretende resolver.
Após de�nir a lógica é que testaremos a sintaxe.
Vamos começar com um problema simples:
Comparar duas variáveis “a” e “b”;
Se “a” for maior, escrever a mensagem “a é maior que b”;
Se “b” for maior, a mensagem é “b é maior que a”.
Em pseudocódigo teríamos:
Faltou veri�car se são iguais. Para isso, poderíamos combinar outro SE para esse teste.
Num script em bash teríamos:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/13
Aproveite e teste este código criando o script aula2-1.sh.
Vamos, analisar mais um script (os comentários vem
depois de #):
Em estruturas de decisão, comparamos valores simples ou compostos e podemos ter diversas soluções. No caso
acima, são 3 possibilidades.
Melhorando esse código, podemos resolver aquele problema de testar se a e b são iguais com “elif”.
Continue testando...
Mas esse script ainda não atende ao principal propósito de
um script. Então, por que construir um para comparar 3 e
5?
Usamos esse exemplo apenas para demonstrar o uso dos comandos.
Scripts são construídos para soluções em qualquer caso. Ainda, nesse exemplo, poderíamos generalizar a solução
usando argumentos passados ao script.
Veja o próximo script:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/13
Para que este script funcione a chamada deveria ser:
Onde 5 é o primeiro argumento ($1) e 3 é o segundo argumento ($2).
Agora temos um script capaz de comparar dois valores quaisquer.
Vamos lá, teste este script também. Se restaram dúvidas,
repita ou use os fóruns para discutir o assunto.
O construtor if/then pode testar a saída de qualquer comando, não se limitando apenas a testes entre colchetes.
Na prática, a resposta da estrutura de decisão será sempre verdadeiro ou falso.
De uma forma mais ampla, a estrutura do construtor if/then pode ser:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/13
OPERADORES DE TESTE EM ARQUIVOS
Veja alguns operadores para teste em arquivos:
Observe um exemplo da utilização do operador –f:
ESTRUTURA DE DECISÃO COM CASE
Se for preciso veri�car o valor de uma variável dentre muitos, pode ser utilizada uma série de encadeamento de testes
if e elif. Porém, o shell possui a construção case que pode ser utilizada com muito mais facilidade para o casamento
de padrões.
Sua sintaxe é:
Exemplo da utilização do case:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/13
ATIVIDADE
Você já deve ter percebido que, ao longo de nossas aulas, algumas tarefas simples serão repetitivas.
Uma delas é que a cada exemplo precisamos criar um novo script, alterar suas propriedades com “chmod 777 nome-
script.sh” e inserir a linha “#!/bin/bash” no topo do script para iniciar o trabalho.
Sua tarefa é criar um script novo.sh que realize as tarefas acima com uma chamada do tipo:
Onde script.sh é o arquivo a ser criado.
Resposta Correta
1. Uma variável em Shell Script:
Deve ser ter seu tipo declarado, como “int a”.
Não pode ser rede�nida ao longo do Script.
Tem seu valor atribuído diretamente como em “x=5”.
Tem seu valor atribuído como em “$x=5”.
As variáveis sempre recebem $ na frente, seja na atribuição de valores seja nas operações com a variável.
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/13
2. Ao chamar um script com o comando:
As variáveis $0 e $ 2 serão:
servidor1 e servidor
script.sh e .com
servidor1 e .com
script.sh e servidor2.com
servidor 1 e 5
Justi�cativa
3. O comando ./script.sh 4 5 enviado a script.sh cujo código está abaixo:
Apresenta como resultado:
b é maior que a
a é maior que b
b é menor que a
a é menor que b
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 11/13
erro pois $1 não foi de�nido
Justi�cativa
4. No Script abaixo:
Qual a mensagem de resposta caso a chamada fosse ./script.sh 20 20?
a igual a b
a maior que b
a menor que b
Nenhuma das condições
b maior que a
Justi�cativa
5. O script1.sh tem o conteúdo:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 12/13
O script2.sh tem o conteúdo:
O comando ./script1.sh apresenta como resposta na tela:
Preto e Branco
Rubro-Negro
Fluminense Tricolor
Vasco Campeão
Nenhuma resposta
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 13/13
Glossário
TIPO
Algumas linguagens separam suas variáveis por tipo, como double, int e �oat utilizados para guardar valores numerais.
Programação para servidores
Aula 3
Redes de Computadores – DANIEL RIBEIRO MATOS
Fortaleza, 2017.1
Operadores
Operadores
● O principal operador em shell script é o 
operador de atribuição (=). 
● Ele atribui um valor a uma variável, porém o 
faz interpretando tudo o que vem a direita do 
= como uma string
a=5+3
armazena a string "5+3" na variável a. Para efetuar a 
operação matemática deve ser utilizado o comando let:
let a=5+3
que neste caso irá efetuar a operação de soma e armazenar 
o resultado "8" na variável a.
Os interpretadores de comandos mais atuais trabalham com variáveis inteiras de 64 bits,
enquanto números em ponto flutuante são tratados como strings
Operadores
● Operadores matemáticos:
+ soma
- subtração
* multiplicação
 / divisão
** exponenciação
% módulo
+= incremento por uma constante
-= decremento por uma constante
*= multiplica por uma constante
/= divide por uma constante
%= módulo por uma constante
Operadores
● Operadores bit a bit:
<< deslocamento a esquerda
<<= deslocamento a esquerda por uma constante
>> deslocamento a direita
>>= deslocamento a direita por uma constante
& "E"
| "OU"
~ negação
^ "OU exclusivo"
https://www.vivaolinux.com.br/artigo/Bitwise-Escovando-os-bits
Operadores
● Operadores booleanos:
! não
&& "E"
|| "OU"
Estruturas de Repetição
Estruturas de Repetição
● Blocos de código que têm sua execução 
repetida enquanto uma determinada condição 
for verdadeira
● For (para)
● While (enquanto)
● Until (até)
FOR
● A estrutura for interage sobre uma lista de 
objetos, executando um bloco de comandos 
para cada objeto. Objetos podem ser qualquer 
coisa que possa ser criada em forma de lista. 
Por exemplo, para executar determinadas 
operações a todos os arquivos que possuam 
extensão ".txt"
for i in *.txt
do
comando_1
comando_2
...
comando_n
done
Outros exemplos
for k in "1 2 3 4 5 6 7 8 9 
10"
do
Comando_1
comando_2
...
comando_n
done
for j in "$var1" "$var2" "$var3" 
"$var4"
do
comando_1
comando_2
...
comando_n
done
Executemos códigos acima (substituindo comando_1 por echo, por exemplo) 
e var1, var2 por variáveis existentes.
Contando com o FOR
max=10
for i in $(seq 2 $max)
do
 echo "$i"
done
● Podemos utilizar o comando seq, para utilizar 
como contador no for
WHILE
O while testa uma condição no início de um laço e 
fica em loop enquanto essa condição for verdadeira. 
Ao contrário do laço for, o while é utilizado em 
situações onde o número de repetições do laço não é 
conhecido de antemão. Sua sintaxe é:
while condição
do
comando_1
comando_2
...
comando_n
done
WHILE - Exemplos
LIMIT=10
a=1
while [ "$a" -le $LIMIT ]
do
echo -n "$a "
let "a+=1"
done
Until
● O until testa por uma condição no início de um 
laço e fica em loop enquanto esta condição for 
falsa (seu funcionamento é o oposto do while). 
Sua sintaxe é:
until condição
do
comando_1
comando_2
...
comando_n
done
until
LIMIT=10
var=0
until [ "$var" -ge $LIMIT ]
do
echo -n "$var "
let "var+=1"
done
CASE
● Se for preciso verificar o valor de uma variável 
dentre muitos, podem ser utilizados uma série de 
encadeamento de testes if e elif. 
● Porém o shell possui a construção case que pode 
ser utilizada com muito mais facilidade para o 
casamento de padrões. Sua sintaxe é:
case "$variavel" in
"$condicao1" )
Comando...
;;
"$condicao2" )
Comando…
;;
esac
Case
arch=$(uname -m)
case "$arch" in
i386 ) 
echo "maquina 80386"
;;
i486 ) 
echo "maquina 80486"
;;
i586 ) 
echo "maquina Pentium"
;;
i686 ) 
echo "maquina Pentium2+"
;;
X86_64 )
Echo "maquina 64 bits"
;;
* ) echo "outro tipo de maquina";;
esac
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/10
Programação para
Servidores
Aula 03: Programação Script 2 - Operadores,
repetições e tomadas de decisões
INTRODUÇÃO
Na aula 3 nossa abordagem �ca um pouco mais complexa e objetiva, pois começamos a trabalhar com operadores e
estruturas de repetição.
Muito do que foi visto em Lógica de Programação se repete agora, só que empregando outra linguagem. Você deve
lembrar que os professores disseram que o importante é a lógica na solução do problema, a linguagem é apenas um
detalhe. Pois é, vamos colocar em prática esses conceitos.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/10
Veremos inicialmente como atribuir valores a variáveis e ainda como realizar operações aritméticas, bem como utilizar
operadores para comparar números, strings e valores lógicos. Vamos �nalizar com as estruturas de repetição for, while
e until.
OBJETIVOS
Identi�car os operadores utilizados em shell script;
Analisar as estruturas de repetições e desvios;
De�nir a melhor estrutura a ser utilizada em cada caso;
Aplicar as estruturas de repetição e tomadas de decisão na construção de scripts.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/10
OPERADORES
O principal operador em shell script é o operador de atribuição (=). Ele atribui um valor a uma variável, porém o faz
interpretando tudo o que vem à direita do = como uma string. Para efetuar a operação matemática sugerida, devemos
utilizar o comando let.
Observe os comandos a seguir:
Fonte:
Os interpretadores de comandos mais atuais trabalham com variáveis inteiras de 64 bits, enquanto números em ponto
�utuante são tratados como strings.
VAMOS TESTAR?
Construa o script aula3-1.sh
Teste e veja o que será exibido. Se não aparecer 8 refaça até funcionar.
Corrigiu o script?
OPERADORES
Agora, veremos os tipos de operadores:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/10
ESTRUTURAS DE REPETIÇÃO
Estruturas de repetição são blocos de código que têm sua execução repetida baseada em valores de variáveis de
controle.
Veremos, a seguir, as estruturas de repetição e exemplos do uso de cada uma delas.
FOR (para)
A estrutura for interage sobre uma lista de objetos, executando um bloco de comandos para cada objeto.
Objetos podem ser qualquer coisa que possa ser criada em forma de lista. Por exemplo, para listar (comando ls) todos
os arquivos de um diretório. Veja, abaixo, a sintaxe básica do for:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/10
Vamos a alguns exemplos:
Tente inclui-los em scripts e veja seu funcionamento, altere os valores, erre e acerte. Não há outra forma de aprender
senão executando.
For - Exemplo 1
For - Exemplo 2
Onde comando_1, comando_2 e comando_3 poderiam realizar ações sobre os arquivos .txt do diretório.
For - Exemplo 3
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/10
Esse script lista os arquivos .sh do diretório do seu script.
For - Exemplo 4
Nesse Script temos os valores das variáveis de teste explícitos no loop:
ACHOU O ÚLTIMO SCRIPT DO EXEMPLO 3 CONFUSO? CONSTRUA
OUTRO SCRIPT QUE LISTE OS ARQUIVOS COM EXTENSÃO.CONF
DENTRO DO DIRETÓRIO /ETC. TENTE RESOLVER O PROBLEMA E OLHE
A RESPOSTA DEPOIS.
Resposta Correta
While (enquanto)
O while testa uma condição no início de um laço e �ca em loop enquanto essa condição for verdadeira.
Ao contrário do laço for, o while é utilizado em situações onde o número de repetições do laço não é conhecido de
antemão.
A lógica do comando é:
Para o correto funcionamento é fundamental que:
• A variável de controle (o x do exemplo) seja inicializada; e 
• A variável de controle seja alterada para que em algum momento a condição deixe de ser verdadeira e o loop
(glossário) se encerre.
Exemplos de utilização do while:
Until (até)
O until testa por uma condição no início de um laço e �ca em loop enquanto essa condição for falsa (seu teste na
variável de controle é o oposto do while).
Sua sintaxe é:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/10
Exemplo de utilização do until:
ATIVIDADE
Utilizando Estruturas de Repetição desenvolva um script que faça uma contagem regressiva de 10 até 1:
• Há o risco de criar um loop in�nito, se sua variável de controle não for alterada. Não se desespere, isso acontece com
todo mundo. Basta digitar CTRL + z, editar o arquivo e recomeçar. 
• Para o script ir mais devagar insira o comando sleep 1, que o programa dá uma parada de 1 segundo.
Não adianta ver apenas a solução, tente realizar o trabalho sozinho.
Resposta Correta
EXERCÍCIOS
1. No Script:
O que aparece como resposta na tela?
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/10
8
Soma = 5+3
Soma = 8
“Soma =” $c
“Soma = “$a +$b
Justi�cativa
2. No Script:
Qual a ação realizada?
Sobrescreve o conteúdo de /etc.
Exibe os arquivos .conf em /etc.
Lista os arquivos no diretório do script.
Exibe os valores inteiros de i, de 0 até o valor de conf.
Não exibe nenhum valor.
Justi�cativa
3. Complete a lacuna no Script abaixo para que ele exiba os inteiros entre 10 e 1:
let n=n-1
gt=gt+1
gt+=1
n=n+1
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/10
$n = gt + 1
Justi�cativa
4. No script abaixo o que será exibido na tela:
10 9 8 7 6 5 4 3 2 1 0
10 9 8 7 6 5 4 3 2 1
a
$a
Nenhuma resposta
Justi�cativa
5. Em relação aos “loops” while e until, podemos dizer que:
No while não há possibilidade de ocorrer loop in�nito.
Until mantém o loop por uma sequência de valores pré-de�nidos.
While �ca em loop até a variável decontrole tornar-se falsa.
Until e while são equivalentes.
A condição do until não necessita de variável de controle.
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/10
Glossário
JÁ OUVIU FALAR DE LOOP INFINITO?
Basta esquecer de incrementar ou decrementar a variável de controle.
Aconteceu com você? Não se preocupe, digite CTRL + z para parar o script, edite o código fonte e continue tentando.
Vamos agora à sintaxe:
Programação para servidores
Redes de Computadores – DANIEL RIBEIRO MATOS
Fortaleza, 2017.1
READ
● O comando read lê uma informação 
digitada pelo usuário
● Exemplo:
echo “Digite um valor:”
read valor
– O que o usuário digitar até que aperte a tecla 
“enter” será salvo na varável $valor
Prática: faça o script acima e adicione uma linha para que 
ele mostre o que o usuário digitou
Agenda Telefônica em Shell Script
Agenda Telefônica
● Vamos criar um script que controla 
um arquivo de texto com uma 
agenda telefônica:
Zé dos pão (85) 3212-2828
Chica Costureira (85) 98788-0001
Manoel dos Peba (88) 99999-0909
● O script deve apresentar um menu, 
com as opções de procurar por um 
nome e adicionar uma nova entrada 
a lista
– Mais adiante podemos incluir mais opções, 
como apagar ou alterar um registro
– Por hora, vamos apenas aos mais simples
Tratando as opções
● Como saber qual opção o usuário 
digitou?
● Pode ser feito usando o “if”:
if [ $opcao -eq 1 ]
then
código para procurar uma entrada
elif [ $opcao -eq 2 ]
then
código para adicionar uma nova entrada
f
● Mas se eu tiver muitas opções:
if [ $opcao -eq 1 ]
then
código para opção 1
elif [ $opcao -eq 2 ]
then
código para opção 2
elif [ $opcao -eq 3 ]
then
código para opção 3
elif [ $opcao -eq 4 ]
código para opção 4
f
O uso do “case” é mais adequado para avaliar opções 
conhecidas
case $opcao in
1) código para opção 1 ;;
2) código para opção 2 ;;
3) código para opção 3 ;;
4) código para opção 4 ;;
*) echo “Você não digitou opção válida ;;
esac
● Voltando ao script, a opção 1 irá 
procurar um telefone, dado um nome 
ou parte de um nome
● O primeiro passo é ler o nome ou parte 
no nome que será procurado:
echo “Digite o nome ou parte do nome”
read busca
● Agora para procurar a informação 
digitada no arquivo de texto, precisamos 
utilizar o grep, que é o comando no 
Linux que procura padrões em arquivos:
grep padrão arquivo
exemplo:
grep daniel /var/lista_admin
● Irá buscar as linhas que possuem “daniel” no arquivo 
/var/lista_admin
Prática: criem arquivos de texto ou pesquisem em arquivos já 
existentes usando o grep
● Nós precisamos defnir qual será o arquivo 
da agenda telefônica de nosso script.
● Podemos fazer isto de duas formas, no 
próprio script, por exemplo:
AGENDA=/home/aluno/agenda.txt
● Ou podemos passar o arquivo da agenda 
como parâmetro para o script:
./agenda.sh /home/aluno/agenda.txt
● Façamos da segunda forma, assim 
nós podemos gerenciar mais de uma 
agenda com o mesmo script
● O primeiro passo do script agora é 
checar se o usuário digitou um 
argumento e se esse argumento é um 
arquivo
if [ $# -ne 1 ] 
then
echo “Você deve chamar o script assim:”
echo “$0 arquivo_de_agenda”
exit -1
f
● Com este código, o que acontece se o 
usuário digitar um diretório como 
argumento:
./agenda.sh /home
Assim, além de testar se o usuário digitou um 
argumento, precisamos testar se esse argumento é 
realmente um arquivo.
● Poderíamos fazer isto com um novo if:
AGENDA=$1
if [ ! -f $AGENDA ]
then 
echo “Você não digitou um arquivo válido”
exit -1
f
● Ou podemos por a condição de testar o arquivo, no else do if anterior:
AGENDA=$1 
if [ $# -ne 1 ] 
then
echo “Você deve chamar o script assim:”
echo “$0 arquivo_de_agenda”
exit -1
else 
if [ ! -f $AGENDA ] 
then
echo “Você não digitou um arquivo válido”
exit -1
f
f
 
● Voltando agora para a implementação 
da opção de busca na agenda:
case $opcao in
1) read $busca
echo “Digite o nome ou parte do nome”
grep $busca $AGENDA
;;
● E na opção de incluir um novo nome, vamos 
precisar do operador de redirecionamento “>>”
case $opcao in
(...)
2) echo “Digite a linha a incluir:”
echo “exemplo: Manoel Joaquim \(85\) 3443-3443”
read nova_linha
echo $nova_linha >> $AGENDA
;;
Arquivo: /tmp/agenda.sh Página 1 de 1
AGENDA=$1 
if [ $# -ne 1 ] 
then
 echo “Você deve chamar o script assim:”
 echo “$0 arquivo_de_agenda”
 exit -1
else 
 if [ ! -f $AGENDA ] 
 then
 echo “Você não digitou um arquivo válido”
 exit -1
 fi
fi
 
echo "Bem vindo à Agenda"
echo "Digite a opção desejada:"
echo " 1 - Procurar um telefone"
echo " 2 - Adicionar um telefone"
 
read opcao
 
case $opcao in
 2) echo “Digite a linha a incluir:”
 echo “exemplo: Manoel Joaquim \(85\) 3443-3443”
 read nova_linha
 echo $nova_linha >> $AGENDA
 ;;
esac
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/7
Programação para
Servidores
Aula 04: Comandos 1 - Comandos Internos
INTRODUÇÃO
Esta é a primeira de uma série de 3 aulas sobre comandos shell. Nesta, vamos tratar dos comandos existentes dentro
do próprio bash. Vamos estudar uma série de comandos que nos permitem interagir com o sistema.
Teremos a oportunidade de perceber que alguns comandos possuem relativa complexidade. A solução é testá-los
diretamente no terminal para, em seguida, incorporá-los em scripts com a certeza de seu pleno funcionamento em
ações repetitivas.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/7
OBJETIVOS
Identi�car e utilizar os comandos internos de um shell;
Explicar o desenvolvimento de scripts mais e�cientes utilizando-se os comandos para escrever scripts shell.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/7
COMANDOS
Fonte da Imagem:
O domínio dos comandos de um sistema é indispensável para escrever scripts e�cazes. 
Um comando interno (ou builtin) é um comando contido dentro do shell. 
Comandos são construídos internamente ao shell por razões de desempenho ou por necessidades especí�cas de
acesso direto à informações internas ao shell.
HELP E MAN
A maior parte dos comandos possui quali�cadores, isto é, partículas que rede�nem a execução default do comando. E
cada comando possui detalhes especí�cos. 
Para facilitar podemos usar o help (glossário) ou o man (glossário) para buscar as possibilidades de um comando. 
Vamos tomar como exemplo o comando ls, que lista os diretórios e arquivos.
O complemento - - help exibe todas as opções do comando. 
Assim, o comando:
Teste esta possibilidade para todos os comandos desta e da próxima aula.
COMANDOS DE ENTRADA/SAÍDA
O comando echo imprime na saída padrão uma expressão ou variável.
No item anterior discutimos sobre o - - help, mas, neste caso, comandar echo - -help exibe o texto – help. Para este
caso use man echo. 
O echo utilizado pelo interpretador de comandos é um comando interno. Não confunda com o programa /bin/echo que
tem comportamento similar. 
Para cada comando uma boa medida é aproveitar e construir um script com os comandos. O mesmo script pode
conter vários comandos. 
Vamos lá? Construindo o script aula4.sh.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/7
O comando printf é uma melhoria do comando echo, fornecendo uma saída formatada.
Sua sintaxe é: 
printf formato parâmetros
O formato segue o padrão do comando printf da linguagem C.
Lê um valor a partir de STDIN(por padrão o teclado) e o armazena em uma variável.
Complemente aula4.sh com:
COMANDOS DO SISTEMA DE ARQUIVOS
Exemplo:
Sintaxe: cp origem destino 
 
Exemplo:
Cabe aqui a observação de que no Linux um arquivo não necessita de uma extensão. 
Nesse caso, a cópia de “named.conf” será salva com nome “teste”. Ambos, origem e destino, continuam sendo
arquivos texto.
Exemplo:
Teste as possibilidades como, por exemplo, em:
As opções podem ser combinadas como:
COMANDOS QUE ATUAM SOBRE VARIÁVEIS
COMANDOS QUE AFETAM O COMPORTAMENTO DO SCRIPT
COMANDOS PARA CONTROLE DE JOBS
VAMOS EXERCITAR UM POUCO
Primeiro vamos construir um script com erro. Lembra da aula em que falamos de loop in�nito? 
Crie um script aula4.sh com o conteúdo:
Abra 3 terminais. Sim, é possível. Tanto na interface grá�ca, com janelas paralelas, quanto com terminais acessados
com CTRL+ALT+F3 (ou as outras telas Fx, normalmente com F1 ou F7 você retorna à interface grá�ca). 
No primeiro terminal, execute o programa in�nito.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/7
No segundo terminal digite ps ou top.
Com top, encontramos aula4.sh rodando com PID (glossário) 2713.
Para usar o ps seria necessário detalhar a busca, pois são exibidos todos os processos. Por exemplo:
Em qualquer caso, seria encontrado o mesmo PID.
No terceiro terminal você vai “derrubar” esse processo com:
Provavelmente �caram muitas dúvidas, mas estes assuntos (ps, top, grep ) ainda serão tratados nas aulas seguintes.
OUTROS COMANDOS
ATIVIDADE
Copie cada arquivo com extensão .conf em /etc/ para /home/teste. Renomeie cada arquivo de forma que o novo nome
do arquivo se inicie por um número inteiro sequencial. 
Você pode realizar esta tarefa na linha de comando para cada arquivo ou fazer um script combinando os comandos
para realizar esta tarefa.
EXERCÍCIOS
1. Num script, às vezes, solicitamos que o usuário digite uma senha. Por segurança, seria interessante que os
caracteres não fossem exibidos na tela. Qual o comando mais adequado para realizar esta tarefa?
a) echo “digite a senha”; read senha
b) read -p "digite a senha: " -d'?' senha
c) echo “digite a senha”; read $senha
d) echo “digite a senha”; read –s "senha"
e) read -p "digite a senha: " -n'?' senha
Justi�cativa
2. Para listar todos os arquivos com extensão .conf existente em /etc e suas propriedades o comando mais adequado
é:
a) ls *.conf
b) ls –ax /etc/conf*
c) ls –i /etc/.conf
d) ls –l /etc/conf
e) ls –la /etc/*.conf
Justi�cativa
3. Qual o comando para renomear o arquivo script1.sh para old-script1.sh.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/7
a) rename script1.sh old-script1.sh
b) mv script1.sh old-script1.sh
c) ren script1.sh old-script1.sh
d) rename old-script1.sh script1.sh
e) mv old-script1.sh script1.sh
Justi�cativa
4. O script abaixo contém um erro que o faz permanecer em loop in�nito. 
Qual o código que corrige o erro na linha indicada?
a) x=x+y
b) y=x+1
c) y=y+1
d) x+y=0
e) x+=1
Justi�cativa
5. O comando ps –ax | grep aula4.sh:
a) Localiza as referências à execução de aula4.sh.
b) Exclui o arquivo aula4.sh.
c) Exclui o processo de execução de aula4.sh.
d) Localiza todos os processos exceto aula4.sh.
e) Interrompe o processo de aula4.sh
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/7
Glossário
MAN
Man comando – exibe detalhes da sintaxe do comando.
HELP
Comando -- help – exibe a sintaxe simpli�cada de um comando.
PID
PID é a sigla para Process IDenti�cator (número identi�cador de processo).
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/12
Programação para
Servidores
Aula 5 - Comandos 2 - Comandos externos
INTRODUÇÃO
Nesta aula, vamos trabalhar com aplicativos externos combinados com diretivas do shell. Será possível perceber que é
possível criar uma gama in�nita de scripts com diversas �nalidades para facilitar as tarefas de gerenciamento de um
servidor Linux. Vamos lá, mãos à obra.
OBJETIVOS
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/12
Identi�car os comandos externos de um shell;
Desenvolver scripts mais e�cientes utilizando comandos e estruturas de controle mais complexas.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/12
A possibilidade de utilização de comandos e aplicativos do sistema operacional tornam scripts do shell mais
poderosos. Tal poder vem da união dos comandos do sistema e diretivas do shell com construções simples de
programação. Veremos, a seguir, alguns desses comandos.
Comando básico para listar o conteúdo de um diretório.
Veja alguns parâmetros:
Exibe o conteúdo de um arquivo texto.
Envia o conteúdo do arquivo para a saída padrão (por padrão o monitor).
O parâmetro -n faz com que as linhas do arquivo sejam numeradas.
Com cat –help é possível encontrar alguns complementos interessantes.
Para quem desenvolve scripts, o comando cat –n arquivo é especialmente útil pois exibe o número das linhas do
arquivo e muitos erros de sintaxe exibem mensagens de erro com referência ao número da linha.
Veja os exemplos:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/12
Similar ao cat, porém as linhas do arquivo são mostradas da última para a primeira.
Envia o conteúdo do arquivo para a saída padrão (por padrão o monitor), mas mostra as linhas de trás para frente.
A ordem das linhas é mantida, porém são mostrados do último ao primeiro caractere da linha.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/12
Cópia de arquivos.
Alguns parâmetros:
Alguns parâmetros:
Exemplo:
Cabe aqui a observação de que no Linux um arquivo não necessita de uma extensão.
Nesse caso, a cópia de “named.conf” será salva com nome “teste”. Ambos, origem e destino, continuam sendo
arquivos texto.
Move arquivos. Também utilizado para renomear.
Alguns parâmetros:
Exemplo:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/12
Remove (deleta) arquivos.
Alguns parâmetros:
Remove diretórios vazios.
Cria diretório.
Muda os atributos de arquivos e diretórios.
Permissões de acesso protegem o sistema de arquivos do acesso indevido de pessoas ou programas não autorizados.
Para saber mais sobre isso, leia Direitos de Acesso (glossário).
Cria um link semelhante a um atalho do Windows.
No Shell, podemos ter dois tipos de links: Link simbólico e Hard Link.
Ambos funcionam como atalhos no Windows, a diferença é que um Link Simbólico �ca quebrado quando o arquivo
referenciado é movido. Com Hard Link, o Link se mantém mesmo quando o arquivo é movido.
Exemplo:
Para criar um link simbólico use a opção –s:
date 
Mostra a data e a hora do sistema. Também é utilizado
para acertar a data/hora.
time 
Mostra estatísticas de utilização de tempo do processo
executado como parâmetro.
at 
Programa um aplicativo para executar automaticamente
em determinada data/hora.
sleep 
Suspende a execução por uma dada quantidade de
segundos.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/12
cal 
Mostra um calendário.
hwclock, clock 
Consulta ou acerta a hora no relógio do hardware.
Estudaremos esses comandos em detalhes nas aulas 8, 9 e 10.
Mostra um arquivo em ordem alfabética.Remove linhas duplicadas de um arquivo ordenado.
Envia as primeiras linhas de um arquivo para a saída padrão.
Envia as últimas linhas de um arquivo para a saída padrão.
Quando utilizado com o parâmetro –ƒ, o comando continua mostrando novas linhas que são adicionadas ao arquivo
(útil para monitorar arquivos de log).
Conta a quantidade de linhas, palavras e caracteres em um arquivo.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/12
Nesse exemplo, o arquivo possui 83 linhas, 185 palavras e 1571 caracteres.
Exibe conteúdo de um arquivo numerando suas linhas.
Tem função semelhante a cat –n arquivo.
Observe, abaixo, os comandos para arquivamento:
su 
Executa um programa como um usuário substituto ou
inicia um shell como outro usuário.
free 
Mostra o total de memória RAM e swap utilizada pelo
sistema.
du 
Mostra o total de espaço em disco utilizado
(recursivamente) por arquivos e/ou diretórios.
df 
Mostra a utilização dos discos/partições.
dmesg 
Mostra todas as mensagens emitidas durante o
processo de boot do sistema.
uptime 
Mostra por quanto tempo o sistema está em execução.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/12
uname 
Exibe informações sobre o sistema. 
Vamos lá, teste cada um destes comandos.
ATIVIDADE
Desenvolva um Script que:
Liste os arquivos de /etc;
Exiba a quantidade de memória;
Exiba a ocupação dos discos.
Resposta Correta
1. O comando que exibe a quantidade de memória RAM e de Swap existente e disponível é:
df
du
dmesg
free
Su
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/12
2. O comando que exibe a ocupação do disco é:
df
du
dmesg
free
Su
Justi�cativa
3. O comando que exibe a versão do kernel da estação é:
ver -ax
sys -t
uname -a
kernel -al
type -x
Justi�cativa
4. O comando “wc arquivo” gerou a resposta:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 11/12
Essa resposta signi�ca que:
O arquivo possui 83.187,1590 Bytes.
O arquivo está em execução com PID 83 187 1590.
O arquivo possui 83 linhas, 187 palavras e 1590 caracteres.
O diretório possui 83 diretórios, 187 arquivos e ocupa 1590 KBytes.
O arquivo é um arquivo executável.
Justi�cativa
5. O comando “nl arquivo” equivale a:
Essa resposta signi�ca que:
tail –f arquivo
ls –la arquivo
mv arquivo
uname arquivo
cat –n arquivo
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 12/12
Glossário
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/10
Programação para
Servidores
Aula 6 - Comandos 3 - Substituição,
redirecionamento e manipulação de strings
INTRODUÇÃO
Nesta última aula sobre comandos do sistema, vamos abordar alguns recursos muito interessantes como a
substituição, que se refere à possibilidade de aglutinar comandos complexos sob uma variável.
Estudaremos também redirecionamentos, que são a possibilidade de enviar a saída de um comando como entrada de
outro comando e veremos ainda como manipular strings.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/10
OBJETIVOS
Descrever comandos externos e a captura da sua saída padrão;
Examinar o redirecionamento das entradas e saídas de programas;
Demonstrar a ligação entre saída e entrada de processos;
Explicar a manipulação de strings através do shell.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/10
SUBSTITUIÇÃO DE COMANDOS
A substituição de comandos é utilizada para reatribuir a saída de um comando (ou de múltiplos comandos).
A saída do comando pode ser:
A forma tradicional de se utilizar substituição de comandos é executar o comando entre crases (`...`).
Veja este código, por exemplo:
Ele coloca na variável lista o conteúdo do diretório "/etc".
A substituição de comandos pode gerar mais de um argumento.
Por exemplo:
Quando a substituição de comandos ocorre entre crases, os caracteres newline são preservados. Caso contrário, eles
são removidos.
Vamos exercitar com o trecho de código abaixo:
Crie um script aula6-1.sh para testar algumas substituições.
Vamos lá, teste esse conteúdo.
No exemplo abaixo, foi inserida uma linha para exibir o código fonte do próprio script antes de sua execução:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/10
Ficou um pouco complicado para ler a saída.
Vamos, então, testar posicionando aspas duplas nas variáveis para organizar as saídas.
Agora, a saída parece mais organizada, mas ocupa várias telas.
Caso esse conteúdo necessite ser estudado com mais detalhes, seria interessante que estivesse em um arquivo. E
esse é justamente um dos temas desta aula.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/10
REDIRECIONAMENTO
Para todo processo existem sempre 3 arquivos abertos por padrão:
Esses e quaisquer outros arquivos abertos podem ser redirecionados.
Redirecionamento signi�ca capturar a saída de um arquivo, comando, programa, script ou até mesmo um bloco de
código em um script e o enviar como entrada para outro arquivo, comando, programa ou script.
Cada arquivo aberto recebe um descritor de arquivo.
Os descritores de arquivo para stdin, stdout e stderr são 0, 1 e 2, respectivamente.
Vamos testar esses redirecionamentos.
Crie o script aula6-2.sh e vamos em frente.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 6/10
Primeiramente, observe que os arquivos script.err e script.log são criados automaticamente.
Para testar o resultado:
Veri�que ainda que na linha de comando é possível concatenar comandos separados por “;”.
AGORA VAI UM DESAFIO:
Altere aula6-2 sh para que os arquivos sejam “limpos” antes de uma nova execução.
Podemos ter inúmeras soluções.
Tente realizá-las e somente depois olhe a resposta.
Resposta Correta
PIPE
O pipe ( | ) é um mecanismo especial de redirecionamento utilizado para conectar a saída padrão de um processo à
entrada padrão de outro processo.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 7/10
Veja o código abaixo, por exemplo:
Reúne todos os arquivos com extensão .sh ordenando suas linhas (sort) e retirando as duplicadas (uniq).
O processo que se encontra à esquerda do pipe tem sua saída padrão redirecionada automaticamente para a entrada
padrão do processo que se encontra à direita do pipe.
Esse comando acima, teoricamente, não faz sentido. Misturar e ordenar o conteúdo de arquivos pode criar uma imensa
confusão.
Fonte da Imagem: LINE ICONS / Shuttertock
Suponha que poderíamos ter um diretório com diversos arquivos. Em cada um desses arquivos, há uma listagem de
alunos em uma disciplina. Desejamos obter uma listagem ordenada de todos os alunos estudando em qualquer
disciplina.
Para montar essa lista, seria simples copiar e colar em uma planilha e editar até obter o resultado, não é mesmo?
Ok! E se você tivesse que realizar essa tarefa para 1500 turmas?
Não subestime a capacidade do Shell, a resposta seria imediata com pouco uso de processamento e armazenamento
nos servidores.
ATIVIDADE
Vamos supor que alguém tenha uma dúvida sobre a sintaxe de criação de um site virtual no Apache.
Você se lembra que a palavra chave é “localhost”.O caminho parece ser buscando no arquivo principal de con�guração
do Apache.
Localize, então, dentro de /etc/httpd/conf/httpd.conf, as linhas onde aparece a expressão Virtualhost.
Você tem duas opções: abrir o arquivo de cerca de 1000 linhas e ler cada uma ou usar os recursos facilitadores do
shell.
Vamos lá! Mostre como fazer o trabalho de forma facilitada.
Resposta Correta
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 8/10
EXERCÍCIOS
1. O diretório /home/aula contém 3 arquivos: arq1.sh, arq2.sh e arq3.sh.
O trecho de script abaixo exibe:
arq1.sh 
       arq2.sh 
       arq3.sh
arq1.sh arq2.sh arq3.sh
$lista
ls/home/aula
Nenhuma saída
Justi�cativa
2. O diretório /home/aula contém apenas o arquivo arq1.sh.
O comando KAT não existe.
Ao executar o trecho de script abaixo, qual será o conteúdo de arquivo-erro?
arq1.sh
bash: KAT: comando não encontrado 
arq1.sh
bash: KAT: comando não encontrado
Arquivo-erro
Arquivo vazio
Justi�cativa
3. O arquivo nomes.txt contém diversos nomes de alunos. Desejamos ordenar esses nomes e salvar nova listagem em
nomes_ordenados.txt.
Qual o comando para realizar essa tarefa?
sort nomes.txt nomes_ordenados.txt
uniq nomes.txt nomes_ordenados.txt
sort < nomes.txt > nomes_ordenados.txt
uniq > nomes.txt > nomes_ordenados.txt
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 9/10
sort >> nomes.txt >> nomes ordenados.txt
Justi�cativa
4. Observe o código:
Agora, analise o trecho de script abaixo e marque a opção que apresenta seu retorno.
str="Joao aprendeu shell script com facilidade" 
echo "${str:14:5}"
Aprendeu shell scrip
Aprendeu
Shell script
Nenhuma resposta
Shell
Justi�cativa
5. O diretório /home/alunos possui diversos arquivos .txt com listas de nomes de alunos.
Qual o comando que lê os nomes em todos os arquivos, os ordena, elimina os nomes duplicados e os salva em
resultado.txt?
cat > /home/alunos/*.txt > sort > uniq > resultado.txt
ls /home/alunos/*.txt | sort | uniq > resultado.txt
cat /home/alunos/*.txt | sort | uniq > resultado.txt
sort /home/alunos/*.txt >> uniq >> resultado.txt
uniq /home/alunos/*.txt | sort > resultado.txt
Justi�cativa
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 10/10
Glossário
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/5
Programação para
Servidores
Aula 7 - Scripts com Janelas
INTRODUÇÃO
Para melhorar a aparência de scripts e facilitar a interação com os usuários, pode-se utilizar caixas de diálogo que
desenham janelas na tela similares as do modo grá�co, com botões, entradas para texto e menu. Essas caixas são
utilizadas para compor interfaces amigáveis com o usuário, para que ele responda perguntas ou escolha opções.
O dialog é um executável e recebe todos os parâmetros via linha de comando, então ele geralmente é usado dentro de
um script. Veremos aqui algumas tarefas comuns feitas com o dialog, como: escolher uma opção em um menu,
escolher um arquivo, uma data ou digitar frases ou senhas.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/5
OBJETIVOS
Desenvolver scripts com interfaces mais amigáveis;
Explicar a restrição à entrada de dados dos usuários de scripts.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/5
DIALOG
Fonte da Imagem: alexmillos / Shuttertock
Com o dialog é possível fazer shell scripts que se parecem com programas grá�cos, em que o usuário vê apenas telas
e navega entre elas apertando botões.
Utilizando esse conceito de telas, é possível amarrar o usuário ao programa, lhe apresentando as opções disponíveis,
sem que ele precise ter acesso direto à linha de comando.
CAIXAS DE DIÁLOGO
As caixas de diálogo são chamadas por intermédio do comando dialog, que terá seu comportamento determinado por
seus parâmetros.
Por exemplo, o comando:
Esse comando mostra uma janela com o texto “Um texto simples de aviso.” de tamanho 5 linhas por 32 colunas no
centro da tela, e um botão “Aceitar”.
Apesar de estar em modo texto, a interface interage com o mouse.
Os parâmetros dependerão do tipo da caixa de diálogo, mas quatro deles são obrigatórios:
Opcionalmente, pode-se utilizar a opção “--title”, que exibe um título na caixa de diálogo.
ATIVIDADE
Para praticar os conceitos estudados construa um script de inclusão de usuário utilizando uma janela, onde sejam
digitados nome e senha do novo usuário.
Resposta Correta
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/5
Glossário
YESNO1.SH
BOX-RESPOSTA.SH
OPÇÃO "--STDOUT"
Exemplo:
Tente alterar o script acima para que, após digitar o nome na inputbox, o dado seja exibido numa msgbox.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 5/5
Dica: reaproveite o arquivo box-resposta.sh.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 1/7
Programação para
Servidores
Aula 8 - Programação avançada 1 – Funções
INTRODUÇÃO
Nesta aula, vamos estudar as funções. Por vezes, encontramos abordagens que acabam gerando dúvidas. No nosso
estudo, vamos demonstrar que as funções nos permitem otimizar partes repetitivas nos códigos.
Quando trabalhamos com shell script, basicamente agregamos uma sequência de comandos para tarefas variadas.
Nesse mesmo enfoque, dentro de um script, temos diversas ações que se repetem. Para que não precisemos
reescrever o mesmo código diversas vezes, usamos as funções.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 2/7
Aqui, veremos ainda que cada parte do kernel, quando “ligado”, ocupa um espaço de memória e passa a ser controlado
pelo SO. Os scripts bash possuem funcionalidades que permitem o gerenciamento de processos e a execução paralela
de tarefas.
Nos nossos exercícios, os efeitos do processamento paralelo serão tímidos, mas, em estações com elevado nível de
processamento, o paralelismo (pipeline) é bastante desejável.
OBJETIVOS
Identi�car a sintaxe de funções em shell script;
Explicar o procedimento de passagem de parâmetros e código de retorno;
Reconhecer o escopo de uma variável em uma função.
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 3/7
FUNÇÕES
Uma função é um bloco de código que implementa um conjunto de operações para desempenhar uma tarefa
especí�ca.
Tal função pode, então, ser chamada a partir de múltiplos lugares de dentro do programa principal ou de outras
funções.
Ela deve ser de�nida entes de ser utilizada. Isso pode ser feito no início do script ou em um arquivo separado e incluído
no programa com o comando "." (ponto).
A sintaxe para a de�nição de uma função é:
Por exemplo, o trecho de código:
Note que esse exemplo exibe duas características:
Chamada e execução de funções; e
Uma função chamada de dentro de outra.
VAMOS PRATICAR!
Tente montar o script funcao1.sh com a função acima.
Resposta Correta
ARGUMENTOS E STATUS DE SAÍDA
Funções podem processar argumentos passados durante sua chamada. Assim como scripts, elas recebem
argumentos através das variáveis $1, $2, $3 etc.
O exemplo abaixo é de uma função que utiliza parâmetros:
22/06/2018 Disciplina Portal
http://lms4.2.webaula.com.br/portaldoaluno/training/classroom?classId=653021 4/7
As funções enxergam somente os parâmetros passados a elas,

Continue navegando