15 caracteres especiais que você precisa saber para o Bash

Um terminal Linux cheio de texto em um laptop.

Se você deseja dominar o shell Bash no Linux, macOS ou outro sistema semelhante ao UNIX, os caracteres especiais (como ~, *, | e>) são essenciais. Vamos ajudá-lo a desvendar essas sequências de comandos enigmáticas do Linux e se tornar um herói dos hieróglifos.

O que são caracteres especiais?

Há um conjunto de caracteres que o shell Bash  trata de duas maneiras diferentes. Quando você os digita no shell, eles agem como instruções ou comandos e dizem ao shell para executar uma determinada função. Pense neles como comandos de um único caractere.

Às vezes, você deseja apenas imprimir um caractere e não precisa dele para atuar como um símbolo mágico. Existe uma maneira de usar um personagem para representar a si mesmo, em vez de sua função especial.

Mostraremos quais caracteres são “especiais” ou “meta-“, e também como você pode usá-los funcional e literalmente.

~ Home Directory

O til (~) é uma forma abreviada de seu diretório pessoal. Isso significa que você não precisa digitar o caminho completo para o seu diretório pessoal nos comandos. Onde quer que você esteja no sistema de arquivos, você pode usar este comando para ir para o seu diretório inicial:

cd ~

O comando "cd ~" em uma janela de terminal.

Você também pode usar este comando com caminhos relativos. Por exemplo, se você estiver em algum lugar no sistema de arquivos que não está em sua pasta inicial e quiser mudar para o archive diretório em seu workdiretório, use o til para fazer isso:

cd ~ / work / archive

O comando "cd ~ / work / archive" em uma janela de terminal.

. Diretório atual

Um ponto (.) Representa o diretório atual. Você o verá nas listas de diretórios se usar a -aopção (todos) com ls.

ls -a

O comando "ls -a" em uma janela de terminal.

Você também pode usar o ponto em comandos para representar o caminho para o diretório atual. Por exemplo, se você deseja executar um script do diretório atual, você o chamaria assim:

./script.sh

Isso diz ao Bash para procurar o script.sharquivo no diretório atual . Dessa forma, ele não pesquisará os diretórios em seu caminho para o executável ou script correspondente.

O comando "./script.sh" em uma janela de terminal.

.. Diretório Parental

O ponto duplo ou “ponto duplo” (..) representa o diretório pai do seu diretório atual. Você pode usar isso para subir um nível na árvore de diretórios.

cd ..

O comando "cd .." em uma janela de terminal.

Você também pode usar este comando com caminhos relativos – por exemplo, se quiser subir um nível na árvore de diretórios e, em seguida, entrar em outro diretório nesse nível.

Você também pode usar essa técnica para mover-se rapidamente para um diretório no mesmo nível na árvore de diretórios que o seu atual. Você sobe um nível e desce em um diretório diferente.

cd ../gc_help

O comando "cd ../gc_help" em uma janela de terminal.

/ Path Directory Separator

Você pode usar uma barra (/) – geralmente chamada apenas de barra – para separar os diretórios em um nome de caminho.

ls ~ / work / archive

O comando "ls ~ / work / archive" em uma janela de terminal.

Uma barra representa o caminho de diretório mais curto possível. Como tudo na árvore de diretório do Linux começa no diretório raiz, você pode usar este comando para ir para o diretório raiz rapidamente:

cd /

O comando "cd /" em uma janela de terminal.

# Comentário ou Trim Strings

