Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
105.1 Lição 2
Tópico 105: Shells e scripts do Shell
105.1 Personalizar e trabalhar no ambiente shell
  • 105.1 Lição 1
  • 105.1 Lição 2
  • 105.1 Lição 3
105.2 Editar e escrever scripts simples
  • 105.2 Lição 1
  • 105.2 Lição 2
Tópico 106: Interfaces de usuário e Desktops
106.1 Instalar e configurar o X11
  • 106.1 Lição 1
106.2 Desktops gráficos
  • 106.2 Lição 1
106.3 Acessibilidade
  • 106.3 Lição 1
Tópico 107: Tarefas administrativas
107.1 Administrar contas de usuário, grupos e arquivos de sistema relacionados
  • 107.1 Lição 1
  • 107.1 Lição 2
107.2 Automatizar e agendar tarefas administrativas de sistema
  • 107.2 Lição 1
  • 107.2 Lição 2
107.3 Localização e internacionalização
  • 107.3 Lição 1
Tópico 108: Serviços essenciais do sistema
108.1 Manutenção da data e hora do sistema
  • 108.1 Lição 1
  • 108.1 Lição 2
108.2 Log do sistema
  • 108.2 Lição 1
  • 108.2 Lição 2
108.3 Fundamentos de MTA (Mail Transfer Agent)
  • 108.3 Lição 1
108.4 Configurar impressoras e impressão
  • 108.4 Lição 1
Tópico 109: Fundamentos de Rede
109.1 Fundamentos de protocolos de internet
  • 109.1 Lição 1
  • 109.1 Lição 2
109.2 Configuração persistente de rede
  • 109.2 Lição 1
  • 109.2 Lição 2
109.3 Soluções para problemas simples de rede
  • 109.3 Lição 1
  • 109.3 Lição 2
109.4 Configurar DNS cliente
  • 109.4 Lição 1
Tópico 110: Segurança
110.1 Tarefas administrativas de segurança
  • 110.1 Lição 1
110.2 Configurar a segurança do host
  • 110.2 Lição 1
110.3 Proteção de dados com criptografia
  • 110.3 Lição 1
  • 110.3 Lição 2
How to get certified
  1. Tópico 105: Shells e scripts do Shell
  2. 105.1 Personalizar e trabalhar no ambiente shell
  3. 105.1 Lição 2

105.1 Lição 2

Certificação:

LPIC-1

Versão:

5.0

Tópico:

105 Shells e scripts do Shell

Objetivo:

105.1 Personalizar e usar o ambiente do shell

Lição:

2 de 3

Introdução

Pense em uma variável como uma caixa imaginária na qual colocamos temporariamente uma informação. Como no caso dos scripts de inicialização, o Bash classifica as variáveis como shell/local (aquelas que vivem apenas dentro dos limites do shell em que foram criadas) ou ambiente/global (aquelas que são herdadas por shells e/ou processos filhos). Na lição anterior, conhecemos melhor os shells e seus scripts de configuração ou inicialização. Agora é o momento de frisar que o poder desses arquivos de inicialização está no fato de que eles nos permitem usar variáveis — bem como aliases e funções — que nos ajudam a criar e personalizar o ambiente de shell de nossa escolha.

Variáveis: atribuição e referência

Uma variável pode ser definida como um nome que contém um valor.

No Bash, a atribuição um valor a um nome é chamado de atribuição de variável e é a maneira pela qual criamos ou definimos variáveis. Por outro lado, o processo de acesso ao valor contido no nome é denominado referenciamento de variável.

A sintaxe para atribuir variáveis é:

<nome_da_variável>=<valor_da_variável>

Por exemplo:

$ distro=zorinos

A variável distro é igual a zorinos, ou seja, há uma parte da memória que contém o valor zorinos — sendo distro o indicador para ele.

Observe, no entanto, que não pode haver nenhum espaço em qualquer lado do sinal de igual ao se atribuir uma variável:

$ distro =zorinos
-bash: distro: command not found
$ distro= zorinos
-bash: zorinos: command not found

Devido ao nosso erro, o Bash leu distro e zorinos como comandos.

