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 |
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 |
Para remover variáveis definidas (locais ou globais), usamos o comando unset
:
$ echo $reptile tortoise $ unset reptile $ echo $reptile $
Note
|
|
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 |
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 |
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
|
|
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:
-
Criamos nosso próprio arquivo de inicialização chamado
.startup_script
com o seguinte conteúdo:CROCODILIAN=caiman
-
Escrevemos um script do Bash chamado
test_env.sh
com o seguinte conteúdo:#!/bin/bash echo $CROCODILIAN
-
Definimos o bit executável para nosso script
test_env.sh
:$ chmod +x test_env.sh
-
Finalmente, usamos
env
para fazer com queBASH_ENV
rode.startup_script
paratest_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 |
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
NotePara visualizar o conteúdo de
HISTFILE
, é só digitarhistory
. Alternativamente, podemos especificar o número de comandos que queremos ver passando um argumento (o número dos comandos mais recentes) parahistory
, como emhistory 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
NoteSe 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
NoteOs 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
NoteLembre-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 umPATH
ou o outro. Finalmente, oPATH
escolhido é propagado comexport
.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
noPATH
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
NoteTambém poderíamos ter adicionado
/usr/local/sbin
aoPATH
do usuário na linha de comando, seja digitandoPATH=/usr/local/sbin:$PATH
ouPATH=$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çãoif
testa a identidade do usuário e lhe atribui um prompt bastante personalizado (#
pararoot
ou$
para usuários regulares):if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi
NoteO
id
deroot
é0
. Entre comoroot
e teste você mesmo comid -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
-
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
-
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
-
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\
-
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
comoPATH
.Definir o valor de
my_path
para o dePATH
. -
Crie uma variável local chamada
mammal
e atribua a ela o valorgnu
: -
Usando a substituição de variáveis, crie outra variável local chamada
var_sub
com o valor apropriado para que, ao referenciá-la comecho $var_sub
, possamos obter:The value of mammal is gnu
: -
Transforme
mammal
em variável de ambiente: -
Procure por ela com
set
egrep
: -
Procure por ela com
env
egrep
: -
Crie, em dois comandos consecutivos, uma variável de ambiente chamada
BIRD
cujo valor épenguin
: -
Crie, em um único comando, uma variável de ambiente chamada
NEW_BIRD
cujo valor éyellow-eyed penguin
: -
Supondo que você é
user2
, crie uma pasta chamadabin
em seu diretório inicial: -
Digite o comando para adicionar a pasta
~/bin
a seuPATH
para que este seja o primeiro diretório em que obash
busca por binários: -
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çãoif
— você incluiria em~/.profile
?
Exercícios Exploratórios
-
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 chamadamy_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 demy_val
por 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ávellatest_music
. Daí a variávellatest_music
é referenciada no comandoecho
(cuja saída mostra o número total de bytes ocupados pela pastaMusic
e os cinco últimos arquivos de música armazenados na pastaMusic
— 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
eUSER
. -
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
-
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
-
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
decarol
é/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
. -
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"
oulizard='cha|me|leon'
echo $lizard
cha|me|leon
lizard=/** chameleon **/
lizard="/** chameleon **/"
oulizard='/** chameleon **/'
echo "$lizard"
/** chamelon **/
win_path=C:\path\to\dir\
win_path=C:\\path\\to\\dir\\
echo $win_path
C:\path\to\dir\
-
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
oupwd
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
comoPATH
.my_path=PATH
Definir o valor de
my_path
para o dePATH
.my_path=$PATH
-
Crie uma variável local chamada
mammal
e atribua a ela o valorgnu
:mammal=gnu
-
Usando a substituição de variáveis, crie outra variável local chamada
var_sub
com o valor apropriado para que, ao referenciá-la comecho $var_sub
, possamos obter:The value of mammal is gnu
:var_sub="The value of mammal is $mammal"
-
Transforme
mammal
em variável de ambiente:export mammal
-
Procure por ela com
set
egrep
:set | grep mammal
-
Procure por ela com
env
egrep
:env | grep mammal
-
Crie, em dois comandos consecutivos, uma variável de ambiente chamada
BIRD
cujo valor épenguin
:BIRD=penguin; export BIRD
-
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'
-
Supondo que você é
user2
, crie uma pasta chamadabin
em seu diretório inicial:mkdir ~/bin
ou
mkdir /home/user2/bin
ou
mkdir $HOME/bin
-
Digite o comando para adicionar a pasta
~/bin
a seuPATH
para que este seja o primeiro diretório em que obash
busca por binários:PATH="$HOME/bin:$PATH"
PATH=~/bin:$PATH
ouPATH=/home/user2/bin:$PATH
são igualmente válidos. -
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çãoif
— você incluiria em~/.profile
?if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
Respostas aos Exercícios Exploratórios
-
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 chamadamy_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 demy_val
por 2:let "your_val = $my_val / 2"
ou
let 'your_val = $my_val / 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ávellatest_music
. Daí a variávellatest_music
é referenciada no comandoecho
(cuja saída mostra o número total de bytes ocupados pela pastaMusic
e os cinco últimos arquivos de música armazenados na pastaMusic
— 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)