Aprenda / Terminal e linha de comando

IntermediárioAula 11 de 1617 min0% da trilha

Scripts de shell básicos

Um script é só uma sequência de comandos que você já digitaria à mão, salva num arquivo pra nunca mais precisar redigitar.

Depois de acumular alguns comandos que você roda sempre na mesma sequência, o próximo passo natural é parar de digitar tudo à mão toda vez e salvar essa sequência num arquivo — um script de shell. Não tem mistério: um script é um arquivo de texto comum com comandos, um por linha, executado de cima pra baixo.

A linha shebang

Todo script de shell começa com uma linha especial chamada shebang, que diz ao sistema qual programa deve interpretar o resto do arquivo:

script.sh
#!/bin/bash

Apesar de parecer um comentário (começa com #), essa linha específica no topo do arquivo tem um significado especial pro sistema operacional: #!/bin/bash diz "rode este arquivo usando o interpretador bash que está em /bin/bash". Sem essa linha, o sistema não saberia automaticamente que tipo de script está executando.

Variáveis dentro de um script

Variáveis dentro de um script funcionam igual às da lição anterior, sem export quando o valor só é usado dentro do próprio script:

script.sh
#!/bin/bash
nome="mundo"
echo "Olá, $nome!"

if/else — decisões condicionais

script.sh
#!/bin/bash
idade=20

if [ $idade -ge 18 ]; then
  echo "Maior de idade"
else
  echo "Menor de idade"
fi

A sintaxe estranha com colchetes ([ $idade -ge 18 ]) é assim mesmo no bash — os espaços dentro dos colchetes são obrigatórios, e -ge significa greater or equal ("maior ou igual"). Todo bloco if em shell script termina com fi (o próprio if escrito ao contrário — é assim que o bash sabe onde o bloco acaba).

Um loop for simples

script.sh
#!/bin/bash
for arquivo in *.txt; do
  echo "Processando: $arquivo"
done

Esse for percorre cada arquivo .txt da pasta atual, um de cada vez, executando o bloco entre do e done pra cada um. É o tipo de repetição que substituiria rodar o mesmo comando manualmente uma vez por arquivo.

Tornando o script executável e rodando

Lembra da lição 5, sobre permissões? Um arquivo de script criado normalmente não vem com permissão de execução — sem isso, o sistema recusa rodar o arquivo como programa, mesmo que o conteúdo esteja certo.

terminal
chmod +x script.sh
./script.sh

Repare no ./ antes do nome do script — isso é necessário porque, por segurança, o shell não procura por programas executáveis na pasta atual dentro do PATH (lição anterior). O ./ diz explicitamente "execute o arquivo que está bem aqui, nesta pasta", sem depender do PATH pra encontrá-lo.

Exercício

Escreva um script saudacao.sh que recebe o nome de um dia da semana numa variável, e imprime "Bom trabalho!" se for de segunda a sexta, ou "Aproveite o descanso!" se for sábado ou domingo (pode simplificar checando só se é "sabado" ou "domingo" contra qualquer outro valor). Lembre de deixar o script executável.

Quiz rápido

Qual a função exata da linha '#!/bin/bash' no topo de um script?
Por que rodar um script recém-criado com './script.sh' costuma dar 'Permission denied' antes de outro comando?