Você está na página 1de 8

31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre

Shell script
Origem: Wikipédia, a enciclopédia livre.

Shell script é o nome dado a um arquivo que será


interpretado por algum programa tipo Shell. Atualmente
existem vários programas tipo Shell. Além dos principais - sh e
bash -, existem também, ksh, zsh, csh e tcsh. Um Shell script
(ou script em Shell) necessita basicamente do interpretador
Shell.

Algumas operações típicas executadas por linguagens de script


em Shell incluem; manipulação de arquivos, execução de
programas e impressão de texto. Sendo assim é muito comum
que scripts sejam utilizados para automatização de tarefas -
como configurar o ambiente, executar um programa e fazer
qualquer limpeza, registro, etc. Essas tarefas executadas por
scripts em Shell são conhecidas mais popularmente como Shell
Wrappers.

História Bash - linha de comando

A primeira linguagem de script em Shell, criada por Stephen R. Bourne, veio a ser implementada
na versão 7 do Unix Shell e ficou conhecida como Bourne Shell (sh). Após a sua implementação,
diversas outras linguagens de scripts baseadas no sh vieram, tais como Korn Shell, e DMERT
Shell, sendo que, em 1989, foi lançada a linguagem que se tornou Shell de login padrão em
diversas distribuições Linux, a GNU Bash ou simplesmente Bash.

Funcionalidades e Capacidades

Selecionar Shell

