Faculdade ESUDA
Disciplina: Sistemas Operacionais
Professor: Jymmy Barreto
Turno: Noite
Data: 25/04/2025
Introdução ao Shell Script
📌 Objetivos da Aula
1. Entender o que é Shell e por que é uma linguagem interpretada.
2. Criar o primeiro script Shell ("Olá, mundo!").
3. Conhecer palavras reservadas e variáveis em Shell Script.
1. O que é Shell?
Definição: O Shell é um interpretador de comandos que atua como interface entre o usuário e o
sistema operacional (kernel).
Linguagem Interpretada:
Códigos são executados linha a linha, sem necessidade de compilação.
Vantagens: Rápido desenvolvimento, portabilidade e fácil depuração.
Desvantagem: Menor performance comparado a linguagens compiladas.
2. Primeiro Script Shell: "Olá, mundo!"
Passo a Passo:
1. Crie um arquivo com extensão .sh:
2. nano [Link]
3. Adicione a shebang (#!/bin/bash):
Indica qual interpretador deve executar o script (caminho do Bash).
#!/bin/bash
echo "Olá, mundo!"
4. Salve o arquivo e torne-o executável:
chmod +x [Link]
5. Execute:
./[Link]
Saída:
Olá, mundo!
3. Palavras Reservadas (Keywords)
São palavras que têm significado especial no Shell e não podem ser usadas como nomes de variáveis ou
funções.
Palavra Descrição
if Inicia uma condicional.
then Executa comandos se a condição if for verdadeira.
else Executa comandos se a condição if for falsa.
elif Combina else e if para verificar múltiplas condições.
fi Fecha um bloco if.
case Inicia uma estrutura de seleção múltipla.
esac Fecha um bloco case.
for Inicia um loop de iteração.
while Executa comandos enquanto uma condição for verdadeira.
until Executa comandos até que uma condição seja verdadeira.
do Delimita o início do corpo de um loop (for, while, until).
done Fecha um bloco de loop.
break Sai de um loop antes do término.
continue Pula para a próxima iteração de um loop.
function Define uma função (opcional, pois func() também funciona).
return Retorna um valor de uma função.
local Declara uma variável local a uma função.
Palavra Descrição
exit Termina a execução do script com um status de saída.
select Cria um menu interativo.
in Usado em loops for e case para definir elementos.
🔹 Símbolos Especiais e Metacaracteres
Esses caracteres têm funções especiais em operações de redirecionamento, expansão, substituição, etc.
📌 Redirecionamento e Pipe
Símbolo Descrição
> Redireciona a saída para um arquivo (sobrescreve).
>> Redireciona a saída para um arquivo (concatena).
< Redireciona a entrada de um arquivo.
<< Here-document (entrada até um delimitador).
<<< Here-string (passa uma string como entrada).
\| Pipe (passa a saída de um comando como entrada para outro).
2> Redireciona stderr (erros) para um arquivo.
&> Redireciona stdout e stderr para um arquivo.
📌 Expansão e Substituição
Símbolo Descrição
$ Expande variáveis ($VAR).
${} Expansão mais segura de variáveis (${VAR}).
Substituição de comando (captura a saída de um
$()
comando).
` | Equivalente a $() (mais antigo, substituição de
comando).
$(()) Aritmética (expansão para cálculos).
$VAR Valor da variável VAR.
* Wildcard (corresponde a qualquer caractere).
? Wildcard (corresponde a um único caractere).
Globbing (corresponde a um conjunto de
[]
caracteres).
Símbolo Descrição
{} Expansão de chaves ({1..10}, {a,b,c}).
📌 Controle de Processos
Símbolo Descrição
& Executa um comando em segundo plano.
&& Executa o próximo comando apenas se o anterior for bem-sucedido.
\|\| Executa o próximo comando apenas se o anterior falhar.
; Separa comandos (executa sequencialmente).
! Negação (em testes ou histórico de comandos).
() Agrupa comandos em um subshell.
📌 Outros Símbolos Úteis
Símbolo Descrição
# Comentário (ignora tudo após #).
\ Escape (ignora o significado especial do próximo caractere).
" Aspas duplas (permite expansão de variáveis).
' Aspas simples (protege todos os caracteres).
~ Home directory (~ equivale a /home/usuario).
.. Diretório pai (sobe um nível no sistema de arquivos).
🔹 Exemplos Práticos
✅ Redirecionamento
echo "Olá" > [Link] # Sobrescreve o arquivo
ls -l >> [Link] # Concatena ao arquivo
grep "texto" < [Link] # Lê entrada de um arquivo
✅ Substituição de Comando
DATA=$(date) # Armazena a data em uma variável
echo "Hoje é $DATA"
✅ Expansão de Chaves
echo {1..5} # Saída: 1 2 3 4 5
echo {a,b,c}.txt # Saída: [Link] [Link] [Link]
✅ Condicionais e Loops
if [ -f "[Link]" ]; then
echo "Arquivo existe!"
else
echo "Arquivo não encontrado."
fi
Ótimo! Vamos abordar cada uma das suas perguntas sobre variáveis em Shell Script (especialmente no
Bash):
4. Representação de uma Variável em Shell
Em Shell Script, uma variável é representada por um nome (sem espaços) que armazena um valor.
Declaração: VARIAVEL=valor (sem espaços antes/depois do =).
Acesso: $VARIAVEL ou ${VARIAVEL} (recomendado para evitar ambiguidades).
Exemplo:
NOME="João"
echo $NOME # Saída: João
echo ${NOME} # Saída: João (forma mais segura)
🔹 Tipos de Dados Suportados
O Shell (Bash) trata variáveis como strings por padrão, mas permite manipulação numérica em contextos
específicos. Os "tipos" indiretos são:
Tipo
Descrição Exemplo
Implícito
String Texto (padrão). VAR="texto"
Inteiro Números (para cálculos). NUM=10
Array Lista de valores. ARR=("a" "b" "c")
Array com chaves personalizadas (Bash declare -A DICT=
Associativo
4+). (["chave"]="valor")
Observações:
Não há tipos flutuantes nativos (use bc ou awk para cálculos decimais).
Variáveis são não tipadas (uma mesma variável pode mudar de "tipo").
🔹 Variável Constante (Read-only)
Use readonly ou declare -r para declarar uma variável imutável.
Exemplo:
readonly PI=3.14
declare -r SITE="[Link]"
PI=5.0 # Erro: "PI: readonly variable"
🔹 Variável do Tipo Array
Declaração:
FRUTAS=("Maçã" "Banana" "Laranja") # Array indexado
Acessar elementos:
echo ${FRUTAS[0]} # Saída: Maçã (índice começa em 0)
echo ${FRUTAS[1]} # Saída: Banana
Imprimir todo o conteúdo:
echo "${FRUTAS[@]}" # Saída: Maçã Banana Laranja
Imprimir índices do array:
echo "${!FRUTAS[@]}" # Saída: 0 1 2
Tamanho do array:
echo "${#FRUTAS[@]}" # Saída: 3 (número de elementos)
🔹 Chamar Variável no echo
Dentro de um echo, variáveis são expandidas quando usam $:
Exemplo 1 (diretamente):
NOME="Maria"
echo "Olá, $NOME!" # Saída: Olá, Maria!
Exemplo 2 (com chaves para evitar ambiguidade):
DIA="07"
echo "O dia é ${DIA}th" # Saída: O dia é 07th
Exemplo 3 (array no echo):
CORES=("Verde" "Azul")
echo "Cor 1: ${CORES[0]}, Cor 2: ${CORES[1]}" # Saída: Cor 1: Verde, Cor 2: Azul
🔹 Exemplo Completo
#!/bin/bash
# Declarações
readonly ESCOLA="ESUDA"
ALUNOS=("Ana" "Carlos" "Diana")
# Uso
echo "Escola: $ESCOLA"
echo "Alunos: ${ALUNOS[@]}"
echo "Índices: ${!ALUNOS[@]}"
echo "Primeiro aluno: ${ALUNOS[0]}"
Saída
Escola: ESUDA
Alunos: Ana Carlos Diana
Índices: 0 1 2
Primeiro aluno: Ana
📌 Dicas Importantes:
1. Arrays vs. Strings:
VAR="a b c" ≠ ARR=("a" "b" "c").
Para arrays, use ${ARR[@]} para expandir corretamente.
2. Aspas:
Use "${VAR}" para preservar espaços em strings.
3. Variáveis Globais:
Por padrão, variáveis são globais. Use local em funções para escopo local.
Se tiver mais dúvidas, é só perguntar! 😊
5. Leitura de Variáveis via Linha de Comando
🔹 📌 Objetivo
Aprender a capturar dados fornecidos pelo usuário durante a execução de um script, tornando-o interativo e
dinâmico.
🔹 Comando read
O comando read é usado para ler entrada do usuário ou de arquivos e armazená-la em variáveis.
Sintaxe Básica:
read -p "Mensagem de prompt" NOME_VARIAVEL
Exemplo:
#!/bin/bash
read -p "Digite seu nome: " NOME
echo "Olá, $NOME! Bem-vindo ao Shell Script!"
Execução e Saída:
$ ./[Link]
Digite seu nome: Maria
Olá, Maria! Bem-vindo ao Shell Script!
🔹 Argumentos de Linha de Comando
Scripts podem receber argumentos diretamente da linha de comando, acessíveis por posição ($1, $2, ...).
Variáveis Especiais:
Variável Descrição
$0 Nome do script.
$1 a $9 Argumentos posicionais (1º ao 9º).
$# Número total de argumentos.
$@ Todos os argumentos como uma lista.
Exemplo 1:
#!/bin/bash
echo "Script executado: $0"
echo "Primeiro argumento: $1"
echo "Segundo argumento: $2"
echo "Total de argumentos: $#"
echo "Todos os argumentos: $@"
Execução e Saída:
$ ./[Link] Sport 87
Script executado: ./[Link]
Primeiro argumento: Sport
Segundo argumento: 87
Total de argumentos: 2
Todos os argumentos: Sport 87
Exemplo 2:
#!/bin/bash
arg0=$0
arg1=$1
arg2=$2
echo "Script executado: $arg0"
echo "Primeiro argumento: $arg1"
echo "Segundo argumento: $arg2"
echo "Total de argumentos: $#"
echo "Todos os argumentos: $@"
Execução e Saída:
$ ./[Link] Sport 87
Script executado: ./[Link]
Primeiro argumento: Sport
Segundo argumento: 87
Total de argumentos: 2
Todos os argumentos: Sport 87
🛠 Próxima Aula:
Estruturas de controle (if, for, while) e operadores lógicos!
Exercício Prático:
Crie um script que declare:
Uma variável constante com seu nome.
Um array com 3 cores favoritas.
Imprima os valores usando echo.