15 caracteres especiais que você precisa saber para o Bash

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 a se tornar um herói dos hieróglifos.

O que são caracteres especiais?

Há um conjunto de caracteres que Bash shell 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 caractere 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

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 pessoal e quiser mudar para o diretório de arquivo em seu diretório de trabalho, use o til para fazer isso:

cd ~/work/archive

O

. Diretório atual

Um ponto (.) Representa o diretório atual. Você o verá nas listagens de diretório se usar a opção -a (all) com ls.

ls -a

O

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 no diretório atual pelo arquivo script.sh. Dessa forma, ele não pesquisará os diretórios em seu caminho para o executável ou script correspondente.

O

.. 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

Você também pode usar esse comando com caminhos relativos – por exemplo, se quiser subir um nível na árvore de diretórios e, a seguir, 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 depois desce em um diretório diferente.

cd ../gc_help

O

/ 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

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

# Comentário ou Trim Strings

Na maioria das vezes, você usa o símbolo hash ou número (#) para dizer 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.

# This will be ignored by the Bash shell

O

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

  Como corrigir a tela de bloqueio em branco no iPhone X

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!"

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

echo How-To ${this_string#Dave}

Um

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

echo $this_string

O

? Caractere curinga de um único caractere

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 arquivos, 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

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

UMA

* Caractere curinga de sequência

Você pode usar o asterisco

ls badge*

curinga para representar qualquer sequência de caracteres, incluindo nenhum caractere. Considere o seguinte modelo de nome de arquivo:

  Como usar um Raspberry Pi como um servidor proxy (com Privoxy)

Isso corresponde a todos os seguintes:

Um

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

ls source.*

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

[] Um

Conjunto de 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.

ls badge_0[246].txt

Neste exemplo, o comando se traduz em: “qualquer arquivo com uma extensão“ .png ”, um nome de arquivo começando com“ pipes_0, ”e no qual o próximo caractere é 2, 4 ou 6.”

Um

ls badge_[01][789].txt

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

Um

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

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.

Um

; Separador de Comando Shell

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

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

count.txt; wc -l count.txt; comando rm count.txt ”em uma janela de terminal ‘width =” 646 ″ height = ”122 ″ onload =” pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); ” onerror = ”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”>

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

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

Se você quiser interromper a sequência de execução se um comando falhar, use um

UMA

& 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 o gedit, não poderá usar a janela do terminal até fechar o aplicativo.

gedit command_address.page &

Você pode, no entanto, iniciar um aplicativo como um processo em segundo plano e continuar a usar a janela do terminal.  Para fazer isso, basta adicionar um

UMA

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 seu terminal.

sort 

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 (

When a command has input redirected into it, it might behave differently than when it reads from a named file.

If we use wc to count the words, lines, and characters in a file, it prints the values, and then the filename. If we redirect the contents of the file to wc, it prints the same numeric values but doesn’t know the name of the file from which the data came. It cannot print a filename.

Here are some examples of how you can use wc:

wc words.txt
wc 

UMA

> Output Redirection

You can use the right-angle bracket ( > ) to redirect the output from a command (typically, into a file); here’s an example:

ls > files.txt
cat files.txt

UMA Um

files.txt "comando em uma janela de terminal." largura = "646" altura = "382">

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

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: UMA

errors.txt "comando em uma janela de terminal." largura = "646" altura = "122">

| Tubo

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

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

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

Nós digitamos o seguinte:

UMA

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

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

[ ! -d ./backup ] && mkdir ./backup

Existem dois comandos nesta linha de comando:
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. A opção -d (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.

Este é o lugar onde o operador lógico! entra. Ele atua como um NÃO lógico. Portanto, se o teste for bem-sucedido (ou seja, o diretório existe), o! muda para "NÃO sucesso", que é o fracasso. Portanto, o segundo comando não está ativado.

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

Tão pouco! tem muito poder quando você precisa!

ls -l -d backup

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

UMA

!24

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

UMA

!!

O seguinte executa novamente o comando anterior:

$ Variable Expressions No shell do Bash, você cria variáveis ​​para armazenar valores. Alguns gostam variáveis ​​ambientais,

sempre existem e você pode acessá-los sempre que abrir uma janela de terminal. Eles contêm valores, como seu nome de usuário, diretório inicial e caminho.

echo $USER
echo $HOME
echo $PATH

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

Um

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

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:

Um

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

MyString=123456qwerty

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

echo ${MyString}

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

echo ${myString:6}

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:0: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:4:4}

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

UMA

Citando personagens especiais

Se quiser usar um caractere especial como um caractere literal (não especial), você deve informar ao shell Bash. Isso é chamado de citar e há 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 variáveis, portanto, você pode incluir os valores das variáveis ​​em sua saída.

echo "Today is $(date)"

Por exemplo, este comando imprime a data e hora:

echo 'Today is $(date)'

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

echo "Today is $(date)"

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:

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.