Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

erro bash

O Professor deveri corrigir esse erro! hoje logo que assiti a aula me questionei porque não tinha $, mas não, provavelmente eu que estava errando em algo! Só agora a noite juntando o que ja vi durante o dia, perdi umas 2h, se o curso esta assim cheio de erros, to fora... e pelo tempo que tem gente reclamando, não corrigem.

4 respostas
solução!

Olá Bruno!

Obrigado pelo feedback, sugestões e comentários são sempre bem vindos para possibilitar a melhoria contínua dos conteúdos da plataforma.

Aqui está o script que você mencionou:

diretorio_backup="/home/lucasrm/devops"
nome_arquivo="backup_$(date +%Y%m%d_%H%M%S).tar.gz"
tar -czf "$nome_arquivo" "$diretorio_backup"
echo "Backup concluído em $nome_arquivo"

O uso do $ serve para referenciar variáveis e executar comandos. Primeiro, a variável diretorio_backup é definida e atribuída ao valor "/home/lucasrm/devops". Em seguida, a variável nome_arquivo é definida com uma expressão $(date +%Y%m%d_%H%M%S), que executa o comando date e captura sua saída, formatada como backup_AAAAmmdd_HHMMSS.tar.gz, incorporando data e hora atuais. A linha tar -czf "$nome_arquivo" "$diretorio_backup" utiliza essas variáveis para criar um arquivo tar.gz do diretório especificado, referenciando-as com $ para obter seus valores. Finalmente, o comando echo "Backup concluído em $nome_arquivo" imprime uma mensagem, novamente usando $ para incluir o valor da variável nome_arquivo na saída.

Bons estudos!

Bom dia, onde encontro o significado dos símbolos mencionados no curso?${@:2}

o que faz o $ ? o que faz @ ? Porque o Y do ano é maiúsculo eo mes eo ano não?

Obrigado.

Olá, Bruno!

Vou explicar passo a passo o que esse script está fazendo aqui:

O código de backup inicia com a definição de uma variável chamada diretorio_backup, que armazena o caminho do diretório que será incluído no backup. Nesse caso, o valor atribuído a essa variável é /home/lucasrm/devops, indicando que o conteúdo desse diretório será o alvo do processo de backup.

Na linha seguinte, uma nova variável chamada nome_arquivo é definida. Essa variável armazena o nome do arquivo de backup a ser criado, incluindo um timestamp para garantir unicidade. A expressão $(date +%Y%m%d_%H%M%S) é usada para gerar uma string com a data e hora atual no formato YYYYMMDD_HHMMSS. Assim, o nome final do arquivo segue o padrão backup_YYYYMMDD_HHMMSS.tar.gz, como por exemplo backup_20240612_143210.tar.gz.

Vale destacar que no comando date, o uso de letras maiúsculas ou minúsculas diferencia o formato de exibição dos componentes da data e hora. Especificamente, para o mês, a letra minúscula m é usada para representar o mês em dois dígitos (01-12), enquanto a letra maiúscula M é usada para representar os minutos em dois dígitos (00-59).

A próxima linha utiliza o comando tar para criar o arquivo comprimido. O comando tar -czf "$nome_arquivo" "$diretorio_backup" executa várias ações simultaneamente. O -c indica que um novo arquivo está sendo criado, -z especifica que o arquivo será comprimido usando o algoritmo gzip, e -f permite especificar o nome do arquivo de saída, que neste caso é o valor contido na variável nome_arquivo. O último argumento, "$diretorio_backup", indica o diretório que será incluído no arquivo de backup.

A última linha do script exibe uma mensagem de confirmação no terminal, informando que o backup foi concluído e fornecendo o nome do arquivo criado. O comando echo "Backup concluído em $nome_arquivo" imprime a mensagem, substituindo "$nome_arquivo" pelo valor real da variável, resultando em algo como "Backup concluído em backup_20240612_143210.tar.gz". Isso dá ao usuário uma confirmação visual de que o processo de backup foi bem-sucedido e informa onde encontrar o arquivo de backup gerado.

Nesse curso, abordamos os principais comandos de Linux e a construção de scripts em bash. Note que temos formações dedicadas a esses dois temas (Linux Onboarding e Shell Scripting). São temas bem amplos, o que fazemos aqui é uma síntese para aqueles que estão interessados em entender um pouco mais sobre as ferramentas e práticas essenciais em DevOps.

Nesse curso, fomos evoluindo de modo incremental. Então, os scripts são ajustados e revisados ao longo das aulas. Quando estamos lidando com bash no nano, o ambiente é bem pouco amigável para construirmos códigos, principalmente ao vivo. Então, em alguns momentos, ocorre a falta de alguns itens (pontuação, $) que são ajustados na sequência do curso. Deixamos assim até para demonstrar algo comum do cotidiano e utilizar essas falhas no código como elementos de aprendizado (a construção de projetos reais envolve bugs, debugs e ajustes).

Qualquer dúvida, comentário ou informação, estou à disposição tanto aqui, como no Discord.

Em relação ao if no bash.

O comando if [ $# -ne 2 ]; then é usado para verificar se o número de argumentos passados para um script bash é diferente de 2.

O if inicia a estrutura condicional, e a expressão [$# -ne 2] verifica se o número de argumentos ($#) não é igual a 2 (-ne significa "not equal").

Se a condição for verdadeira, o script executa o bloco de comandos após then.

Por exemplo, pode exibir uma mensagem de uso correta do script e sair com um status de erro. O comando fi finaliza a estrutura if.

Essa verificação visa garantir que o script receba o número correto de argumentos antes de continuar a execução.

Exemplo:

#!/bin/bash

# Verifica se o número de argumentos é diferente de 2
if [ $# -ne 2 ]; then
  echo "Uso: $0 <arg1> <arg2>"
  exit 1
fi

# Se o número de argumentos for 2, continua a execução
echo "Argumento 1: $1"
echo "Argumento 2: $2"