Na maioria das vezes, você usa o sinal numérico (#) para informar ao shell o que se segue é um comentário e não deve agir sobre ele. Você pode usá-lo em scripts de shell e – menos útil – na linha de comando.

# Isso será ignorado pelo shell Bash

O comando "#" em uma janela de terminal.

Não é realmente ignorado, entretanto, porque é adicionado ao seu histórico de comandos.

Você também pode usar o hash para cortar uma variável de string e remover algum texto do início. Este comando cria uma variável de string chamada this_string.

Neste exemplo, atribuímos o texto “Dave Geek!” para a variável.

this_string = "Dave Geek!"

"this_string = 'Dave Geek!'" comando em uma janela de terminal.

Este comando usa echopara imprimir as palavras “Como fazer” na janela do terminal. Ele recupera o valor armazenado na variável de string por meio de uma  expansão de parâmetro . Como acrescentamos o hash e o texto “Dave”, ele corta essa parte da string antes de ser passada para echo.

echo How-To $ {this_string # Dave}

Um comando "echo How-To $ {this_string # Dave}" em uma janela de terminal.

Isso não altera o valor armazenado na variável string; afeta apenas o que é enviado echo. Podemos usar echopara imprimir o valor da variável string mais uma vez e verificar isso:

echo $ this_string

O comando "echo $ this_string" em uma janela de terminal.

? Caractere curinga

O shell Bash oferece suporte a três curingas, um dos quais é o ponto de interrogação (?). Use curingas para substituir caracteres em modelos de nome de arquivo. Um nome de arquivo que contém um curinga forma um modelo que corresponde a uma série de nomes de arquivo, em vez de apenas um.

O curinga de ponto de interrogação representa  exatamente um caractere . Considere o seguinte modelo de nome de arquivo:

ls badge? .txt

Isso se traduz como “liste qualquer arquivo com um nome que comece com ‘emblema’ e seja seguido por qualquer caractere antes da extensão do nome do arquivo.”

Corresponde aos seguintes arquivos. Observe que alguns têm números e outros letras após a parte do “emblema” do nome do arquivo. O curinga de ponto de interrogação corresponderá a letras e números.

O comando "ls badge? .Txt" em uma janela de terminal.

Esse modelo de nome de arquivo não corresponde a “badge.txt,” porque o nome do arquivo não tem um único caractere entre “badge” e a extensão do arquivo. O curinga do ponto de interrogação deve corresponder a um caractere correspondente no nome do arquivo.

Você também pode usar o ponto de interrogação para localizar todos os arquivos com um número específico de caracteres nos nomes dos arquivos. Isso lista todos os arquivos de texto que contêm exatamente cinco caracteres no nome do arquivo:

ls ?????. txt

Um comando "ls ?????. Txt" em uma janela de terminal.

* Caractere curinga de sequência

Você pode usar o caractere curinga asterisco (*) para representar qualquer sequência de caracteres, incluindo nenhum caractere . Considere o seguinte modelo de nome de arquivo:

emblema ls *

Isso corresponde a todos os seguintes:

Um comando "ls badge *" em uma janela de terminal.

Corresponde a “badge.txt” porque o curinga representa qualquer sequência de caracteres ou nenhum caractere.

Este comando corresponde a todos os arquivos chamados “fonte”, independentemente da extensão do arquivo.

Fonte de ls. *

Um comando "ls source. *" Em uma janela de terminal.

[] Caracteres curinga

Conforme abordado acima, você usa o ponto de interrogação para representar qualquer caractere único e o asterisco para representar qualquer sequência de caracteres (incluindo nenhum caractere).

Você pode formar um curinga com os colchetes ([]) e os caracteres que eles contêm. O caractere relevante no nome do arquivo deve corresponder a pelo menos um dos caracteres do conjunto de caracteres curinga.

Neste exemplo, o comando se traduz em: “qualquer arquivo com um” .png”extensão, um nome que começa com‘pipes_0’, e em que o próximo caractere é quer  2, 4 ou 6.”

ls badge_0 [246] .txt

Um comando "ls badge_0 [246] .txt" em uma janela de terminal.

Você pode usar mais de um conjunto de colchetes por modelo de nome de arquivo:

ls badge_ [01] [789] .txt

Um comando "ls badge_ [01] [789] .txt" em uma janela de terminal.

Você também pode incluir intervalos no conjunto de caracteres. O comando a seguir seleciona arquivos com os números 21 a 25 e 31 a 35 no nome do arquivo.

ls badge_ [23] [1-5] .txt

Um comando "ls badge_ [23] [1-5] .txt" em uma janela de terminal.

; Separador de Comando Shell

Você pode digitar quantos comandos quiser na linha de comando, desde que separe cada um deles com um ponto e vírgula (;). Faremos isso no seguinte exemplo:

ls> count.txt; wc -l count.txt; rm count.txt

Um comando "ls> count.txt; wc -l count.txt; rm count.txt" em uma janela de terminal

Observe que o segundo comando é executado mesmo se o primeiro falhar, o terceiro será executado mesmo se o segundo falhar e assim por diante.

Se você quiser interromper a sequência de execução se um comando falhar, use um “e” comercial duplo (&&) em vez de um ponto e vírgula:

cd ./doesntexist && cp ~ / Documents / reports / *.

Um comando "cd ./doesntexist && cp ~ / Documents / reports / *." Em uma janela de terminal.

& Processo de Fundo

Depois de digitar um comando em uma janela de terminal e ele for concluído, você retornará ao prompt de comando. Normalmente, isso leva apenas um ou dois minutos. Mas se você iniciar outro aplicativo, como gedit, não poderá usar a janela do terminal até fechar o aplicativo.

Você pode, entretanto, iniciar um aplicativo como um processo em segundo plano e continuar a usar a janela do terminal. Para fazer isso, basta adicionar um “e” comercial à linha de comando:

gedit command_address.page &

Um comando "gedit command_address.page &" em uma janela de terminal.

O Bash mostra o ID do processo que foi iniciado e, em seguida, retorna para a linha de comando. Você pode então continuar a usar a janela do terminal.

<Redirecionamento de entrada

Muitos comandos do Linux aceitam um arquivo como parâmetro e obtêm seus dados desse arquivo. A maioria desses comandos também pode receber entrada de um fluxo. Para criar um fluxo, você usa o colchete angular esquerdo (<), conforme mostrado no exemplo a seguir, para redirecionar um arquivo para um comando:

classificar <palavras.txt

Um comando "sort <words.txt" em uma janela de terminal.

Quando um comando tem uma entrada redirecionada para ele, ele pode se comportar de maneira diferente de quando lê um arquivo nomeado.

Se usarmos wcpara contar as palavras, linhas e caracteres em um arquivo, ele imprimirá os valores e, em seguida, o nome do arquivo. Se redirecionarmos o conteúdo do arquivo para wc, ele imprimirá os mesmos valores numéricos, mas não saberá o nome do arquivo de onde os dados vieram. Ele não pode imprimir um nome de arquivo.

Aqui estão alguns exemplos de como você pode usar  wc:

wc words.txt
wc <palavras.txt

Um comando "wc words.txt" em uma janela de terminal.

> Redirecionamento de saída

Você pode usar o colchete angular (>) para redirecionar a saída de um comando (normalmente, para um arquivo); aqui está um exemplo:

ls> arquivos.txt
cat files.txt

Um comando "ls> files.txt" em uma janela de terminal.

O redirecionamento de saída também pode redirecionar mensagens de erro se você usar um dígito (2, em nosso exemplo) com  >. Veja como fazer:

wc doesntexist.txt 2> errors.txt
cat errors.txt

Um comando "wc doesntexist.txt 2> errors.txt" em uma janela de terminal.

| Tubo

Um “tubo” encadeia os comandos juntos. Ele pega a saída de um comando e a alimenta no próximo como entrada. O número de comandos canalizados (o comprimento da cadeia) é arbitrário.

Aqui, usaremos  catpara alimentar o conteúdo do arquivo words.txt grep, que extrai qualquer linha que contenha um “C” maiúsculo ou minúsculo. grep irá então passar essas linhas para  sort. sortestá usando a -ropção (reversa), então os resultados classificados aparecerão na ordem reversa.

Nós digitamos o seguinte:

cat words.txt | grep [cC] | sort -r

Um comando "cat words.txt | grep [cC] | sort -r" em uma janela de terminal.

! Pipeline lógico NOT e operador de histórico

O ponto de exclamação (!) É um operador lógico que significa NÃO.

Existem dois comandos nesta linha de comando:

[! -d ./backup] && mkdir ./backup
  • O primeiro comando é o texto entre colchetes;
  • O segundo comando é o texto que segue o “e” comercial duplo &&.

O primeiro comando usa !como um operador lógico. Os colchetes indicam que um teste será feito. -dopção (diretório) testa a presença de um diretório chamado backup. O segundo comando cria o diretório.

Como o e comercial duplo separa os dois comandos, o Bash só executará o segundo se o primeiro  for bem-sucedido . No entanto, isso é o oposto do que precisamos. Se o teste para o diretório “backup” for bem-sucedido, não precisamos criá-lo. E se o teste do diretório “backup“ falhar, o segundo comando não será executado e o diretório ausente não será criado.

É aqui que !entra o operador lógico . Ele atua como um NOT lógico. Portanto, se o teste for bem-sucedido (ou seja, o diretório existe), ele !muda para “NÃO foi bem-sucedido”, o que significa falha . Portanto, o segundo comando não está  ativado.

Se o teste de diretório falhar (ou seja, o diretório não existe), !a resposta muda para “NÃO falha”, que é bem- sucedida . Assim, o comando para criar o diretório ausente é executado.

Esse pequeno ! pacote de muito soco quando você precisa!

Para verificar o status da pasta de backup, você usa o lscomando e as opções -l(lista longa) e -d(diretório), conforme mostrado abaixo:

ls -l -d backup

Um comando "[! -D ./backup] && mkdir ./backup" em uma janela de terminal.

Você também pode executar comandos de seu histórico de comandos com o ponto de exclamação. O historycomando lista seu histórico de comandos e você digita o número do comando que deseja executar novamente !para executá-lo, conforme mostrado abaixo:

! 24

Um comando "! 24" em uma janela de terminal.

O seguinte executa novamente o comando anterior:

!!

$ Variable Expressions

No shell Bash, você cria variáveis ​​para conter valores. Algumas, como variáveis ​​de ambiente, sempre existem e você pode acessá-las sempre que abrir uma janela de terminal. Eles contêm valores, como seu nome de usuário, diretório inicial e caminho.

Você pode usar echopara ver o valor que uma variável contém – basta preceder o nome da variável com o cifrão ($), conforme mostrado abaixo:

echo $ USER
echo $ HOME
echo $ PATH

Um comando "echo $ USER" em uma janela de terminal.

Para criar uma variável, você deve dar um nome a ela e fornecer um valor para ela manter. Você não  precisa usar o cifrão para criar uma variável. Você só adiciona $quando faz referência a uma variável, como no exemplo a seguir:

ThisDistro = Ubuntu
MyNumber = 2001
echo $ ThisDistro
echo $ MyNumber

Um comando "ThisDistro = Ubuntu" em uma janela de terminal.

Adicione colchetes ({}) ao redor do cifrão e execute uma expansão de parâmetro para obter o valor da variável e permitir outras transformações do valor.

Isso cria uma variável que contém uma sequência de caracteres, conforme mostrado abaixo:

MyString = 123456qwerty

Use o seguinte comando para ecoar a string na janela do terminal:

echo $ {MyString}

Para retornar a substring começando na posição 6 de toda a string, use o seguinte comando (há um deslocamento de zero, então a primeira posição é zero):

echo $ {myString: 6}

Se você deseja ecoar uma substring que começa na posição zero e contém os próximos seis caracteres, use o seguinte comando:

echo $ {myString: 0: 6}

Use o seguinte comando para ecoar uma substring que começa na posição quatro e contém os próximos quatro caracteres:

echo $ {myString: 4: 4}

Um comando "MyString = 123456qwerty" em uma janela de terminal.

Citando personagens especiais

Se você quiser usar um caractere especial como um caractere literal (não especial), você deve informar ao shell Bash. Isso é chamado de citar e existem três maneiras de fazer isso.

Se você colocar o texto entre aspas (“…”), isso evita que o Bash atue na maioria dos caracteres especiais e eles apenas serão impressos. Uma exceção notável, porém, é o cifrão ($). Ele ainda funciona como o caractere para expressões de variáveis, portanto, você pode incluir os valores das variáveis ​​em sua saída.

Por exemplo, este comando imprime a data e hora:

echo "Hoje é $ (data)"

Se você colocar o texto entre aspas simples (‘…’) conforme mostrado abaixo, ele interromperá a função de  todos  os caracteres especiais:

echo 'Hoje é $ (data)'

Você pode usar uma barra invertida (\) para evitar que o caractere a seguir funcione como um caractere especial. Isso é chamado de “escape” do caractere; veja o exemplo abaixo:

echo "Hoje é \ $ (data)"

Um comando "echo" 'Hoje é $ (data)' "em uma janela de terminal.

Pense nos caracteres especiais como comandos muito curtos. Se você memorizar seus usos, isso pode beneficiar sua compreensão do shell Bash – e dos scripts de outras pessoas – imensamente.