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.
últimas postagens
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 ~
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
. 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
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.
.. 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 ..
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
/ 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
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 /
# 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
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!"
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}
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
? 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.
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
* 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:
Um
Corresponde a “badge.txt” porque o curinga representa qualquer sequência de caracteres ou nenhum caractere.
ls source.*
[] 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
Um
ls badge_[01][789].txt
Um
ls badge_[23][1-5].txt
Um
; Separador de Comando Shell
ls > count.txt; wc -l count.txt; rm count.txt
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/* .
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 &
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.
sortWhen 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.txtwc> 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.txtcat files.txtUm
files.txt "comando em uma janela de terminal." largura = "646" altura = "382">
wc doesntexist.txt 2> errors.txtcat errors.txtUMA
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 -rUMA
! 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 ./backupExistem 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 backupUMA
!24UMA
!!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 $USERecho $HOMEecho $PATHUm
ThisDistro=UbuntuMyNumber=2001echo $ThisDistroecho $MyNumberUm
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=123456qwertyIsso 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}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.