Para referenciar uma variável (ou seja, para verificar seu valor), usamos o comando echo antes do nome da variável com um sinal $:

$ echo $distro
zorinos

Nomes de variáveis

Ao escolher o nome das variáveis, existem certas regras que devemos levar em consideração.

O nome da variável pode conter letras (a-z,A-Z), números (0-9) e sublinhados (_):

$ distro=zorinos
$ echo $distro
zorinos
$ DISTRO=zorinos
$ echo $DISTRO
zorinos
$ distro_1=zorinos
$ echo $distro_1
zorinos
$ _distro=zorinos
$ echo $_distro
zorinos

Ele não deve começar com um número para não confundir o Bash:

$ 1distro=zorinos
-bash: 1distro=zorinos: command not found

Não deve conter espaços (nem mesmo entre aspas); por convenção, os sublinhados são usados no lugar dos espaços:

$ "my distro"=zorinos
-bash: my: command not found
$ my_distro=zorinos
$ echo $my_distro
zorinos

Valores das variáveis

No que diz respeito à referência ou valor das variáveis, também é importante considerar uma série de regras.

As variáveis podem conter quaisquer caracteres alfanuméricos (a-z,A-Z,0-9), além da maioria dos outros caracteres (?,!,*,.,/, etc.):

$ distro=zorin12.4?
$ echo $distro
zorin12.4?

Os valores das variáveis devem ser postos entre aspas se contiverem espaços simples:

$ distro=zorin 12.4
-bash: 12.4: command not found
$ distro="zorin 12.4"
$ echo $distro
zorin 12.4
$ distro='zorin 12.4'
$ echo $distro
zorin 12.4

Os valores das variáveis também devem ser postos entre aspas se contiverem caracteres como os usados para redirecionamento (<,>) ou o símbolo de barra vertical (|). A única coisa que o comando a seguir faz é criar um arquivo vazio chamado zorin:

$ distro=>zorin
$ echo $distro

$ ls zorin
zorin

Mas quando usamos as aspas, a coisa funciona:

$ distro=">zorin"
$ echo $distro
>zorin

No entanto, aspas simples e duplas nem sempre são intercambiáveis. Dependendo do que estamos fazendo com uma variável (atribuindo ou referenciando), o uso de uma ou de outra tem implicações e produzirá resultados diferentes. No contexto da atribuição de variáveis, as aspas simples consideram literalmente todos os caracteres do valor da variável, enquanto as aspas duplas permitem a substituição de variáveis:

$ lizard=uromastyx
$ animal='My $lizard'
$ echo $animal
My $lizard
$ animal="My $lizard"
$ echo $animal
My uromastyx

Por outro lado, ao referenciar uma variável cujo valor inclui alguns espaços iniciais (ou extras) — às vezes combinados com asteriscos — é obrigatório usar aspas duplas após o comando echo para evitar divisão de campos e expansão de nome de caminho:

$ lizard="   genus   |   uromastyx"
$ echo $lizard
genus | uromastyx
$ echo "$lizard"
   genus   |   uromastyx

Se a referência da variável contiver um ponto de exclamação no final, este deve ser o último caractere da string (caso contrário, o Bash pensará que estamos nos referindo a um evento de history):

$ distro=zorin.?/!os
-bash: !os: event not found
$ distro=zorin.?/!
$ echo $distro
zorin.?/!

Todas as barras invertidas devem ser escapadas com outra barra invertida. Aliás, se uma barra invertida for o último caractere na string e não o escaparmos, o Bash interpretará que queremos uma quebra de linha e criará uma nova linha:

$ distro=zorinos\
>
$ distro=zorinos\\
$ echo $distro
zorinos\

Nas próximas duas seções, resumiremos as principais diferenças entre as variáveis locais e de ambiente.

Variáveis locais ou do Shell

Variáveis locais ou de shell existem apenas no shell em que foram criadas. Por convenção, as variáveis locais são escritas em letras minúsculas.

Para realizar alguns testes, vamos criar uma variável local. Conforme explicado acima, escolhemos um nome de variável apropriado e o igualamos a um valor apropriado. Por exemplo:

