Introdução ao Scripting em Shell

# Definindo variáveis sem espaços
usuario=carlos
# Definindo variáveis com espaços, usando aspas duplas
nome_completo="Carlos Silva"
# Exibindo o valor da variável
echo $nome_completo

# Armazenando a saída de um comando em uma variável
lista_arquivos=`ls`
echo $lista_arquivos

Fundamantos de Scripts Shell

Exemplo para exibir o diretório atual:

#!/bin/bash
dir_atual=`pwd`
echo "O diretório atual é: $dir_atual"

Para exectuar, salve como mostra_dir.sh e use chmod +x mostra_dir.sh ou execute com bash mostra_dir.sh.

Exemplo para contar arquivos em um diretório:

#!/bin/bash
cd /etc
contagem=`ls -l | wc -l`
echo "Existem $contagem arquivos neste diretório."

Entrada de Dados com o Comando read

Entrada de uma variável:

# Solicitar um nome
read -p "Digite seu nome: " nome_usuario
echo "Olá, $nome_usuario!"

Entrada de múltiplas variáveis:

read -p "Digite primeiro e segundo nome: " primeiro segundo
echo "Primeiro: $primeiro, Segundo: $segundo"

Exemplo interativo: contar arquivos em um diretório fornecido pelo usuário.

#!/bin/bash
read -p "Informe o caminho do diretório: " caminho_dir
if [ -d "$caminho_dir" ]; then
    total_arquivos=`ls -l "$caminho_dir" | wc -l`
    echo "O diretório $caminho_dir contém $total_arquivos itens."
else
    echo "Diretório não encontrado."
fi

Pasagem de Parâmetros para Scripts

Variáveis especiais:

  • $1 – primeiro parâmetro
  • $0 – nome do script
  • $@ – todos os parâmetros
  • $# – número de parâmetros
#!/bin/bash
echo "Script: $0"
echo "Parâmetros recebidos: $@"
echo "Quantidade de parâmetros: $#"
echo "Primeiro parâmetro: $1"
echo "Terceiro parâmetro: $3"

Execução: ./parametros.sh 10 20 30

Exemplo prático: contar arquivos usando um parâmetro como diretório.

#!/bin/bash
if [ -d "$1" ]; then
    total=`ls -l "$1" | wc -l`
    echo "Total de arquivos em $1: $total"
else
    echo "Diretório inválido."
fi

Redirecionamento de Saída

# Sobrescrever conteúdo de um arquivo
ls -l > listagem.txt
# Adicionar conteúdo ao final do arquivo
echo "Nova entrada" >> listagem.txt

Estrutura Condicional if...else

Sintaxe básica:

if [ condição ]; then
    comandos
else
    comandos
fi

Exemplo: verificar se um diretório está vazio.

#!/bin/bash
read -p "Diretório para verificar: " diretorio
conteudo=`ls "$diretorio"`
if [ -z "$conteudo" ]; then
    echo "O diretório está vazio."
else
    echo "O diretório contém arquivos."
fi

Exemplo: validação simples de login.

#!/bin/bash
read -p "Usuário: " usr
read -sp "Senha: " senha
echo
if [ "$usr" = "admin" ] && [ "$senha" = "senha123" ]; then
    echo "Autenticação bem-sucedida."
else
    echo "Falha na autenticação."
fi

Estrutura Condicional if...elif...else

Exemplo: classificar notas de alunos.

#!/bin/bash
read -p "Insira a nota (0-100): " nota
if [ "$nota" -ge 90 ] && [ "$nota" -le 100 ]; then
    echo "Desempenho excelente."
elif [ "$nota" -ge 80 ]; then
    echo "Bom desempenho."
elif [ "$nota" -ge 70 ]; then
    echo "Desempenho mediano."
elif [ "$nota" -ge 60 ]; then
    echo "Aprovado com ressalvas."
else
    echo "Reprovado."
fi

Estrutura de Seleção case

Exemplo: menu de opções.

#!/bin/bash
read -p "Escolha uma opção (A, B ou C): " opcao
case "$opcao" in
    "A")
        echo "Opção A selecionada: Computador"
        ;;
    "B")
        echo "Opção B selecionada: Impressora"
        ;;
    "C")
        echo "Opção C selecionada: Monitor"
        ;;
    *)
        echo "Opção inválida."
        ;;
esac

Exemplo: classificar faixas numéricas.

#!/bin/bash
read -p "Avalie o serviço (0-9): " avaliacao
case "$avaliacao" in
    [0-3])
        echo "Insatisfeito."
        ;;
    [4-6])
        echo "Satisfeito."
        ;;
    [7-9])
        echo "Muito satisfeito."
        ;;
esac

Laços de Repetição

Laço for com lista e comando seq:

#!/bin/bash
for i in `seq 1 5 20`; do
    echo "Valor: $i"
done

Exemplo: somar números de 1 a 100 usando while.

#!/bin/bash
contador=1
soma=0
while [ $contador -le 100 ]; do
    soma=$((soma + contador))
    contador=$((contador + 1))
done
echo "Soma total: $soma"

Operadores Lógicos e Testes de Arquivos

Operadores de comparação numérica: -eq (igual), -ne (diferente), -gt (maior), -lt (menor).

Operadores lógicos: -a (e), -o (ou), ! (negação).

Testes para arquivos e diretórios: -e (existe), -f (é arquivo), -d (é diretório), -r (legível), -w (gravável), -x (executável).

Exemplo: verificar se um caminho é arquivo ou diretório.

#!/bin/bash
read -p "Insira um caminho: " caminho
if [ -z "$caminho" ]; then
    echo "Entrada vazia."
elif [ -d "$caminho" ]; then
    echo "É um diretório."
elif [ -f "$caminho" ]; then
    echo "É um arquivo."
else
    echo "Caminho não reconhecido."
fi

Funções em Shell

Definição e chamada de funções.

#!/bin/bash
saudacao() {
    echo "Bem-vindo ao sistema!"
}
saudacao

Exemplo: função para somar dois números.

#!/bin/bash
soma() {
    resultado=$(($1 + $2))
    echo "Resultado: $resultado"
}
read -p "Primeiro número: " num1
read -p "Segundo número: " num2
soma $num1 $num2

Exemplo: função para criar arquivo em um diretório.

#!/bin/bash
criar_arquivo() {
    local dir="$1"
    cd "$dir" || return
    read -p "Nome do arquivo: " nome_arq
    if [ -e "$nome_arq" ]; then
        echo "Arquivo já existe."
    else
        touch "$nome_arq"
        echo "Arquivo $nome_arq criado com sucesso."
    fi
}
read -p "Diretório alvo: " dir_alvo
if [ -d "$dir_alvo" ]; then
    criar_arquivo "$dir_alvo"
else
    echo "Diretório não encontrado."
fi

Tags: Bash shell-scripting comandos-linux estruturas-de-controle funcoes-shell

Publicado em 7-18 09:51