Apprenez le flux de contrôle Python et les boucles pour écrire et régler les scripts de coquille - Partie 2

Apprenez le flux de contrôle Python et les boucles pour écrire et régler les scripts de coquille - Partie 2

Dans l'article précédent de cette série Python, nous avons partagé une brève introduction à Python, son shell de ligne de commande et le ralenti.

Nous avons également démontré comment effectuer des calculs arithmétiques, comment stocker les valeurs en variables et comment imprimer ces valeurs à l'écran. Enfin, nous avons expliqué les concepts de méthodes et de propriétés dans le contexte de la programmation orientée objet à travers un exemple pratique.

Dans ce guide, nous discuterons du flux de contrôle (pour choisir différentes plans d'action en fonction des informations saisies par un utilisateur, le résultat d'un calcul ou de la valeur actuelle d'une variable) et des boucles (pour automatiser les tâches répétitives) puis appliquer Ce que nous avons appris jusqu'à présent pour écrire un simple script de shell qui affichera le type de système d'exploitation, le nom d'hôte, la version, la version, la version et le nom du matériel de la machine.

Cet exemple, bien que basique, nous aidera à illustrer comment nous pouvons tirer parti Python oopLes capacités d'écrire des scripts de shell plus facilement que d'utiliser des outils bash réguliers.

En d'autres termes, nous voulons aller de

# uname -snrvm 
Vérifiez le nom d'hôte du Linux

pour

Vérifiez le nom d'hôte Linux à l'aide du script Python

ou

Script pour vérifier les informations du système Linux

Ça a l'air joli, n'est-ce pas? Renvons nos manches et faisons que cela se produise.

Table des matières

1
  • Apprendre le flux de contrôle dans Python
  • Apprenez des boucles en python
  • Modules python
  • Script python
      • Résumé

Apprendre le flux de contrôle dans Python

Comme nous l'avons dit plus tôt, flux de contrôle nous permet de choisir différents résultats en fonction d'une condition donnée. Son implémentation la plus simple dans Python est un sinon clause.

La syntaxe de base est:

Si condition: # Action 1 Else: # Action 2 
  • Lorsque la condition évalue à True, le bloc de code ci-dessous sera exécuté (représenté par # Action 1. Sinon, le code sous Else sera exécuté.
  • Une condition peut être n'importe quelle déclaration qui peut évaluer comme vraie ou fausse.

Par exemple:

1 < 3 # true firstName == "Gabriel" # true for me, false for anyone not named Gabriel 
  • Dans le premier exemple, nous avons comparé deux valeurs pour déterminer si l'une est supérieure à celle de l'autre.
  • Dans le deuxième exemple, nous avons comparé prénom (une variable) pour déterminer si, au point d'exécution actuel, sa valeur est identique à «Gabriel"
  • La condition et la déclaration de la main doivent être suivies d'un côlon (:)
  • L'indentation est importante à Python. Les lignes avec une indentation identique sont considérées comme dans le même bloc de code.

Veuillez noter que le sinon La déclaration n'est qu'un des nombreux outils de flux de contrôle Disponible en python. Nous l'avons revu ici car nous l'utiliserons dans notre script plus tard. Vous pouvez en savoir plus sur le reste des outils dans les documents officiels.

Apprenez des boucles en python

Autrement dit, un boucle est une séquence d'instructions ou de déclarations qui sont exécutées dans l'ordre tant qu'une condition est vraie, ou une fois par élément dans une liste.

La boucle la plus simple de Python est représentée par le pour boucle qui itère sur les éléments d'une liste donnée ou d'une chaîne commençant par le premier élément et se terminant par le dernier.

Syntaxe de base:

pour x dans l'exemple: # faites ceci 

Ici, l'exemple peut être une liste ou une chaîne. Si le premier, la variable nommée X représente chaque élément de la liste; Si ce dernier, X représente chaque caractère dans la chaîne:

>>> Rockbands = [] >>> Rockbands.Ajouter ("Roxette") >>> RockBands.Ajouter ("Guns n 'Roses") >>> RockBands.Ajouter ("u2") >>> pour x dans les bandes de rock: imprimer (x) ou >>> firstName = "gabriel" >>> pour x dans FirstName: Print (x) 

La sortie des exemples ci-dessus est montrée dans l'image suivante:

Apprenez des boucles en python

Modules python

Pour des raisons évidentes, il doit y avoir un moyen de sauver une séquence d'instructions et de déclarations Python dans un fichier qui peut être invoqué lorsqu'il est nécessaire.

C'est précisément ce qu'est un module. En particulier, le OS Le module fournit une interface au système d'exploitation sous-jacent et nous permet d'effectuer de nombreuses opérations que nous effectuons habituellement dans une invite de ligne de commande.

En tant que tel, il intègre plusieurs méthodes et propriétés qui peuvent être appelées comme nous l'avons expliqué dans l'article précédent. Cependant, nous devons l'importer (ou l'inclure) dans notre environnement en utilisant le mot-clé d'importation:

>>> Importer un système d'exploitation 

Imprimons le répertoire de travail actuel:

>>> OS.getCwd () 
Apprenez les modules Python

Allons maintenant tout cela ensemble (avec les concepts discutés dans l'article précédent) pour écrire le script souhaité.

Script python

Il est considéré comme une bonne pratique pour démarrer un script avec une déclaration qui indique le but du script, les termes de licence sous laquelle il est publié et un historique de révision répertoriant les modifications qui ont été apportées. Bien que ce soit plus une préférence personnelle, cela ajoute une touche professionnelle à notre travail.

Voici le script qui produit la sortie que nous avons montrée en haut de cet article. Il est fortement commenté pour que vous puissiez comprendre ce qui se passe.

Prenez quelques minutes pour le passer avant de continuer. Notez comment nous utilisons une structure if / else pour déterminer si la longueur de chaque légende de champ est supérieure à la valeur du champ lui-même.

Sur la base du résultat, nous utilisons des caractères vides pour remplir l'espace entre une légende de champ et la suivante. De plus, nous utilisons le bon nombre de tirets comme séparateur entre la légende du champ et sa valeur ci-dessous.

#!/ usr / bin / python3 # Changez la ligne ci-dessus en #!/ usr / bin / python Si vous n'avez pas Python 3 installé # Nom du script: uname.Py # Objectif: illustrer les capacités OOP de Python pour écrire plus facilement les scripts shell # Licence: GPL V3 (http: // www.gnou.org / licences / gpl.HTML) # Copyright (C) 2016 Gabriel Alejandro Cánepa # Facebook / Skype / G + / Twitter / GitHub: Gacanepa # Courriel: Gacanepa (AT) Gmail (DOT) Com # Ce programme est un logiciel gratuit: vous pouvez le redistribuer et / ou modifier # Il est selon les termes de la licence publique générale GNU publiée par # The Free Software Foundation, soit la version 3 de la licence, ou # (à votre option) toute version ultérieure. # Ce programme est distribué dans l'espoir qu'il sera utile, # mais sans aucune garantie; sans même la garantie implicite de # # marchand ou d'aptitude à un usage particulier. Voir la licence publique générale # GNU pour plus de détails. # Vous devriez avoir reçu une copie de la licence publique générale GNU # avec ce programme. Sinon, voir . # Historique de révision # Date Version AUTHER Change Description # ---------- ------- -------------- # 2016-05-28 1.0 Gabriel Cánepa Version initiale # Importer le module OS Importer OS # Attribuez la sortie du système d'exploitation.uname () à la variable systeminfo # OS.Uname () renvoie un tuple à 5 cordes (sysname, nodename, version, version, machine) # documentation: https: // docs.python.org / 3.2 / bibliothèque / OS.html # module-OS Systeminfo = OS.uname () # Il s'agit d'un tableau fixe avec les légendes souhaitées dans les en-têtes de sortie du script = ["Système d'exploitation", "nom d'hôte", "version", "version", "machine"] # Valeur initiale de la variable d'index. Il est utilisé pour définir l'indice # de Systeminfo et des en-têtes à chaque étape de l'itération. index = 0 # valeur initiale de la variable de légende. légende = "" # Valeur initiale des valeurs variables valeurs = "" # Valeur initiale des séparateurs Séparateurs de variables = "" # Démarrage de la boucle pour l'élément dans Syminfo: If Len (élément) < 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 

Une fois que vous avez enregistré le script ci-dessus dans un fichier, donnez-lui des autorisations et l'exécutez comme indiqué en bas du code:

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

Si vous obtenez l'erreur suivante lors de la tentative d'exécution du script:

-frapper: ./ton nom.py: / usr / bin / python3: mauvais interprète: aucun fichier ou répertoire de ce type 

Cela signifie que vous n'avez pas Python 3 installée. Si tel est le cas, vous pouvez soit installer le package ou remplacer la ligne d'interprète (Portez une attention particulière et soyez très prudent si vous avez suivi les étapes pour mettre à jour les liens symboliques vers les binaires Python comme indiqué dans l'article précédent):

#!/ usr / bin / python3 

avec

#!/ usr / bin / python 

ce qui entraînera la version installée de Python 2 Pour exécuter le script à la place.

Note: Ce script a été testé avec succès à la fois dans Python 2.X et 3.X.

Bien que quelque peu rudimentaire, vous pouvez considérer ce script comme un module Python. Cela signifie que vous pouvez l'ouvrir au ralenti (Fichier → Ouvrir… → Sélectionner le fichier):

Ouvrir le python au ralenti

Une nouvelle fenêtre s'ouvrira avec le contenu du fichier. Ensuite aller à Exécuter → Exécuter module (ou simplement appuyer F5). La sortie du script sera affichée dans le shell d'origine:

Exécuter le script Python

Si vous souhaitez obtenir les mêmes résultats avec un script écrit uniquement dans Frapper, Vous auriez besoin d'utiliser une combinaison de awk, sed et recourir à des méthodes complexes pour stocker et récupérer des articles dans une liste (sans parler de l'utilisation de TR pour convertir des lettres minuscules en majuscules).

En outre, Python Fournit la portabilité en ce que tous les systèmes Linux sont expédiés avec au moins une version Python (soit 2.X ou 3.X, Parfois les deux). Si vous devez compter sur un shell pour atteindre le même objectif, vous devez écrire différentes versions du script en fonction de la coquille.

Cela montre que les fonctionnalités de programmation orientées objet peuvent devenir des alliés forts d'administrateurs système.

Note: Vous pouvez trouver ce script Python (et d'autres) dans l'un de mes référentiels GitHub.

Résumé

Dans cet article, nous avons passé en revue les concepts du flux de contrôle, des boucles / itération et des modules dans Python. Nous avons montré comment tirer parti des méthodes et des propriétés OOP dans Python pour simplifier les scripts de coquille autrement complexes.

Avez-vous d'autres idées que vous souhaitez tester? Allez-y et écrivez vos propres scripts Python et faites-nous savoir si vous avez des questions. N'hésitez pas à nous laisser une ligne en utilisant le formulaire de commentaire ci-dessous, et nous vous répondrons dès que possible.