$ reptile=tortoise

Vamos agora usar o comando echo para referenciar nossa variável e verificar se tudo correu conforme o esperado:

$ echo $reptile
tortoise

Em certos cenários — como ao escrever scripts — a imutabilidade pode ser um recurso interessante das variáveis. Se quisermos que nossas variáveis sejam imutáveis, podemos criá-las em modo readonly (somente leitura):

$ readonly reptile=tortoise

Ou transformá-las em somente leitura depois de criá-las:

$ reptile=tortoise
$ readonly reptile

Agora, se tentarmos alterar o valor de reptile, o Bash se recusará:

$ reptile=lizard
-bash: distro: readonly variable
Note

Para listar todas as variáveis somente leitura da sessão atual, digite readonly ou readonly -p no terminal.

Um comando útil ao lidar com variáveis locais é set.

O set exibe uma saída com todas as variáveis e funções do shell atribuídas atualmente. Como podem ser muitas linhas (experimente você mesmo!), recomendamos usá-lo em combinação com um paginador como o less:

$ set | less
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="4" [2]="12" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.4.12(1)-release'
(...)

Será que nossa variável reptile está aqui?

$ set | grep reptile
reptile=tortoise

Sim, aí está ela!

Todavia, reptile — por ser uma variável local — não será herdada por nenhum processo filho nascido do shell atual:

$ bash
$ set | grep reptile
$

E, é claro, também não podemos ecoar seu valor:

$ echo $reptile
$
Note

Ao digitar o comando bash no terminal, abrimos um novo shell (filho).

Para remover variáveis definidas (locais ou globais), usamos o comando unset:

$ echo $reptile
tortoise
$ unset reptile
$ echo $reptile
$
Note

unset deve ser seguido somente pelo nome da variável (não precedido pelo símbolo $).

Variáveis globais ou de ambiente

Existem variáveis globais ou de ambiente para o shell atual, bem como para todos os processos subsequentes gerados a partir dele. Por convenção, as variáveis de ambiente são escritas em letras maiúsculas:

$ echo $SHELL
/bin/bash

Podemos passar recursivamente o valor dessas variáveis para outras variáveis e o valor da última acabará por se expandir para o da primeira:

$ my_shell=$SHELL
$ echo $my_shell
/bin/bash
$ your_shell=$my_shell
$ echo $your_shell
/bin/bash
$ our_shell=$your_shell
$ echo $our_shell
/bin/bash

Para que uma variável local do shell se torne uma variável de ambiente, usamos o comando export:

$ export reptile

Com export reptile, transformamos nossa variável local em uma variável de ambiente para que os shells filhos possam reconhecê-la e usá-la:

$ bash
$ echo $reptile
tortoise

Da mesma maneira, export pode ser usado para definir e exportar uma variável de uma só vez:

$ export amphibian=frog

Agora podemos abrir uma nova instância do Bash e referenciar com sucesso a nova variável:

$ bash
$ echo $amphibian
frog
Note

Com export -n <VARIABLE-NAME>, a variável será novamente transformada em variável local do shell.

O comando export também nos dá uma lista de todas as variáveis de ambiente existentes quando inserido sozinho (ou com a opção -p):

$ export
declare -x HOME="/home/user2"
declare -x LANG="en_GB.UTF-8"
declare -x LOGNAME="user2"
(...)
declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
declare -x PWD="/home/user2"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="192.168.1.10 49330 22"
declare -x SSH_CONNECTION="192.168.1.10 49330 192.168.1.7 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm-256color"
declare -x USER="user2"
declare -x XDG_RUNTIME_DIR="/run/user/1001"
declare -x XDG_SESSION_ID="8"
declare -x reptile="tortoise"
Note

O comando declare -x equivale a export.

Dois outros comandos que podem ser usados para imprimir na tela uma lista de todas as variáveis de ambiente são env e printenv:

$ env
SSH_CONNECTION=192.168.1.10 48678 192.168.1.7 22
LANG=en_GB.UTF-8
XDG_SESSION_ID=3
USER=user2
PWD=/home/user2
HOME=/home/user2
SSH_CLIENT=192.168.1.10 48678 22
SSH_TTY=/dev/pts/0
MAIL=/var/mail/user2
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LOGNAME=user2
XDG_RUNTIME_DIR=/run/user/1001
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
_=/usr/bin/env

Além de ser um sinônimo de env, às vezes podemos usar printenv de forma semelhante à que usamos o comando echo para verificar o valor de uma variável:

$ echo $PWD
/home/user2
$ printenv PWD
/home/user2

Note, entretanto, que com printenv o nome da variável não é precedido por $.

Note

PWD armazena o caminho do diretório de trabalho atual. Aprenderemos mais sobre esta e outras variáveis de ambiente comuns posteriormente.

Executando um programa em um ambiente modificado

O env pode ser usado para modificar o ambiente do shell no momento da execução de um programa.

Para iniciar uma nova sessão do Bash com o ambiente o mais vazio possível — removendo a maioria das variáveis (além de funções e aliases) — usamos env com a opção -i:

$ env -i bash

Agora, a maioria das nossas variáveis de ambiente se foi:

$ echo $USER
$

Restam apenas algumas:

$ env
LS_COLORS=
PWD=/home/user2
SHLVL=1
_=/usr/bin/printenv

Também podemos usar env para definir uma variável particular para um programa determinado.

Em nossa lição anterior, ao discutir shells não interativos sem login, vimos como os scripts não lêem nenhum arquivo de inicialização padrão, mas, em vez disso, procuram o valor da variável BASH_ENV e a usam como arquivo de inicialização, se ela existir.

Vamos demonstrar esse processo:

  1. Criamos nosso próprio arquivo de inicialização chamado .startup_script com o seguinte conteúdo:

    CROCODILIAN=caiman
  2. Escrevemos um script do Bash chamado test_env.sh com o seguinte conteúdo:

    #!/bin/bash
    
    echo $CROCODILIAN
  3. Definimos o bit executável para nosso script test_env.sh:

    $ chmod +x test_env.sh
  4. Finalmente, usamos env para fazer com que BASH_ENV rode .startup_script para test_env.sh:

    $ env BASH_ENV=/home/user2/.startup_script ./test_env.sh
    caiman

    O comando env está implícito, mesmo que o eliminemos:

    $ BASH_ENV=/home/user2/.startup_script ./test_env.sh
    caiman
Note

Se você não entendeu a linha #!/bin/bash ou o comando chmod +x, não entre em pânico! Aprenderemos todo o necessário sobre os scripts do shell em lições futuras. Neste momento, lembre-se apenas de que para executar um script de dentro de seu próprio diretório, usamos ./some_script.

Variáveis de ambiente comuns

Agora é hora de revisar algumas das variáveis de ambiente mais relevantes que são definidas nos arquivos de configuração do Bash.

DISPLAY

Relacionada ao servidor X, o valor desta variável geralmente se compõe de três elementos:

  • O nome do host (localhost se esse dado estiver ausente) no qual o servidor X está rodando.

  • Dois pontos como delimitador.

  • Um número (normalmente é 0 e se refere à tela do computador).

    $ printenv DISPLAY
    :0

    Um valor vazio para esta variável indica um servidor sem um X Window System. Um número extra — como em my.xserver:0:1 — faria referência ao número da tela, caso haja mais de uma.

HISTCONTROL

Esta variável controla quais comandos são salvos em HISTFILE (veja abaixo). São três valores possíveis:

ignorespace

Comandos iniciados com um espaço não serão salvos.

ignoredups

Um comando idêntico ao anterior não será salvo.

ignoreboth

Comandos que se encaixam em uma das duas categorias anteriores não serão salvos.

$ echo $HISTCONTROL
ignoreboth
HISTSIZE

Define o número de comandos a armazenar na memória enquanto durar a sessão do shell.

$ echo $HISTSIZE
1000
HISTFILESIZE

Define o número de comandos a serem salvos em HISTFILE, tanto no início quanto no final da sessão:

$ echo $HISTFILESIZE
2000
HISTFILE

O nome do arquivo que armazena todos os comandos à medida que são digitados. Por padrão, esse arquivo está localizado em ~/.bash_history:

$ echo $HISTFILE
/home/user2/.bash_history
Note

Para visualizar o conteúdo de HISTFILE, é só digitar history. Alternativamente, podemos especificar o número de comandos que queremos ver passando um argumento (o número dos comandos mais recentes) para history, como em history 3.

HOME

Esta variável armazena o caminho absoluto do diretório home do usuário atual e é definido quando o usuário faz login.

Este trecho de código — de ~/.profile — é auto-explicativo (ele abre e executa "$HOME/.bashrc", se existir):

    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi
Note

Se você não entendeu muito bem a declaração if, não se preocupe: basta consultar as lições sobre os scripts do shell.

Lembre que ~ equivale a $HOME:

$ echo ~; echo $HOME
/home/carol
/home/carol
Note

Os comandos podem ser concatenados com um ponto e vírgula (;).

Também podemos provar esse ponto com uma declaração if:

$ if [ ~ == "$HOME" ]; then echo "true"; else echo "false"; fi
true
Note

Lembre-se: o sinal de igual = é usado para a atribuição de variáveis. == é usado para testar a igualdade.

HOSTNAME

Esta variável armazena o nome TCP/IP do computador hospedeiro:

$ echo $HOSTNAME
debian
HOSTTYPE

Armazena a arquitetura do processador do computador hospedeiro:

$ echo $HOSTTYPE
x86_64
LANG

Esta variável salva o idioma do sistema:

$ echo $LANG
en_UK.UTF-8
LD_LIBRARY_PATH

Esta variável consiste em um conjunto de diretórios separados por dois pontos nos quais as bibliotecas compartilhadas são compartilhadas por programas:

$ echo $LD_LIBRARY_PATH
/usr/local/lib
MAIL

Esta variável armazena o arquivo no qual o Bash procura por email:

$ echo $MAIL
/var/mail/carol

Outro valor comum para esta variável é /var/spool/mail/$USER.

MAILCHECK

Esta variável armazena um valor numérico que indica, em segundos, a frequência com que o Bash verifica se há novas mensagens:

$ echo $MAILCHECK
60
PATH

Esta variável de ambiente armazena a lista de diretórios onde o Bash procura por arquivos executáveis quando instruído a executar qualquer programa. Em nossa máquina de exemplo, esta variável é definida através do arquivo de sistema /etc/profile:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

Através da declaração if, a identidade do usuário é testada e — dependendo do resultado do teste (root ou outro) — obtemos um PATH ou o outro. Finalmente, o PATH escolhido é propagado com export.

Há duas coisas a observar em relação ao valor de PATH:

  • Os nomes de diretórios são escritos usando caminhos absolutos.

  • O sinal de dois pontos é usado como delimitador.

    Se quisermos incluir a pasta /usr/local/sbin no PATH para usuários regulares, modificamos a linha para que fique assim:

    (...)
    else
      PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin"
    fi
    export PATH

    Agora podemos ver como o valor da variável muda quando fazemos login como usuário regular:

    # su - carol
    $ echo $PATH
    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin
    Note

    Também poderíamos ter adicionado /usr/local/sbin ao PATH do usuário na linha de comando, seja digitando PATH=/usr/local/sbin:$PATH ou PATH=$PATH:/usr/local/sbin — a primeira opção torna /usr/local/sbin o primeiro diretório em que os arquivos executáveis serão buscados; a segunda faz dele o último.

PS1

