Shell Scripting
Artigo ainda em construção, releve os erros. Talvez algumas informações estejam incompletas {: .prompt-warning }
<img src="/assets/img/posts_img/full_colored_light.png">
Arquivos .sh
Exitem diversos shells, alguns exemplos são sh, fish, zsh, tcsh, cada um com suas peculiaridades, porém o mais difundido é o bash. Esse será a base para os conhecimentos compartilhados nesse artigo.
No inicio de um arquivo .sh é comum adicionarmos um comentário chamado de “shabang” para dizermos qual interpretador shell deve executar o programa
| |
Um exemplo utilizando outro shell
| |
Ao criar um programa .sh precisamos dar permissão de execução do sistema. No Linux fazemos isso com chmod
| |
Parâmetro +x adiciona permissão de execução do sistema ao arquivo.
Da mesma forma que a primeira linha comentada do programa diz qual shell deve executar o arquivo, é possível passar essa informação diretamente por linha de comando. Exemplo:
| |
Dessa forma, você força qual shell irá executar o programa o arquivo não precisará ter permissão de execução, evitando assim adicionar esse atributo com chmod +x
VARIÁVEIS
Exemplos:
ENV PATH HOME USERNAME TERM RANDOM
Array de ambiente
| |
| |
Arquivo de configuração
| |
Aqui você pode configurar seu terminal, criando alias, variáveis e funções por exemplo:
| |
Cálculos matemáticos
Sintaxe para receber valores matemáticos:
| |
| |
Exemplo que faz um pull em cada para repositório em uma pasta
| |
Outra opção é usar o programa bc

Condicional
| |
| |
Test
| |
Parâmetros para comparação que podem ser usados com <code>if</code> e/ou <code>test</code>
Referência https://www.vivaolinux.com.br/dica/Conhecendo-o-test{:target="_blank"}
- -b arquivo - Verdadeiro se o arquivo é um block device
- -c arquivo - Verdadeiro se o arquivo é um character device.
- -d arquivo - Verdadeiro se o arquivo é um diretório.
- -e arquivo - Verdadeiro se o arquivo existe.
- f1 -ef f2 - (equivalent file) Verdadeiro se o arquivo f1 é um hard-link para f2.
- n1 -eq n2 - (equal) Verdadeiro se n1 for igual a n2.
- -f arquivo - Verdadeiro se o arquivo existe e é um arquivo regular.
- n1 -ge n2 - (greater than or equal) Verdadeiro se n1 maior ou igual a n2.
- n1 -gt n2 - (greater than) Verdadeiro se n1 for maior que n2.
- -g arquivo - Verdadeiro se o SGID estiver ativado.
- -G file - Verdadeiro se o arquivo (efetivamente) pertencer ao grupo sob qual o script estiver rodando.
- -h arquivo - Verdadeiro de o arquivo for um link simbólico. -k arquivo - Verdadeiro se o arquivo tiver a permissão sticky bit ativada.
- n1 -le n2 - (less than or equal) Verdadeiro se n1 menor ou igual a n2.
- n1 -lt n2 - (less than) Verdadeiro se n1 menor que n2.
- -n s (or just s)-(not null) Verdadeiro se a string não for vazia ou nula.
- -N arquivo - Verdadeiro se o arquivo tiver novo conteúdo (desde a última vez que foi lido).
- n1 -ne n2 - (not equal) Verdadeiro se n1 não for igual a n2.
- -O file - Verdadeiro se o arquivo pertencer ao usuário sob o qual o script estiver rodando.
- f1 -nt f2 (newer than) Verdadeiro se o arquivo f1 for mais recente que f1.
- f1 -ot f2 (older than) Verdadeiro se o arquivo f1 for mais antigo que f1.
- -p file - Verdadeiro se o arquivo for um pipe.
- -r file - Verdadeiro se um arquivo for lido (pelo seu script).
- -s arquivo - Verdadeiro se o arquivo existe e não estiver vazio.
- -S arquivo - Verdadeiro se o arquivo for um socket.
- -t fd - Verdadeiro se o descritor do arquivo estiver aberto em um terminal.
- -u arquivo - Verdadeiro se o arquivo tiver set-user-id (suid) ativada.
- -w arquivo - Verdadeiro se o arquivo tiver permissão de escrita (pelo seu script).
- -x arquivo - Verdadeiro se o arquivo for executável.
- -z s - (zero length) Verdadeiro se a string for igual a zero ou não possuir nenhum valor atribuído. Ex. variável nula ou arquivo vazio.
Outros operadores mais comuns
- s1 = s2 - Verdadeiro se a string s1 é igual a s2.
- s1 != s2 - Verdadeiro se a string s1 for diferente de s2.
- s1 < s2 - Verdadeiro se a string s1 for menor que s2.
- s1 > s2 - Verdadeiro se a string s1 for maior que s2.
Pode-se usar a palavra test para testar um comando,
- OBS: O comando
testnão suporta números float
Todas essas informações podem ser encontradas com o comando man bash e pesquisar esses operadores digitando / e digitando CONDITIONAL EXPRESSIONS
Exemplos
| |
Comparação de arquivos no comando teste
| |
Comando case
| |
Estrutura de repetição
for, while, until
| |
exemplo
| |
for estilo C
| |
Loop com until
| |
Para efeito de demostração, um código fish shell que funcione da mesma forma que o código anterior
| |
Parâmetros de linha de comando
./ex.sh param1 param2 …. $0 $1 $2
$# - numero de parametros
Shift
reduz ou passa o parametro para uma variável anterior, ex, valor de $3 passa para => $2
Comando read
| |
whiptail
Caixa de dialogo
| |
funções
| |
Recomendações
English
Português
O que é Shell? (Software) - Diolinux Explica Curso de Shell Scripting - Programação no Linux 30 Comandos do Terminal Linux BÁSICOS