Para selecionar qual Shell será utilizado, use a combinação de hashtag (#) mais exclamação (!) e
caminho do executável na primeira linha do arquivo script, isso vem a ser conhecido como
Shebang.

- Para declarar que o script deve ser interpretado por Bourne Shell (sh) a primeira linha será
escrita da seguinte forma:

1 #!/bin/sh

- Para declarar que o script deve ser interpretado por Bourne-Again shell (Bash) é recomendável a
utilização do comando env, pelo fato que apesar de o Bash já vir instalado em muitas distribuições
Linux, não sabemos se ele estará em todas elas no mesmo diretório /bin/, então use a seguinte
forma:

https://pt.wikipedia.org/wiki/Shell_script 1/8
31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre

1 #!/usr/bin/env bash

Comentários

Os comentários nas linguagens Bourne Shell (sh) e Bourne-Again Shell (bash) serão utilizados
hashtag (#), Exemplo de comentários:

#Comentário
#- Segundo comentário
# // [ Terceiro comentário ] //

Variáveis

Como qualquer outra linguagem de programação conhecida, um script em Shell também possui
suporte a variáveis. Em uma breve explicação uma variável é um nome/objeto simbólico ao qual
podemos atribuir valores, ler ou manipular o conteúdo. Para mais informações, leia-me. Os scripts
em Shell podem lidar com diferentes tipos de variáveis sem precisar definir o tipo:

MENSAGEM_DATA=1979
MENSAGEM_NOME="Bourne Shell"
mensagem_tipo1="Unix Shell"
mensagem_autor="Stephen Bourne"
MENSAGEM=ola
_MENSAGEM2=oi-2.020

Variáveis Pré-definidas

Os scripts em Shell possuem as seguintes variáveis pré-definidas:

$? - Armazena o status de saída do último programa executado;


$# - Armazena a quantidade de parâmetros de linha de comandos;
$$ - Armazena o valor PID (Process Identifier) do script em shell que estiver em execução;
$@ - Armazena o valor de todos os parâmetros passados, similar a variável argv presente nas
linguagens de programação C e C++;
$! - Armazena o PID do último processo em segundo plano. Isso é útil para acompanhar o
processo à medida que o trabalho é realizado;
$0, ..., $9 - Armazena os valores de todos os parâmetros de linha de comando
separadamente;

Variáveis Globais

Variáveis globais ou variáveis de ambiente globais, são variáveis criadas/definidas com o comando
export e podem ser utilizadas por múltiplos scripts em Shell. Um exemplo é a variável de ambiente
LANG (Pré-definida em diversas distribuições Linux), Podendo ser acessada por diversos arquivos
de script em Shell.

Outras variáveis pré definidas são:

PATH: define diretórios de procura por programas executados no shell;

https://pt.wikipedia.org/wiki/Shell_script 2/8
31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre

USER: informa o nome do usuário do shell;


HOME: informa o caminho do diretório home do usuário;
LANG: Idioma/Linguagem, especificada como locale;
PWD: diretório atual;
TERM: Tipo de terminal atual em uso.
UID: UID do usuário atual.
RANDOM: Gera um número aleatório

A duas formas de criar uma variável global, exportar uma variável pré definida ou definir quando
for exportar:

VARIAVEL1=Teste
export VARIAVEL1
# Define e exporta com export
export VARIAVEL2=Teste

Array

Bourne Shell (sh) não é compatível com variáveis tipo array, mas Bourne-Again Shell (Bash) sim,
exemplo simples de implementação:

1 #!/usr/bin/env bash
2 meu_array=(1 2 3 4 5 6 7 8 9)
3 meu_Array=("abc" "def" "ghi")

Array Associativo

Podemos construir em Bash arrays associativos, também chamados de dicionários

1 #!/usr/bin/env bash
2 declare -A dicionario
3 dicionario["Brasil"]="Brasília"
4 dicionario["Goiás"]="Goiânia"
5 dicionário["São Paulo"]="São Paulo"
6 dicionario[Sergipe]=Aracajú
7 echo ${dicionario["Brasil"]}

Chamar variáveis

Para chamar variáveis utiliza-se o sinal de cifrão $var. O cifrão ($) também é bastante utilizado em
script sh, para executar programas externos exemplo: var=$(expr 2 + 2) irá armazenar a
saída do programa expr. E o cifrão mais chave ${var} é comum ser utilizado das seguintes
maneiras:

Para acessar posições em um array ${var[1]}. (obs.: não funciona para sh, apenas para Bash)

E também para substituir o valor de uma variável se a mesma não possuir um valor: ${var:-nome}
- ${var:=nome} - ${var:-$(programa)} dessas maneiras irão substituir pelo que for passado
depois de :- ou :=, exemplo em código:

read -p "Digite um nome: " myname


echo "${myname:=$(whoami)}"

https://pt.wikipedia.org/wiki/Shell_script 3/8
31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre

O código acima irá pedir para o usuário digitar um nome, caso digite irá utilizar echo para
imprimir o nome digitado na saída padrão, caso contrário irá substituir pela saída do comando
whoami, ao invés de substituir pela saída de um comando, você pode substituir por outro valor
exemplo: ${myname:=Bourne Shell}.

Remover Variáveis
Para remover uma variável, utiliza-se o comando unset + nome da variável, você pode também
remover múltiplas variáveis basta separá-las por espaços.

unset VAR
unset VAR1 VAR2 VAR3 VAR4

If

Declaração if para scripts em bash ou sh:

if [ $1 = $2 ]; then
echo "Parametro 1=$1 é igual a 2=$2."
fi

Existe também outra forma:

[ $1 = $2 ] && { echo "Parametro 1 ($1) é igual a 2 ($2)."; exit 0; }

If-else

Declaração if else para scripts em bash ou sh, há diversas formas diferentes, tenha cuidado para
não esquecer os espaços entre os colchetes eles são muito importantes:

A declaração if else mais comum e mais utilizada é a seguinte:

1 if [ $1 = $2 ]; then
2 echo "Parametro 1 ($1) é igual a 2 ($2)."
3 else
4 echo "Parametro 1 ($1) não é igual a 2 ($2)."
5 fi

Mas, existe uma abreviação que também é muito utilizada que é menor e muito boa para teste de
linha única:

1 [ $1 = $2 ] && { echo "Parametro 1 ($1) é igual a 2 ($2)."; exit 0; } || { echo "Parametro 1 ($1) é
diferente de 2 ($2)."; exit 0; }

Else-if

Declaração else if para scripts em bash ou sh são diferentes de algumas linguagens de


programação, exemplo:

https://pt.wikipedia.org/wiki/Shell_script 4/8
31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre

if [ $3 ]; then
echo "$3"
elif [ $2 ]; then
echo "$2"
else
echo "$1"
fi

Case

Scripts em Bash ou sh, permitem case, a sintaxe é a seguinte:

case "$var" in
valor)
;;
esac

Expressões Regulares

Scripts em Bash possui compatibilidade com Expressões Regulares, algo que scripts em Bourne
Shell (sh) não reconhecem:

1 #!/usr/bin/env bash
2 [[ $1 =~ ^sh|SH$ ]] && { echo "$1 - Bourne Shell"; }

Operadores

Existem diversos operadores para cada Shell script, mas aqui serão passadas informações
especificamente sobre Bourne shell por ser mais comum e muitos outros shell são similares. Os
seguintes operadores serão explicados aqui:

- Operadores Aritméticos

Operadores Descrição Exemplos

- Operadores Booleanos

Operadores Descrição Exemplos

- Operadores para Teste de Arquivos

Operadores Descrição Exemplos

- Operadores Relacionais

Operadores Descrição Exemplos

- Operadores de String

https://pt.wikipedia.org/wiki/Shell_script 5/8
31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre

Operadores Descrição Exemplos

Loop

For

Esse tipo de loop funciona da mesma forma para ambos Bash e sh.

# Irá executar echo "Test" 3 vezes


for i in 1 2 3
do
echo "Test"
done
# Em apenas uma linha
for i in 1 2 3; do echo "Test"; done

While

Existem diversas formas de utilizar o loop while para scripts em Bash ou sh:

while [ -z $a_input ]; do
read -p "Enter para continuar ou digite qualquer coisa para sair: " a_input
done

while [ -z $b_input ]; do read -p "Enter para continuar ou digite qualquer coisa para sair: " b_input;
done

while read -p "Digite um numero: " c_input


do
if [ $c_input -gt 25 ]; then
echo "Numero $c_input é maior que 25"
break
else
echo "Numero $c_input é menor que 25"
break
fi
done

Funções

O scripts em Shell também aceitam funções. Bash e sh aceitam um mesmo padrão de funções,
mas o Bash também aceita um outro formato que o sh não reconhece. Ambos formatos são
mostrados abaixo:

# Ambos aceitam esse formato


minha_função(){
echo
}
# Esse formato apenas Bash aceitará
function minha_função(){
echo
}

Para chamar uma função basta digitar o nome da função em uma linha após a declaração da
função como se fosse um comando. Exemplo:

nova_função() {
echo "Olá, Mundo!"

https://pt.wikipedia.org/wiki/Shell_script 6/8
31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre
}
nova_função

Status de saída
O status de saída de um comando executado são valores, retornados pela chamada do sistema
waitpid ou função equivalente. Os valores para o status de saída ficam entre 0 e 255; Os status de
saída dos Shell builtins e comandos compostos também são limitados a esse intervalo. Sob certas
circunstâncias, o shell usará valores especiais para indicar modos de falha específicos.

Para os propósitos do Shell, um comando que sai com um status de saída igual a 0 (zero) significa
que a execução do script foi bem-sucedida. Você pode ver os exemplos passados anteriormente
onde a última linha do script o status de saída é 0 (zero). Já um status de saída diferente de zero
indica falha. Esse esquema aparentemente contra-intuitivo é usado para que haja uma maneira
bem definida de indicar sucesso e uma variedade de maneiras para indicar vários modos de falha.

Quando um comando termina em um sinal fatal cujo número é N, o Bash por exemplo usa o valor
128+N como status de saída. Se um comando não for encontrado, o processo filho criado para
executá-lo retornará um status 127. Se um comando for encontrado, mas não for executável, o
status de retorno será 126. Um exemplo de uma implementação simples de status de saída:

1 [ ! -e /bin/bash ] && { exit 2; }

O próximo exemplo irá checar se um comando não foi executado com sucesso:

ping -c1 wikipedia..org


[ $? -ne 0 ] && echo "O comando ping emitiu algum erro."

Os script passados acima são para exemplos de implementação..

Exemplos de uso

Criar Shell script

Para criar um Shell script você precisa saber, antes, qual linguagem de script irá utilizar . Se for
utilizar Bash, por exemplo, basta criar um arquivo com a extensão .sh e colocar na primeira linha
desse arquivo o shebang para bash.

Para distribuições com base Linux, abra o terminal e digite os seguintes comandos:

echo '#!/usr/bin/env bash' > novo_script.sh

E depois de criado você deve tornar o arquivo executável, utilizando o seguinte comando: chmod
u+x novo_script

Verificar parâmetros de linha de comando

Para verificar parâmetros de linha de comando com Bourne shell, há apenas uma maneira
recomendável: utilizar loop + case + shift. Já com Bash há mais de uma, pelo fato de o Bash
suportar expressões regulares.
https://pt.wikipedia.org/wiki/Shell_script 7/8
31/03/2023, 05:36 Shell script – Wikipédia, a enciclopédia livre

Testar parâmetros utilizando loop + case + shift:

while [ $# -gt 0 ]; do
case "$1" in
version | -v) echo "Release v0.1.0 - from Wikipedia.org";;
*) echo "$0: Este parâmetro '$1' não foi reconhecido, saindo...";exit 1;;
esac
shift
done

O loop while acima irá iniciar se e somente se houver um parâmetro. O case irá analisar os
parâmetros e o shift irá mudar de parâmetros se houver mais de um e terminar o loop caso não
haja mais nenhum. Caso você tenha muitas opções para o seu script deixe help e version sempre
como as primeiras e utilize break para terminar o loop.

Apagar arquivos antigos

Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

#!/usr/bin/env bash
cd /tmp
find . -type f -mtime +30 -delete

Veja também
Expressões Regulares
Bourne shell
Bash
Korn shell
Unix versão 7
Shebang
Caracteres-curinga
Fluxos padrão

Referências

Ligações externas

Obtida de "https://pt.wikipedia.org/w/index.php?title=Shell_script&oldid=64703986"

https://pt.wikipedia.org/wiki/Shell_script 8/8

Você também pode gostar