Essa variável armazena o valor do prompt do Bash. No trecho de código a seguir (igualmente de /etc/profile), a declaração if testa a identidade do usuário e lhe atribui um prompt bastante personalizado ( # para root ou $ para usuários regulares):

if [ "`id -u`" -eq 0 ]; then
  PS1='# '
else
  PS1='$ '
fi
Note

O id de root é 0. Entre como root e teste você mesmo com id -u.

Eis algumas outras variáveis de prompt:

PS2

Normalmente definido como > e usado como prompt de continuação para comandos longos de muitas linhas.

PS3

Usado como prompt para o comando select.

PS4

Normalmente definido como + e usado para depuração.

SHELL

Esta variável armazena o caminho absoluto do shell atual:

$ echo $SHELL
/bin/bash
USER

Armazena o nome do usuário atual:

$ echo $USER
carol

Exercícios Guiados

  1. Analise a atribuição de variáveis na coluna “Comando(s)” e indique se a variável resultante é “Local” ou “Global”:

    Comando(s) Local Global

    debian=mother

    ubuntu=deb-based

    mint=ubuntu-based; export mint

    export suse=rpm-based

    zorin=ubuntu-based

  2. Estude o “Comando” e a “Saída” e explique o significado:

    Comando Saída Significado

    echo $HISTCONTROL

    ignoreboth

    echo ~

    /home/carol

    echo $DISPLAY

    reptilium:0:2

    echo $MAILCHECK

    60

    echo $HISTFILE

    /home/carol/.bash_history

  3. As variáveis da coluna “Comando errado” estão definidas incorretamente. Forneça as informações que faltam em “Comando correto” e “Referência da variável” para obter a “Saída esperada”:

    Comando errado Comando correto Referência da variável Saída esperada

    lizard =chameleon

    chameleon

    cool lizard=chameleon

    chameleon

    lizard=cha|me|leon

    cha|me|leon

    lizard=/** chameleon **/

    /** chamelon **/

    win_path=C:\path\to\dir\

    C:\path\to\dir\

  4. Considere a finalidade e escreva o comando apropriado:

    Finalidade Comando

    Definir o idioma do shell atual para Espanhol UTF-8 (es_ES.UTF-8).

    Imprimir o nome do diretório de trabalho atual.

    Referenciar a variável de ambiente que armazena as informações sobre as conexões ssh.

    Definir PATH de forma a incluir /home/carol/scripts como o último diretório para pesquisar executáveis.

    Definir o valor de my_path como PATH.

    Definir o valor de my_path para o de PATH.

  5. Crie uma variável local chamada mammal e atribua a ela o valor gnu:

  6. Usando a substituição de variáveis, crie outra variável local chamada var_sub com o valor apropriado para que, ao referenciá-la com echo $var_sub, possamos obter: The value of mammal is gnu:

  7. Transforme mammal em variável de ambiente:

  8. Procure por ela com set e grep:

  9. Procure por ela com env e grep:

  10. Crie, em dois comandos consecutivos, uma variável de ambiente chamada BIRD cujo valor é penguin:

  11. Crie, em um único comando, uma variável de ambiente chamada NEW_BIRD cujo valor é yellow-eyed penguin:

  12. Supondo que você é user2, crie uma pasta chamada bin em seu diretório inicial:

  13. Digite o comando para adicionar a pasta ~/bin a seu PATH para que este seja o primeiro diretório em que o bash busca por binários:

  14. Para garantir que o valor de PATH permaneça inalterado após uma reinicialização, qual trecho de código — na forma de uma declaração if — você incluiria em ~/.profile?

Exercícios Exploratórios

  1. let: mais do que avaliação de expressão aritmética:

    • Busque por let na página de manual ou na internet para entender suas implicações ao definir variáveis e crie uma nova variável local chamada my_val cujo valor é 10 — como resultado da soma de 5 e 5:

    • A seguir, crie outra variável chamada your_val cujo valor é 5 — como resultado da divisão do valor de my_val por 2:

  2. O resultado de um comando em uma variável? Pois é, isso é possível: chamamos de substituição de comando. Explore e estude a seguinte função, chamada music_info:

    music_info(){
    latest_music=`ls -l1t ~/Music | head -n 6`
    echo -e "Your latest 5 music files:\n$latest_music"
    }

    O resultado do comando ls -l1t ~/Music | head -n 6 se torna o valor da variável latest_music. Daí a variável latest_music é referenciada no comando echo (cuja saída mostra o número total de bytes ocupados pela pasta Music e os cinco últimos arquivos de música armazenados na pasta Music — um por linha).

    Qual dos seguintes é um sinônimo válido para

    latest_music=`ls -l1t ~/Music | head -n 6`

    Opção A:

    latest_music=$(ls -l1t ~/Music| head -n 6)

    Opção B:

    latest_music="(ls -l1t ~/Music| head -n 6)"

    Opção C:

    latest_music=((ls -l1t ~/Music| head -n 6))

Resumo

Nesta lição, aprendemos:

  • As variáveis são uma parte importantíssima do ambiente do shell, pois são usadas pelo próprio shell e também por outros programas.

  • Como atribuir e referenciar variáveis.

  • As diferenças entre variáveis locais e globais (ou de ambiente).

  • Como tornar as variáveis somente leitura.

  • Como transformar uma variável local em uma variável de ambiente com o comando export.

  • Como listar todas as variáveis de ambiente.

  • Como executar um programa em um ambiente modificado.

  • Como tornar as variáveis persistentes com a ajuda de scripts de inicialização.

  • Algumas variáveis de ambiente comuns: DISPLAY, HISTCONTROL, HISTSIZE, HISTFILESIZE, HISTFILE, HOME, HOSTNAME, HOSTTYPE, LANG, LD_LIBRARY_PATH, MAIL, MAILCHECK, PATH, PS1 (e outras variáveis de prompt), SHELL e USER.

  • O significado do til (~).

  • Noções básicas das declarações if.

Comandos usados nesta lição:

echo

Referencia uma variável.

ls

Listar o conteúdo do diretório.

readonly

Torna as variáveis imutáveis. Lista todas as variáveis somente leitura na sessão atual.

set

Lista todas as variáveis e funções na sessão atual.

grep

Imprimir linhas de acordo com um padrão.

bash

Lança um novo shell

unset

Remove as variáveis definidas.

export

Transforma uma variável local em uma variável de ambiente. Lista as variáveis de ambiente.

env

Lista as variáveis de ambiente. Executa um programa em um ambiente modificado.

printenv

Lista as variáveis de ambiente. Referencia uma variável.

chmod

Alterar os bits de modo de um arquivo, por exemplo para torná-lo executável.

history

Lista os comandos anteriores.

su

Alterar o ID do usuário ou torná-lo superusuário.

id

Imprime o ID do usuário.

Respostas aos Exercícios Guiados

  1. Analise a atribuição de variáveis na coluna “Comando(s)” e indique se a variável resultante é “Local” ou “Global”:

    Comando(s) Local Global

    debian=mother

    Sim

    Não

    ubuntu=deb-based

    Sim

    Não

    mint=ubuntu-based; export mint

    Não

    Sim

    export suse=rpm-based

    Não

    Sim

    zorin=ubuntu-based

    Sim

    Não

  2. Estude o “Comando” e a “Saída” e explique o significado:

    Comando Saída Significado

    echo $HISTCONTROL

    ignoreboth

    Tanto os comandos duplicados quanto aqueles que começam com um espaço não serão salvos em history.

    echo ~

    /home/carol

    O HOME de carol é /home/carol.

    echo $DISPLAY

    reptilium:0:2

    a máquina reptilium tem um servidor X rodando e estamos usando a segunda tela do sistema.

    echo $MAILCHECK

    60

    Verificação do email a cada um minuto.

    echo $HISTFILE

    /home/carol/.bash_history

    history será salvo em /home/carol/.bash_history.

  3. As variáveis da coluna “Comando errado” estão definidas incorretamente. Forneça as informações que faltam em “Comando correto” e “Referência da variável” para obter a “Saída esperada”:

    Comando errado Comando correto Referência da variável Saída esperada

    lizard =chameleon

    lizard=chameleon

    echo $lizard

    chameleon

    cool lizard=chameleon

    cool_lizard=chameleon (por exemplo)

    echo $cool_lizard

    chameleon

    lizard=cha|me|leon

    lizard="cha|me|leon" ou lizard='cha|me|leon'

    echo $lizard

    cha|me|leon

    lizard=/** chameleon **/

    lizard="/** chameleon **/" ou lizard='/** chameleon **/'

    echo "$lizard"

    /** chamelon **/

    win_path=C:\path\to\dir\

    win_path=C:\\path\\to\\dir\\

    echo $win_path

    C:\path\to\dir\

  4. Considere a finalidade e escreva o comando apropriado:

    Finalidade Comando

    Definir o idioma do shell atual para Espanhol UTF-8 (es_ES.UTF-8).

    LANG=es_ES.UTF-8

    Imprimir o nome do diretório de trabalho atual.

    echo $PWD ou pwd

    Referenciar a variável de ambiente que armazena as informações sobre as conexões ssh.

    echo $SSH_CONNECTION

    Definir PATH de forma a incluir /home/carol/scripts como o último diretório para pesquisar executáveis.

    PATH=$PATH:/home/carol/scripts

    Definir o valor de my_path como PATH.

    my_path=PATH

    Definir o valor de my_path para o de PATH.

    my_path=$PATH

  5. Crie uma variável local chamada mammal e atribua a ela o valor gnu:

    mammal=gnu
  6. Usando a substituição de variáveis, crie outra variável local chamada var_sub com o valor apropriado para que, ao referenciá-la com echo $var_sub, possamos obter: The value of mammal is gnu:

    var_sub="The value of mammal is $mammal"
  7. Transforme mammal em variável de ambiente:

    export mammal
  8. Procure por ela com set e grep:

    set | grep mammal
  9. Procure por ela com env e grep:

    env | grep mammal
  10. Crie, em dois comandos consecutivos, uma variável de ambiente chamada BIRD cujo valor é penguin:

    BIRD=penguin; export BIRD
  11. Crie, em um único comando, uma variável de ambiente chamada NEW_BIRD cujo valor é yellow-eyed penguin:

    export NEW_BIRD="yellow-eyed penguin"

    ou

    export NEW_BIRD='yellow-eyed penguin'
  12. Supondo que você é user2, crie uma pasta chamada bin em seu diretório inicial:

    mkdir ~/bin

    ou

    mkdir /home/user2/bin

    ou

    mkdir $HOME/bin
  13. Digite o comando para adicionar a pasta ~/bin a seu PATH para que este seja o primeiro diretório em que o bash busca por binários:

    PATH="$HOME/bin:$PATH"

    PATH=~/bin:$PATH ou PATH=/home/user2/bin:$PATH são igualmente válidos.

  14. Para garantir que o valor de PATH permaneça inalterado após uma reinicialização, qual trecho de código — na forma de uma declaração if — você incluiria em ~/.profile?

    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi

Respostas aos Exercícios Exploratórios

  1. let: mais do que avaliação de expressão aritmética:

    • Busque por let na página de manual ou na internet para entender suas implicações ao definir variáveis e crie uma nova variável local chamada my_val cujo valor é 10 — como resultado da soma de 5 e 5:

      let "my_val = 5 + 5"

      ou

      let 'my_val = 5 + 5'
    • A seguir, crie outra variável chamada your_val cujo valor é 5 — como resultado da divisão do valor de my_val por 2:

      let "your_val = $my_val / 2"

      ou

      let 'your_val = $my_val / 2'
  2. O resultado de um comando em uma variável? Pois é, isso é possível: chamamos de substituição de comando. Explore e estude a seguinte função, chamada music_info:

    music_info(){
    latest_music=`ls -l1t ~/Music | head -n 6`
    echo -e "Your latest 5 music files:\n$latest_music"
    }

    O resultado do comando ls -l1t ~/Music | head -n 6 se torna o valor da variável latest_music. Daí a variável latest_music é referenciada no comando echo (cuja saída mostra o número total de bytes ocupados pela pasta Music e os cinco últimos arquivos de música armazenados na pasta Music — um por linha).

    Qual dos seguintes é um sinônimo válido para

    latest_music=`ls -l1t ~/Music | head -n 6`

    É a opção A:

    latest_music=$(ls -l1t ~/Music| head -n 6)

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

105.1 Personalizar e trabalhar no ambiente shell (105.1 Lição 3)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.