Aprenda o fluxo de controle Python e loops para escrever e ajustar scripts de shell - Parte 2

Aprenda o fluxo de controle Python e loops para escrever e ajustar scripts de shell - Parte 2

No artigo anterior desta série Python, compartilhamos uma breve introdução a Pitão, seu shell de linha de comando e o ocioso.

Também demonstramos como executar cálculos aritméticos, como armazenar valores em variáveis ​​e como imprimir de volta esses valores na tela. Finalmente, explicamos os conceitos de métodos e propriedades no contexto da programação orientada a objetos através de um exemplo prático.

Neste guia, discutiremos o fluxo de controle (para escolher diferentes cursos de ação, dependendo das informações inseridas por um usuário, o resultado de um cálculo ou o valor atual de uma variável) e loops (para automatizar tarefas repetitivas) e, em seguida, aplicar O que aprendemos até agora a escrever um script de shell simples que exibirá o tipo de sistema operacional, o nome do host, a liberação do kernel, a versão e o nome do hardware da máquina.

Este exemplo, embora básico, nos ajudará a ilustrar como podemos aproveitar Python OOPOs recursos para escrever scripts de shell mais fáceis do que usar ferramentas de bash regulares.

Em outras palavras, queremos ir de

# uname -snrvm 
Verifique o nome do host do Linux

para

Verifique o nome do host Linux usando o script python

ou

Script para verificar as informações do sistema Linux

Parece bonito, não é isso? Vamos enrolar nossas mangas e fazer isso acontecer.

Índice

1
  • Aprender fluxo de controle em python
  • Aprenda loops em python
  • Módulos Python
  • Script Python
      • Resumo

Aprender fluxo de controle em python

Como dissemos anteriormente, controle de fluxo nos permite escolher resultados diferentes, dependendo de uma determinada condição. Sua implementação mais simples em Python é um se / else cláusula.

A sintaxe básica é:

Se condição: # Ação 1 mais: # Ação 2 
  • Quando a condição é avaliada como verdadeira, o bloco de código abaixo será executado (representado por # Ação 1. Caso contrário, o código em outra pessoa será executado.
  • Uma condição pode ser qualquer declaração que possa avaliar como verdadeira ou falsa.

Por exemplo:

1 < 3 # true firstName == "Gabriel" # true for me, false for anyone not named Gabriel 
  • No primeiro exemplo, comparamos dois valores para determinar se um é maior que o outro.
  • No segundo exemplo, comparamos primeiro nome (uma variável) para determinar se, no ponto de execução atual, seu valor é idêntico a “Gabriel
  • A condição e a declaração else devem ser seguidas por um cólon (:)
  • O recuo é importante no Python. Linhas com indentação idêntica são consideradas no mesmo bloco de código.

Por favor, observe que o se / else declaração é apenas um dos muitos Ferramentas de fluxo de controle Disponível em Python. Nós o revisamos aqui, pois o usaremos em nosso script mais tarde. Você pode aprender mais sobre o restante das ferramentas nos documentos oficiais.

Aprenda loops em python

Simplificando, um laço é uma sequência de instruções ou declarações que são executadas em ordem, desde que uma condição seja verdadeira ou uma vez por item em uma lista.

O loop mais simples em Python é representado pelo para loop isso itera sobre os itens de uma determinada lista ou uma string começando com o primeiro item e terminando com o último.

Sintaxe básica:

para x no exemplo: # faça isso 

Aqui o exemplo pode ser uma lista ou uma string. Se o primeiro, a variável nomeada x representa cada item na lista; se o último, x representa cada caractere na string:

>>> RockBands = [] >>> RockBands.Anexar ("roxette") >>> Rockbands.Anexar ("Guns N 'Roses") >>> Rockbands.Anexe ("U2") >>> para x em faixas de rock: print (x) ou >>> primeironame = "gabriel" >>> para x em primeiro nome: print (x) 

A saída dos exemplos acima é mostrada na seguinte imagem:

Aprenda loops em python

Módulos Python

Por razões óbvias, deve haver uma maneira de salvar uma sequência de instruções e declarações do Python em um arquivo que pode ser chamado quando necessário.

É exatamente isso que é um módulo. Particularmente, o OS O módulo fornece uma interface para o sistema operacional subjacente e nos permite executar muitas das operações que geralmente realizamos em um prompt de linha de comando.

Como tal, incorpora vários métodos e propriedades que podem ser chamadas como explicamos no artigo anterior. No entanto, precisamos importar (ou incluí -lo) em nosso ambiente usando a palavra -chave import:

>>> Importar sistema operacional 

Vamos imprimir o diretório de trabalho atual:

>>> OS.getcwd () 
Aprenda módulos Python

Vamos agora juntar tudo isso (junto com os conceitos discutidos no artigo anterior) para escrever o script desejado.

Script Python

É considerado uma boa prática iniciar um script com uma declaração que indica o objetivo do script, os termos de licença sob os quais é liberado e um histórico de revisão que listando as alterações que foram feitas. Embora isso seja mais uma preferência pessoal, acrescenta um toque profissional ao nosso trabalho.

Aqui está o script que produz a saída que mostramos no topo deste artigo. É fortemente comentado para que você possa entender o que está acontecendo.

Reserve alguns minutos para passar por isso antes de prosseguir. Observe como usamos uma estrutura se / else para determinar se o comprimento de cada legenda de campo é maior que o valor do próprio campo.

Com base no resultado, usamos caracteres vazios para preencher o espaço entre uma legenda de campo e o próximo. Além disso, usamos o número certo de traços como um separador entre a legenda do campo e seu valor abaixo.

#!/usr/bin/python3 # altere a linha acima para #!/usr/bin/python se você não tiver python 3 instalado # script name: uname.Py # Objetivo: Ilustre os recursos OOP da Python para escrever scripts de shell mais facilmente # Licença: GPL V3 (http: // www.gnu.org/licenças/GPL.html) # Copyright (c) 2016 Gabriel Alejandro Cánepa # Facebook / Skype / G+ / Twitter / Github: Gacanepa # Email: Gacanepa (AT) Gmail (DOT) COM # Este programa é software livre: você pode redistribuir e / ou modificar # Está sob os termos da licença pública geral da GNU, conforme publicado pela # The Free Software Foundation, versão 3 da licença ou # (por sua opção) qualquer versão posterior. # Este programa é distribuído na esperança de que seja útil, #, mas sem qualquer garantia; Sem sequer a garantia implícita de # comercialização ou aptidão para um propósito específico. Veja a licença pública geral # GNU para obter mais detalhes. # Você deveria ter recebido uma cópia da licença pública geral da GNU # junto com este programa. Se não, veja . # Histórico de revisões # Data Versão Autor Alteração Descrição # ---------- ------- -------------- # 2016-05-28 1.0 Gabriel Cánepa versão inicial # Importar o módulo OS Importar OS # Atribuir a saída do OS.uname () para a variável SystemInfo # OS.uname () retorna uma tupla de 5 cordas (sysname, nodename, liberação, versão, máquina) # documentação: https: // docs.Pitão.org/3.2/biblioteca/os.html#módulo-OS SystemInfo = OS.uname () # Esta é uma matriz fixa com as legendas desejadas nos cabeçalhos de saída do script = ["Sistema Operacional", "HostName", "Release", "Version", "Machine"] # Valor inicial da variável de índice. É usado para definir o # Índice de SystemInfo e cabeçalhos em cada etapa da iteração. índice = 0 # Valor inicial da variável de legenda. Legenda = "" # Valor inicial dos valores Variáveis ​​valores = "" # Valor inicial dos separadores Variable separadores = "" # Início do loop para o item no SystemInfo: se Len (item) < len(headers[index]): # A string containing dashes to the length of item[index] or headers[index] # To repeat a character(s), enclose it within quotes followed # by the star sign (*) and the desired number of times. separators = separators + "-" * len(headers[index]) + " " caption = caption + headers[index] + " " values = values + systemInfo[index] + " " * (len(headers[index]) - len(item)) + " " else: separators = separators + "-" * len(item) + " " caption = caption + headers[index] + " " * (len(item) - len(headers[index]) + 1) values = values + item + " " # Increment the value of index by 1 index = index + 1 # End of the loop # Print the variable named caption converted to uppercase print(caption.upper()) # Print separators print(separators) # Print values (items in systemInfo) print(values) # INSTRUCTIONS: # 1) Save the script as uname.py (or another name of your choosing) and give it execute permissions: # chmod +x uname.py # 2) Execute it: # ./uname.py 

Depois de salvar o script acima em um arquivo, faça permissões executadas e execute -o conforme indicado na parte inferior do código:

# chmod +x uname.py # ./uname.py 

Se você receber o seguinte erro ao tentar executar o script:

-Bash: ./uname.py:/usr/bin/python3: intérprete ruim: nenhum arquivo ou diretório 

Isso significa que você não tem Python 3 instalado. Se for esse o caso, você pode instalar o pacote ou substituir a linha do intérprete (Preste atenção especial e tenha muito cuidado se você seguir as etapas para atualizar os links simbólicos para os binários Python, conforme descrito no artigo anterior):

#!/usr/bin/python3 

com

#!/usr/bin/python 

que causará a versão instalada de Python 2 Para executar o script em vez disso.

Observação: Este script foi testado com sucesso tanto em Python 2.x e 3.x.

Embora um tanto rudimentar, você pode pensar neste script como um módulo Python. Isso significa que você pode abri -lo no ocioso (Arquivo → Abrir… → Selecionar arquivo):

Abrir python em marcha lenta

Uma nova janela será aberta com o conteúdo do arquivo. Então vá para Execute → Execute módulo (ou apenas pressione F5). A saída do script será mostrada no shell original:

Execute o script python

Se você deseja obter os mesmos resultados com um script escrito puramente em Bash, Você precisaria usar uma combinação de AWK, SED e recorrer a métodos complexos para armazenar e recuperar itens em uma lista (sem mencionar o uso do TR para converter letras minúsculas em maiúsculas).

Além disso, Pitão Fornece portabilidade, pois todos os sistemas Linux são enviados com pelo menos uma versão Python (ou também 2.x ou 3.x, às vezes ambos). Se você precisar confiar em uma concha para atingir o mesmo objetivo, você precisará escrever versões diferentes do script com base no shell.

Isso mostra que os recursos de programação orientados a objetos podem se tornar fortes aliados dos administradores de sistemas.

Observação: Você pode encontrar este script python (e outros) em um dos meus repositórios do GitHub.

Resumo

Neste artigo, revisamos os conceitos de fluxo de controle, loops/iteração e módulos em Python. Mostramos como aproveitar os métodos e propriedades OOP em Python para simplificar scripts de shell complexos de outra forma.

Você tem outras idéias que gostaria de testar? Vá em frente e escreva seus próprios scripts Python e deixe -nos saber se tiver alguma dúvida. Não hesite em nos deixar uma linha usando o formulário de comentário abaixo, e entraremos em contato com você o mais rápido possível.