Linux - Variáveis
As variáveis tornam o script mais flexível, permitindo evitar valores fixos. Essencialmente, uma variável representa um identificador ou nome associado a um valor dinâmico, que pode mudar durante a execução do programa.
Para definir variáveis, usamos a seguinte sintaxe:
nome_variavel=valor_variavel
Por exemplo:
message="Hello www.programicio.com"
Aqui, a variável message é definida com o valor "Hello www.programicio.com"
.
Para acessar o valor de uma variável, utilizamos seu nome precedido pelo símbolo $
. Por exemplo, para exibir o valor da variável usando o comando echo
:
echo $message
Podemos definir variáveis e trabalhar com elas tanto em um script shell quanto diretamente no console:
programicio@Programicio:~$ message="Hello www.programicio.com" programicio@Programicio:~$ echo $message Hello www.programicio.com
É importante notar que o sistema já define várias variáveis globais, conhecidas como variáveis de ambiente, durante a inicialização. Podemos obter essas variáveis usando o comando
env
:
programicio@Programicio:~$ env SHELL=/bin/bash GNOME_SHELL_SESSION_MODE=ubuntu XMODIFIERS=@im=ibus DESKTOP_SESSION=ubuntu GTK_MODULES=gail:atk-bridge PWD=/home/programicio LOGNAME=programicio XDG_SESSION_DESKTOP=ubuntu XDG_SESSION_TYPE=wayland HOME=/home/programicio USERNAME=programicio USER=programicio ...
Por exemplo, entre essas variáveis, temos a variável global USER
, que armazena o nome do usuário atual. Podemos exibir seu valor no console:
programicio@Programicio:~$ echo $USER programicio
Da mesma forma, podemos trabalhar com várias variáveis. Por exemplo, vamos definir o seguinte script shell:
#!/bin/bash # script que define as variáveis NAME e AGE e exibe seus valores no console NAME="Tom" AGE=39 echo $NAME echo $AGE exit 0
Aqui, definimos duas variáveis: NAME
e AGE
, e em seguida exibimos seus valores no console. Vamos executar o script:
programicio@Programicio:~$ bash hello Tom 39
Uma característica distintiva das variáveis é que podemos alterar seus valores. Por exemplo, vamos definir o seguinte script:
#!/bin/bash # script que altera dinamicamente o valor de uma variável message="Hello www.programicio.com" echo $message message="Hello World" echo $message exit 0
Neste caso, definimos o valor da variável message
duas vezes, e após a segunda definição, exibimos o valor da variável novamente no console. Vamos executar o script:
Escopo das Variáveis
Ao definir variáveis, é importante lembrar que elas são definidas apenas para o shell atual. Isso significa que, se você iniciar um subshell a partir do shell atual, a variável não estará disponível lá. Da mesma forma, se você definir uma variável em um subshell, ela não estará disponível no shell pai: assim que você sair do subshell e voltar para o shell pai, a variável não estará mais disponível. Por exemplo, considere o seguinte script dentro do arquivo hello
:
#!/bin/bash echo $message exit 0
Este script tenta exibir o valor da variável message
, mas não a define. Presume-se que a variável será definida externamente. No console, defina a variável message
e execute o script com o comando bash
:
programicio@Programicio:~$ message="Hello www.programicio.com" programicio@Programicio:~$ echo $message Hello www.programicio.com programicio@Programicio:~$ bash hello programicio@Programicio:~$ echo $message Hello www.programicio.com
Primeiro, definimos a variável message
no shell atual e a exibimos no console. Em seguida, o comando bash hello
executa o script hello
em um novo subshell. Observamos que o comando echo
no script não exibe nada, pois a variável message
do shell pai não está acessível no subshell. No entanto, após a execução do script e o fechamento do subshell, ainda podemos usar a variável message
.
Para tornar uma variável do shell pai acessível a todos os subshells, ela deve ser definida usando o comando export
:
programicio@Programicio:~$ export message="Hello www.programicio.com" programicio@Programicio:~$ echo $message Hello www.programicio.com programicio@Programicio:~$ bash hello Hello www.programicio.com programicio@Programicio:~$ echo $message Hello www.programicio.com
Se precisar que as variáveis estejam disponíveis globalmente, mesmo após reiniciar o computador, elas devem ser adicionadas às variáveis de ambiente.
Incorporando Variáveis
Uma técnica comum ao trabalhar com variáveis é incorporá-las (sourcing) no shell atual. Nesse caso, as variáveis geralmente são definidas em um arquivo. Por exemplo, defina um arquivo vars
no diretório home com o seguinte conteúdo:
#!/bin/bash name="Tom" age=39 email="tom@mimimail.com"
Aqui, três variáveis são definidas. Incorpore o arquivo no console e acesse as variáveis:
programicio@Programicio:~$ . vars programicio@Programicio:~$ echo $name Tom programicio@Programicio:~$ echo $age 39 programicio@Programicio:~$ echo $email tom@mimimail.com
O primeiro comando, . vars
, incorpora o conteúdo do arquivo no console, permitindo acessar as variáveis.
Recebendo Dados do Usuário
Com o comando read
, é possível receber dados do usuário e armazená-los em uma variável. Por exemplo, defina o seguinte script hello
:
#!/bin/bash # script que lê a entrada de dados pelo usuário em uma variável NAME echo Enter your name: read NAME echo -e "Your name:\t $NAME" exit 0
Aqui, o comando echo
inicialmente exibe uma mensagem solicitando que o usuário insira o nome. Em seguida, o comando read NAME
armazena os dados inseridos na variável NAME
.
Em seguida, exibimos o nome usando tabulação \t
. Para que esta sequência seja interpretada como tabulação, o comando echo usa a opção -e
.
Vamos executar o script:
programicio@Programicio:~$ bash hello Enter your name: Programicio Your name: Programicio
Após exibir a mensagem de solicitação, podemos inserir alguns dados, e eles serão armazenados na variável NAME
.