Exemplos úteis de linha de comando BASH - Parte 3

Exemplos úteis de linha de comando BASH - Parte 3

Bash é uma interface de shell variada com muitas opções de programação e uma rica linguagem instrucional. É fácil perder os recursos e dinâmicos do Bash, então esta série apresenta várias dicas, truques, exemplos e pegadas quando se trata de usar o Bash. Para os dois primeiros artigo desta série, consulte o nosso artigo, dicas de linha de comando e truques úteis da linha de comando BASH Parte 2 e Exemplos de linha de comando BASH úteis Parte 3.

Nesta série de tutoriais, você aprenderá:

  • Dicas úteis da linha de comando Bash, truques e métodos
  • Como interagir com a linha de comando Bash de maneira avançada
  • Como aprimorar suas habilidades de bash em geral e se tornar um usuário de bash mais proficiente
Exemplos úteis de linha de comando BASH - Parte 3

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição Linux
Programas Linha de comando Bash, sistema baseado em Linux
Outro Qualquer utilidade que não esteja incluída no shell bash por padrão pode ser instalada usando sudo apt-get install utility-name (ou yum install para sistemas baseados em redhat)
Convenções # - requer que o Linux -Commands seja executado com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

Exemplo 1: Verificando corretamente a existência de arquivos e diretórios

Podemos verificar a presença de um diretório facilmente usando o -d (Existe um diretório com o nome especificado) em uma cláusula em um se declaração:

$ Mypathtocheckforexistence = "$ pwd" $ echo "$ mypathtocheckforexistência"/home/roel/iamhappy $ if [-d $ mypathtocheckforexistence]; Então eco "existe!"; Fi existe! 


No entanto, é igualmente fácil cometer um erro difícil de dividir em algumas áreas do Bash. Por exemplo, vamos considerar (e ver se você consegue encontrar o bug);

$ MypathtocheckForexistance = "/nãoNotReallyExist" $ se [-d $ myPathtocheckForexistence]; Então eco "existe!"; Fi existe! $ ls /não não é reallyExist LS: não pode acessar 

Por que o se Verifique chega à conclusão de que o /não não é realmente existente Diretório existe? Você pode ver o bug?

A questão aqui é que há um erro de digitação no nome da variável. Existência vs EXISTÊNCIA..

Talvez um pouco atrevido, mas com toda a seriedade, isso também deve ser muito fácil de se deparar com o Gotcha:

$ se [-d]; Então eco "existe!"; Fi existe! 

E mais significativamente;

$ Var1 = "; se [-d $ var1]; então eco" existe!"; Fi existe! 

Assim, se você esqueceu a inicialização da variável de nome do diretório que está posteriormente verificando, ou o nome da variável é incorreto, o resultado será que o Bash se a declaração retorna que o diretório existe! Não há mais menção sobre esta exceção interessante no manual (ref Homem Bash) que apenas esclarece isso -d é Verdadeiro se o arquivo existe e for um diretório..

Então, como podemos consertar isso?

Exemplo 2: Uma maneira melhor de verificar a existência de arquivos e diretórios

A correção é fácil; Podemos citar nossa variável com citações duplas ("), que então fará o se não padrão para o resultado sempre verdadeiro. Como uma nota lateral interessante para pensar mais, e talvez seu comentário experiente abaixo com o mesmo efeito, é preciso se perguntar por que foi implementado assim e o que a implementação sempre subjacente.

$ Var1 = "; se [-d" $ var1 "]; então eco" existe!"; fi $ 


Uma solução simples e elegante. Ao invés de se declaração agora sendo analisada como Se [-d] que, como vimos, sempre avalia para verdadeiro, agora é analisado como (desde que VAR1 está vazio pelo menos) Se [-d ""] o que resulta em falso e assim o então Cláusula não é executada.

Exemplo 3: sempre quis extrair o conteúdo de um .Arquivo Deb?

Às vezes, algo quebra em um sistema, e podemos querer obter um único arquivo de um .Deb pacote. .Deb Pacotes (pacotes de instalação no estilo Debian, como também usado pelo Ubuntu e Mint) podem ser facilmente encontrados online, mas nem sempre é tão evidente sobre como extrair arquivos dele. Para fazer isso, podemos:

ar x algum_deb_file.Dados Deb Tar -xf.alcatrão.xz 

ar é uma ferramenta para criar, modificar e extrair de arquivos, como o manual (homem ar) explica. Esses comandos produzirão os arquivos dentro do .Deb pacote. Cada .Deb o arquivo terá dois arquivos de arquivo, ou seja, ao controle.alcatrão.xz e dados.alcatrão.xz (um padrão comum) e - como você pode ver no exemplo - é o dados.alcatrão.xz arquivo que precisa ser expandido para ver os arquivos dentro do .Deb pacote.

Conclusão

Neste artigo, exploramos maneiras de verificar corretamente a existência de arquivos e diretórios usando a citação adequada, e exemplificamos como é fácil cometer erros nesta área. Sempre teste seus scripts e tente uma variedade de diferentes situações e cenários. Também analisamos como podemos extrair conteúdo de um .Deb arquivo usando o ar e alcatrão comandos. Como sempre, aproveite a codificação e deixe um comentário abaixo com suas descobertas!

  • Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1
  • Exemplos úteis de linha de comando bash e exemplos de truques - Parte 2
  • Exemplos úteis de linha de comando BASH - Parte 3
  • Exemplos úteis de linha de comando Bash e truques - Parte 4
  • Exemplos úteis de linha de comando BASH - Parte 5

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Mastering Bash Script Loops
  • Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1
  • Exemplos úteis de linha de comando bash e exemplos de truques - Parte 2
  • Exemplos úteis de linha de comando Bash e truques - Parte 4
  • Coisas para instalar no Ubuntu 20.04
  • Ubuntu 20.04 truques e coisas que você pode não saber
  • Loops aninhados em scripts de basquete
  • Ubuntu 20.04 Guia
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux