Como trabalhar com variáveis no Bash
As variáveis são vitais se você deseja escrever scripts e entender o que esse código que você está prestes a cortar e colar da Web fará no seu computador Linux. Vamos ajudá-lo a começar!
Variáveis 101
Variáveissão nomeados símbolos que representam uma sequência ou um valor numérico. Quando você os usa em comandos e expressões, eles são tratados como se você tivesse digitado o valor que eles possuem em vez do nome da variável.
Para criar uma variável, basta fornecer um nome e um valor para ela.. Seus nomes de variáveis devem ser descritivos e lembrá-lo do valor que eles possuem. Um nome de variável não pode começar com um número nem conter espaços. No entanto, pode começar com um sublinhado. Além disso, você pode usar qualquer combinação de caracteres alfanuméricos maiúsculos e minúsculos.
Exemplos
Aqui, criaremos cinco variáveis.O formato é digitar o nome, o sinal de igual = e o valor. Observe que não há espaço antes ou depois do sinal de igual. Atribuir um valor a uma variável é geralmente designado como atribuir um valor à variável.
Vamos criar quatro variáveis de string e uma variável numérica, neste ano:
eu = Dave
meu_boost = Linux
ele = Popeye
his_boost = espinafre
this_year = 2019
Para ver o valor mantido em uma variável, use o comando echo. Você deve preceder o nome da variável com um cifrão $ sempre que fizer referência ao valor que ele contém, como mostrado abaixo:
ecoa $ my_name
ecoa $ my_boost
ecoa $ this_year
Vamos usar todas as nossas variáveis de uma vez:
echo "$ my_boost é para $ me como $ his_boost é para $ ele (c) $ this_year"
Os valores das variáveis substituem seus nomes. Você também pode alterar os valores das variáveis. Para atribuir um novo valor à variável my_boost, basta repetir o que você fez quando atribuiu seu primeiro valor, assim:
my_boost = Tequila
Se você executar novamente o comando anterior, agora obterá um resultado diferente:
echo "$ my_boost é para $ me como $ his_boost é para $ him (c) $this_year "
Portanto, você pode usar o mesmo comando que faz referência às mesmas variáveis e obter resultados diferentes se alterar os valores mantidos nas variáveis.
Falaremos sobre citar variáveis posteriormente. Por enquanto, aqui estão algumas coisas a serem lembradas:
- Uma variável entre aspas simples 'é tratada como uma string literal, e não como uma variável.
- Variáveis entre aspas"são tratados como variáveis.
- Para obter o valor mantido em uma variável, é necessário fornecer o cifrão $.
- Uma variável sem o cifrão $ fornece apenas o nome dea variável.
Você também pode criar uma variável que retire seu valor de uma variável existente ou número de variáveis. O comando a seguir define uma nova variável chamada drink_of_the_Yeare atribui a ele os valores combinados das variáveis my_boost e this_year:
drink_of-the_Year = "$ my_boost $ this_year"
echo drink_of_the-year
Como usar variáveis em scripts
Os scripts seriam completamente interrompidos sem variáveis. As variáveis fornecem a flexibilidade que torna um script geral, e não específico,Para ilustrar a diferença, aqui ’ um script que conta os arquivos no diretório / dev.
Digite isso em um arquivo de texto e salve-o como fcnt. sh (para “ contagem de arquivos ”):
#! / bin / bash folder_to_count = / dev file_count = $ (ls $ folder_to_count |wc -l) echo $ file_count arquivos em $ folder_to_count
Antes de poder executar o script, você deve executá-lo, conforme mostrado abaixo:
chmod + x fcnt. sh
Digite o seguinte para executar o script:
./ fcnt. sh
Imprime o número de arquivos no diretório / dev. Aqui está como ele funciona:
- Uma variável chamada folder_to_count é definida e é definida para armazenar a string / dev. ”
- Outra variável, chamada file_count, é definida. Essa variável recebe seu valor de uma substituição de comando. Esta é a frase de comando entre parênteses $ (). Observe que há um sinal de cifrão $ antes do primeiro parêntese. Essa construção $ () avalia os comandos entre parênteses e, em seguida, retorna seu valor final. Neste exemplo, esse valor é atribuído à variável file_count. No que diz respeito à variável file_count, ela passou um valor para manter;não está preocupado com a forma como o valor foi obtido.
- O comando avaliado na substituição de comando executa uma lista de arquivos ls no diretório na variável folder_to_count, que foi definida como “/ dev.”Portanto, o script executa o comando ls /dev.”
- A saída desse comando é canalizada para o comando wc.A opção -l (contagem de linha) faz com que wc conte o número de linhas na saída do comando ls. Como cada arquivo é listado em uma linha separada, esta é a contagem de arquivos e subdiretórios no “ / dev ”diretório. Este valor é atribuído à variável file_count.
- A linha final usa eco para gerar o resultado.
Mas isso só funciona para o “ / dev ”diretório. Como podemos fazer o script funcionar com qualquer diretório?Basta uma pequena alteração.
Como usar parâmetros de linha de comando em scripts
Muitos comandos, como ls e wc, usam parâmetros de linha de comando. Eles fornecem informações ao comando, para que ele saiba o que você deseja que ele faça. Se você deseja que o ls trabalhe no diretório inicial e também mostre os arquivos ocultos, use o seguinte comando, onde as opções til ~ e -a (all) são parâmetros da linha de comando:
ls ~ -a
Nossos scripts podem aceitar parâmetros de linha de comando. Eles são referenciados como $ 1 para o primeiro parâmetro, $ 2 como o segundo e assim por diante, até $ 9 para o nono parâmetro.(Na verdade, também existem $ 0, mas isso é reservado para manter sempre o script.)
Você pode fazer referência a parâmetros de linha de comando em um script da mesma forma que faria com variáveis regulares. Vamos modificar nosso script, como mostrado abaixo, e salve-o com o novo nome fcnt2. sh:
#! / Bin / bash folder_to_count = $ 1 file_count = $ (ls $ folder_to_count| wc -l) echo $ file_count arquivos em $ folder_to_count
Desta vez, a variável folder_to_count recebe o valor do primeiro parâmetro da linha de comando, $ 1.
O restante do scriptfunciona exatamente como antes. Em vez de uma solução específica, seu script agora é geral. Você pode usá-lo em qualquer diretório porque não está codificado para funcionar apenas com o / dev. ”
Veja como você torna o script executável:
chmod + x fcnt2. sh
Agora, tente com alguns diretórios. Você pode fazer o / dev ”primeiro para garantir que você obtenha o mesmo resultado de antes. Digite o seguinte:
./ fnct2. sh /dev[/PREunette[PREunette./fnct2. sh /etc[/PREunette
[PREunette./fnct2. sh / bin
Você obtém o mesmo resultado (207 arquivos) de antes para o “ / dev ”diretório. Isso é encorajador e você obtém resultados específicos do diretório para cada um dos outros parâmetros da linha de comando.
Para encurtar o script, você pode dispensar a variável folder_to_count, no total, e apenas fazer referência a $ 1 por toda parte, comosegue:
#! / bin / bash file_count = $ (ls $ 1 wc -l) echo $ file_count files em $ 1
Trabalhando com variáveis especiais
Mencionamos $ 0, que sempre é definido como o nome do arquivo do script. Isso permite que você use o script para fazer coisas como imprimir seu nome corretamente, mesmo que ele seja renomeado. Isso é útil em situações de log, nas quais você deseja saber o nome do processo que adicionou uma entrada.
A seguir, estão as outras variáveis predefinidas especiais:
- $#: Quantos parâmetros da linha de comando foram passados para o script.
- $ @: Todos os parâmetros da linha de comando foram passados para o script.
- $ ?: O status de saída do último processo
- $$: o ID do processo (PID) do script atual.
- $ USER: O nome de usuário do usuário que está executando o script.
- $ HOSTNAME: o nome do host do computador que está executando o script.
- $ SECONDS: o número de segundos que o script está sendo executado.
- $ RANDOM: retorna um número aleatório.
- $ LINENO: Retorna o número da linha atual do script.
Você deseja ver todos eles em um script, não é?Você pode!Salve o seguinte como um arquivo de texto chamado special. sh:
#! / Bin / bash echo "Havia parâmetros de linha de comando $ #" echo "Eles são: $ @" echo "Parâmetro1 é: $ 1 "echo" O script é chamado: $ 0 "# qualquer processo antigo para que possamos relatar o status de saída pwd echo" pwd retornou $? "echo "Este script tem o ID do processo $$" echo "O script foi iniciado por $ USER" echo "Ele está sendo executado em $ HOSTNAME" sleep 3 echo "Ele está sendo executado por $ SECONDS segundos" echo "Número aleatório: $ RANDOM"echo "Este é o número da linha $ LINENO do script"
Digite o seguinte para torná-lo executável:
chmod + x special. sh
Agora, você pode executá-lo com vários parâmetros de linha de comando, como mostrado abaixo.
Variáveis de ambiente
O Bash usa variáveis de ambiente para definir e registrar as propriedades do ambiente que ele cria quando é iniciado. Essas informações de retenção podem ser acessadas com facilidade pelo Bash, como seu nome de usuário, localidade, o número de comandos que seu arquivo de histórico pode conter, seu editor padrão e muito mais.
Para ver as variáveis de ambiente ativas na sua sessão do Bash, use este comando:
env |menos
Se você rolar pela lista, poderá encontrar alguns que seriam úteis para referência em seus scripts.
Como exportar variáveis
Quando um script é executado, ele está em seu próprio processo, e as variáveis que ele usa não podem ser vistas fora desse processo. Se você deseja compartilhar uma variável com outro script que o seu script inicia, você deve exportar essa variável. Mostraremos como fazer isso com dois scripts.
Primeiro, salve o seguinte com o nome de arquivo script_one. sh:
#! / Bin / bash first_var= alpha second_var = bravo # verificar seus valores echo "$ 0: first_var = $ first_var, second_var = $ second_var" exportar first_var exportar second_var ./script_two. sh # verificar seus valores novamente echo "$ 0: first_var = $ first_var, second_var = $ second_var"
Isso cria duas variáveis, first_var e second_var, e atribui alguns valores. Ele os imprime na janela do terminal, exporta as variáveis e chama script_two. sh. Quando script_two. sh termina, e o fluxo do processo retorna para esse script, ele imprime novamente as variáveis na janela do terminal. Então, você pode ver se eles mudaram.
O segundo script que usaremos é script_two. sh. Este é o script que script_one. shcalls. Digite o seguinte:
#! / Bin / bash # verifique seus valores echo "$ 0: first_var = $ first_var, second_var = $ second_var" # defina novos valores first_var = charlie second_var = delta # checkseus valores ecoam novamente "$ 0: primeiro_var = $ primeiro_var, segundo_var = $ segundo_var"
Este segundo script imprime os valores das duas variáveis, atribui novos valores a elas e depois os imprime novamente.
Para executar esses scripts, é necessário digitar o seguinte para torná-los executáveis:
chmod + x script_one. sh chmod + x script_two. sh
E agora, digite o seguinte para iniciar o script_one. sh:
./ script_one. sh
é o que a saída nos diz:
- script_one. sh imprime os valores das variáveis, que são alfa e bravo.
- script_two. sh imprime os valores das variáveis (alpha e bravo) como as recebeu.
- script_two. sh as altera para charlie e delta.
- script_one. sh imprime os valores das variáveis, que ainda estãoalpha e bravo.
O que acontece no segundo script, permanece no segundo script.São como cópias das variáveis que são enviadas para o segundo script, mas são descartadas quando o script é encerrado. As variáveis originais no primeiro script não são alteradas por nada que aconteça com as cópias no segundo.
Como citar variáveis
Você deve ter notado que quandoscripts referenciam variáveis, elas estão entre aspas ". Isso permite que as variáveis sejam referenciadas corretamente, para que seus valores sejam usados quando a linha for executada no script.
Se o valor que você atribuir a umvariável inclui espaços, eles devem estar entre aspas quando você os atribui à variável, porque, por padrão, o Bash usa um espaço como delimitador.
Aqui está um exemplo:
site_name = How-To Geek
O Bash vê o espaço antes do “ Geek ” como uma indicação de que um novo comando érelata que não existe esse comando e abandona a linha. echo nos mostra que a variável site_name não contém nada — nem mesmo o texto “ Como fazer ” texto.
Tente novamente com aspas ao redor do valor, como mostrado abaixoow:
site_name = "How-To Geek"
Desta vez, é reconhecido como um valor único e atribuídocorretamente à variável site_name.
echo É seu amigo
Pode levar algum tempo para se acostumar a comandar a substituição, citando variáveis e lembrando quando incluir o sinal de cifrão.
Antes de pressionar Enter e executar uma linha de comandos do Bash, tente com eco na frente. Dessa forma, você pode garantir que o que vai acontecer é o que você deseja. Você também pode detectar quaisquer erros que possa ter cometido na sintaxe.
Via: How to Geek
Nenhum comentário