As variáveis são essenciais para quem deseja criar scripts e entender o funcionamento de códigos em um sistema Linux. Este artigo oferece um guia para iniciar nesse universo.
Conceitos Básicos sobre Variáveis
Variáveis são identificadores que representam dados, sejam eles textuais (strings) ou numéricos. Ao utilizá-las em comandos e operações, o sistema as interpreta como se o valor armazenado fosse digitado diretamente, em vez do próprio nome da variável.
Para definir uma variável, é necessário atribuir um nome e um valor. Os nomes devem ser claros, facilitando a identificação do conteúdo. Um nome de variável não pode iniciar com um número ou conter espaços, embora possa começar com um sublinhado. É possível usar letras maiúsculas e minúsculas e números.
Exemplos Práticos
Vamos criar cinco variáveis. O formato é simples: nome da variável, sinal de igual (=) e o valor, sem espaços antes ou depois do sinal. Atribuir um valor a uma variável é chamado de *atribuição*.
Definiremos quatro variáveis de texto e uma numérica:
nome=Carlos
sistema_operacional=Linux
personagem=Olívia
alimento_favorito=Salada
ano_atual=2024
Para exibir o valor de uma variável, usamos o comando `echo`. É necessário preceder o nome da variável com um cifrão ($). Veja os exemplos:
echo $nome
echo $sistema_operacional
echo $ano_atual
Usando todas as variáveis juntas:
echo "$sistema_operacional é para $nome assim como $alimento_favorito é para $personagem (c) $ano_atual"
Os valores das variáveis substituem seus nomes. É possível alterar os valores. Para reatribuir um novo valor à variável `sistema_operacional`, repetimos o processo de atribuição:
sistema_operacional=Windows
Ao executar novamente o comando anterior, o resultado será diferente:
echo "$sistema_operacional é para $nome assim como $alimento_favorito é para $personagem (c) $ano_atual"
Assim, o mesmo comando pode apresentar resultados distintos conforme os valores armazenados nas variáveis.
Abordaremos o uso de aspas em variáveis adiante. Por ora, lembre-se:
Uma variável entre aspas simples (‘) é interpretada literalmente como texto, e não como variável.
Variáveis entre aspas duplas (“) são tratadas como variáveis.
Para acessar o valor de uma variável, use o cifrão ($).
Uma variável sem o cifrão ($) refere-se ao nome da variável, não ao seu valor.
É possível criar variáveis combinando valores de outras variáveis. O seguinte comando cria uma variável chamada `frase_do_ano` combinando os valores de `sistema_operacional` e `ano_atual`:
frase_do_ano="$sistema_operacional $ano_atual"
echo $frase_do_ano
Variáveis em Scripts
Scripts seriam ineficazes sem variáveis, pois são elas que proporcionam a flexibilidade para criar soluções genéricas. Para ilustrar, vamos analisar um script que conta arquivos em um diretório.
Crie um arquivo de texto chamado `contagem.sh` e adicione o seguinte:
#!/bin/bash diretorio_alvo=/etc contagem_arquivos=$(ls $diretorio_alvo | wc -l) echo $contagem_arquivos arquivos em $diretorio_alvo
Antes de executar, torne-o executável:
chmod +x contagem.sh
Execute o script:
./contagem.sh
Este script funciona assim:
A variável `diretorio_alvo` armazena o caminho “/etc”.
A variável `contagem_arquivos` recebe o resultado de uma substituição de comando ($()). Este comando avalia os comandos entre parênteses e retorna o valor resultante.
O comando dentro da substituição (`ls $diretorio_alvo | wc -l`) lista os arquivos no diretório “/etc” e envia a saída para o comando `wc`, que conta o número de linhas (-l). O resultado é o número de arquivos e subdiretórios em “/etc”.
O comando `echo` exibe o resultado.
Entretanto, esse script só funciona com o diretório “/etc”. Como generalizá-lo para qualquer diretório?
Parâmetros de Linha de Comando
Comandos como `ls` e `wc` usam parâmetros de linha de comando, que fornecem informações sobre o que se deseja fazer. Por exemplo, `ls ~ -a` lista arquivos no diretório pessoal, incluindo arquivos ocultos.
Scripts também podem aceitar parâmetros de linha de comando, referenciados como $1 (primeiro parâmetro), $2 (segundo), e assim por diante. O script ($0) é reservado para o nome do arquivo do script.
Vamos modificar o script, salvando-o como `contagem2.sh`:
#!/bin/bash diretorio_alvo=$1 contagem_arquivos=$(ls $diretorio_alvo | wc -l) echo $contagem_arquivos arquivos em $diretorio_alvo
Agora, a variável `diretorio_alvo` recebe o valor do primeiro parâmetro ($1). O script agora é genérico, funcionando com qualquer diretório.
Torne-o executável:
chmod +x contagem2.sh
Experimente com alguns diretórios:
./contagem2.sh /etc
./contagem2.sh /usr
./contagem2.sh /bin
Para simplificar, a variável `diretorio_alvo` pode ser dispensada, usando $1 diretamente:
#!/bin/bash contagem_arquivos=$(ls $1 | wc -l) echo $contagem_arquivos arquivos em $1
Variáveis Especiais
A variável $0 armazena o nome do arquivo do script, útil em situações de registro, para identificar qual processo gerou um evento.
Outras variáveis especiais incluem:
$#: Número de parâmetros de linha de comando.
[email protected]: Todos os parâmetros de linha de comando.
$?: Status de saída do último processo.
$$: ID do processo (PID) do script.
$USER: Nome do usuário que executa o script.
$HOSTNAME: Nome do host do computador.
$SECONDS: Tempo em segundos que o script está rodando.
$RANDOM: Número aleatório.
$LINENO: Número da linha atual do script.
Para ver todas elas, crie um arquivo chamado `especial.sh`:
#!/bin/bash echo "Número de parâmetros: $#" echo "Parâmetros: [email protected]" echo "Primeiro parâmetro: $1" echo "Nome do script: $0" pwd echo "Status do comando pwd: $?" echo "PID do script: $$" echo "Usuário: $USER" echo "Hostname: $HOSTNAME" sleep 3 echo "Tempo de execução: $SECONDS segundos" echo "Número aleatório: $RANDOM" echo "Linha atual: $LINENO do script"
Torne-o executável:
chmod +x especial.sh
Execute com alguns parâmetros:
Variáveis de Ambiente
O Bash utiliza variáveis de ambiente para definir e armazenar configurações do ambiente ao ser iniciado. Elas incluem informações como nome de usuário, localidade, tamanho do histórico de comandos, editor padrão e outras.
Para visualizar as variáveis de ambiente, execute:
env | less
Role a lista para encontrar variáveis úteis em seus scripts.
Exportando Variáveis
Quando um script é executado, ele opera em um processo próprio. As variáveis utilizadas nesse script não são visíveis fora desse processo. Para compartilhar variáveis com outros scripts que o script principal executa, é necessário exportá-las.
Vamos criar dois scripts. O primeiro, `script_um.sh`:
#!/bin/bash primeira_var=alfa segunda_var=beta echo "$0: primeira_var=$primeira_var, segunda_var=$segunda_var" export primeira_var export segunda_var ./script_dois.sh echo "$0: primeira_var=$primeira_var, segunda_var=$segunda_var"
Este script cria e exibe as variáveis, exporta-as e chama `script_dois.sh`. Após `script_dois.sh` finalizar, o script principal exibe as variáveis novamente.
O segundo script, `script_dois.sh`:
#!/bin/bash echo "$0: primeira_var=$primeira_var, segunda_var=$segunda_var" primeira_var=gama segunda_var=delta echo "$0: primeira_var=$primeira_var, segunda_var=$segunda_var"
Este script exibe as variáveis, atribui novos valores e os exibe novamente.
Torne os scripts executáveis:
chmod +x script_um.sh chmod +x script_dois.sh
Execute `script_um.sh`:
./script_um.sh
A saída indica:
`script_um.sh` imprime os valores iniciais das variáveis.
`script_dois.sh` imprime os valores recebidos (alfa e beta).
`script_dois.sh` altera os valores para gama e delta.
`script_um.sh` imprime novamente as variáveis, mostrando que seus valores originais não foram alterados.
As alterações feitas no segundo script não afetam as variáveis do script principal, pois as variáveis são copiadas para o segundo script, e não passadas por referência.
Aspas em Variáveis
Note que scripts usam aspas duplas (“) para referenciar variáveis, garantindo que seus valores sejam usados corretamente na execução do script.
Se o valor de uma variável contiver espaços, as aspas são essenciais ao atribuir o valor. O Bash usa espaços como delimitadores por padrão.
Exemplo:
nome_site=Exemplo de Site
O Bash interpreta o espaço como um novo comando. O `echo` mostra que a variável `nome_site` está vazia.
Usando aspas:
nome_site="Exemplo de Site"
O valor é reconhecido como um único texto e a variável `nome_site` recebe o valor corretamente.
O Comando `echo` é Útil
Familiarizar-se com a substituição de comandos, aspas e cifrões pode levar tempo.
Antes de executar um comando no Bash, utilize o `echo` na frente dele. Assim, você confirma se o resultado será o desejado e detecta erros na sintaxe.