Guide du débutant sur les scripts shell: notions de base

Table des matières:

Guide du débutant sur les scripts shell: notions de base
Guide du débutant sur les scripts shell: notions de base

Vidéo: Guide du débutant sur les scripts shell: notions de base

Vidéo: Guide du débutant sur les scripts shell: notions de base
Vidéo: Google Maps va vous permettre d'optimiser votre consommation en fonction de votre motorisation ! - YouTube 2024, Mars
Anonim
Le terme «script shell» est souvent mentionné dans les forums Linux, mais de nombreux utilisateurs ne le connaissent pas bien. L'apprentissage de cette méthode de programmation simple et puissante peut vous aider à gagner du temps, à mieux apprendre la ligne de commande et à éliminer les tâches fastidieuses de gestion de fichiers.
Le terme «script shell» est souvent mentionné dans les forums Linux, mais de nombreux utilisateurs ne le connaissent pas bien. L'apprentissage de cette méthode de programmation simple et puissante peut vous aider à gagner du temps, à mieux apprendre la ligne de commande et à éliminer les tâches fastidieuses de gestion de fichiers.

Qu'est-ce qu'un script shell?

Être un utilisateur Linux signifie que vous jouez avec la ligne de commande. Qu'on le veuille ou non, il y a juste des choses qui se font beaucoup plus facilement via cette interface que de pointer et cliquer. Plus vous utilisez et apprenez la ligne de commande, plus vous en voyez le potentiel. Eh bien, la ligne de commande elle-même est un programme: le shell. La plupart des distributions Linux utilisent aujourd'hui Bash, et c’est en cela que vous entrez des commandes.

Certains d’entre vous qui utilisaient Windows avant d’utiliser Linux se souviennent peut-être des fichiers de commandes. C'étaient de petits fichiers texte que vous pourriez remplir avec des commandes à exécuter et Windows les exécuterait à leur tour. C’était un moyen astucieux et astucieux d’effectuer certaines tâches, comme lancer des jeux dans votre laboratoire informatique du lycée quand vous ne pouviez pas ouvrir de dossiers système ni créer de raccourcis. Les fichiers batch dans Windows, bien qu'utiles, constituent une imitation peu coûteuse des scripts shell.

Les scripts shell nous permettent de programmer des commandes dans des chaînes et de les exécuter comme un événement scripté, comme des fichiers de commandes. Ils permettent également des fonctions beaucoup plus utiles, telles que la substitution de commande. Vous pouvez appeler une commande, telle que la date, et utiliser sa sortie dans le cadre d’un schéma de nommage de fichier. Vous pouvez automatiser les sauvegardes et la date du jour de chaque fichier copié peut être ajoutée à la fin de son nom. Les scripts ne sont pas simplement des invocations de commandes. Ce sont des programmes à part entière. La création de scripts vous permet d’utiliser des fonctions de programmation - telles que les boucles "for", les instructions if / then / else, etc. directement dans l’interface de votre système d’exploitation. Et vous n’êtes pas obligé d’apprendre une autre langue car vous utilisez ce que vous savez déjà: la ligne de commande.
Les scripts shell nous permettent de programmer des commandes dans des chaînes et de les exécuter comme un événement scripté, comme des fichiers de commandes. Ils permettent également des fonctions beaucoup plus utiles, telles que la substitution de commande. Vous pouvez appeler une commande, telle que la date, et utiliser sa sortie dans le cadre d’un schéma de nommage de fichier. Vous pouvez automatiser les sauvegardes et la date du jour de chaque fichier copié peut être ajoutée à la fin de son nom. Les scripts ne sont pas simplement des invocations de commandes. Ce sont des programmes à part entière. La création de scripts vous permet d’utiliser des fonctions de programmation - telles que les boucles "for", les instructions if / then / else, etc. directement dans l’interface de votre système d’exploitation. Et vous n’êtes pas obligé d’apprendre une autre langue car vous utilisez ce que vous savez déjà: la ligne de commande.

C’est vraiment le pouvoir des scripts, je pense. Vous pouvez programmer avec les commandes que vous connaissez déjà, tout en apprenant les bases de la plupart des principaux langages de programmation. Besoin de faire quelque chose de répétitif et fastidieux? Scriptez-le! Besoin d'un raccourci pour une commande vraiment compliquée? Scriptez-le! Vous souhaitez créer une interface de ligne de commande vraiment facile à utiliser? Scriptez-le!

Avant que tu commences

Avant de commencer notre série de scripts, couvrons quelques informations de base. Nous allons utiliser le shell bash, que la plupart des distributions Linux utilisent en natif. Bash est également disponible pour les utilisateurs de Mac OS et Cygwin sous Windows. Comme il est si universel, vous devriez pouvoir écrire un script indépendamment de votre plate-forme. En outre, tant que toutes les commandes référencées existent, les scripts peuvent fonctionner sur plusieurs plates-formes sans nécessiter d'ajustements minimes.

Les scripts peuvent facilement utiliser les privilèges «administrateur» ou «superutilisateur». Il est donc préférable de tester les scripts avant de les utiliser. Faites également preuve de bon sens, comme de vous assurer que vous avez bien sauvegardé les fichiers sur lesquels vous allez exécuter un script. Il est également très important d’utiliser les bonnes options, telles que –i pour la commande rm, de sorte que votre interaction soit nécessaire. Cela peut éviter de mauvaises erreurs. En tant que tel, lisez les scripts que vous téléchargez et faites attention aux données que vous possédez, juste au cas où quelque chose ne va pas.

À la base, les scripts ne sont que des fichiers texte. Vous pouvez utiliser n'importe quel éditeur de texte pour les écrire: gedit, emacs, vim, nano… Cette liste est longue. Assurez-vous simplement de l'enregistrer sous forme de texte brut, pas de texte enrichi, ni sous forme de document Word. Puisque j'aime la facilité d'utilisation fournie par nano, je vais l'utiliser.

Autorisations de script et noms

Les scripts sont exécutés comme des programmes et, pour ce faire, ils doivent disposer des autorisations appropriées. Vous pouvez rendre les scripts exécutables en exécutant la commande suivante:

chmod +x ~/somecrazyfolder/script1

Cela permettra à quiconque d'exécuter ce script particulier. Si vous souhaitez limiter son utilisation à votre utilisateur, vous pouvez utiliser ceci à la place:

chmod u+x ~/somecrazyfolder/script1

Pour exécuter ce script, vous devez vous connecter au répertoire approprié, puis exécuter le script de la manière suivante:

cd ~/somecrazyfolder

./script1

Pour rendre les choses plus pratiques, vous pouvez placer les scripts dans un dossier «bin» de votre répertoire personnel:

~/bin

Dans beaucoup de distributions modernes, ce dossier n'est plus créé par défaut, mais vous pouvez le créer. C'est généralement là que sont stockés les fichiers exécutables qui appartiennent à votre utilisateur et non à d'autres utilisateurs. En plaçant des scripts ici, vous pouvez simplement les exécuter en tapant leur nom, comme d’autres commandes, sans avoir à vous déplacer et à utiliser le préfixe ‘./’.

Avant de nommer un script, vous devez utiliser la commande suivante pour vérifier si un programme installé utilise ce nom:

which [command]

Beaucoup de gens appellent leurs premiers scripts «test» et quand ils essaient de l'exécuter en ligne de commande, rien ne se passe. Cela est dû au fait qu’il entre en conflit avec la commande test, qui ne fait rien sans arguments. Assurez-vous toujours que vos noms de script n'entrent pas en conflit avec les commandes, sinon vous risquez de vous retrouver à faire des choses que vous n'avez pas l'intention de faire!

Directives de script

Comme je l'ai déjà mentionné, chaque fichier de script est essentiellement du texte brut.Cela ne veut pas dire que vous pouvez écrire ce que vous voulez, bon gré mal gré. Lorsque vous tentez d’exécuter un fichier texte, les shells l’analysent pour vous aider à savoir s’il s’agit de scripts ou non, et à la manière de tout gérer correctement. Pour cette raison, vous devez connaître quelques directives.
Comme je l'ai déjà mentionné, chaque fichier de script est essentiellement du texte brut.Cela ne veut pas dire que vous pouvez écrire ce que vous voulez, bon gré mal gré. Lorsque vous tentez d’exécuter un fichier texte, les shells l’analysent pour vous aider à savoir s’il s’agit de scripts ou non, et à la manière de tout gérer correctement. Pour cette raison, vous devez connaître quelques directives.
  1. Chaque script doit être avec “#! / Bin / bash”
  2. Chaque nouvelle ligne est une nouvelle commande
  3. Les lignes de commentaires commencent par un #
  4. Les commandes sont entourées de ()

Le Hack-Bang Hack

Lorsqu'un shell analyse un fichier texte, le moyen le plus direct d'identifier le fichier en tant que script consiste à insérer votre première ligne:

#!/bin/bash

Si vous utilisez un autre shell, remplacez son chemin ici. Les lignes de commentaire commencent par un hachage (#), mais l'ajout du bang (!) Et du chemin d'accès au shell est une sorte de hack qui contournera cette règle de commentaire et forcera le script à s'exécuter avec le shell vers lequel cette ligne pointe.

Nouvelle ligne = nouvelle commande

Chaque nouvelle ligne doit être considérée comme une nouvelle commande ou un composant d’un système plus vaste. Les instructions if / then / else, par exemple, prendront en charge plusieurs lignes, mais chaque composant de ce système est dans une nouvelle ligne. Ne laissez pas une commande se répercuter sur la ligne suivante, car cela peut tronquer la commande précédente et vous donner une erreur sur la ligne suivante. Si votre éditeur de texte est en train de le faire, vous devez désactiver l’emballage de texte pour plus de sécurité. Vous pouvez désactiver l'habillage du texte en nano bit en appuyant sur ALT + L.

Commenter souvent avec #s

Si vous démarrez une ligne avec un #, la ligne est ignorée. Cela le transforme en une ligne de commentaire, où vous pouvez vous rappeler ce que la sortie de la commande précédente était ou ce que la commande suivante fera. Encore une fois, désactivez l'habillage du texte ou divisez votre commentaire en plusieurs lignes commençant par un dièse. Il est recommandé de conserver de nombreux commentaires, car cela vous permet, à vous et à d’autres personnes, de modifier vos scripts plus facilement. La seule exception est le hack Hash-Bang susmentionné, ne suivez donc pas #s avec! S.;-)

Les commandes sont entourées de parenthèses

Dans les jours plus anciens, les substitutions de commandes étaient effectuées avec des graduations simples (`, partage la clé ~). Nous n’allons pas encore en parler, mais comme la plupart des gens partent à la découverte des bases, c’est probablement une bonne idée de mentionner que vous devriez plutôt utiliser des parenthèses. Ceci est principalement dû au fait que lorsque vous imbriquez - placez des commandes dans d'autres commandes - les parenthèses fonctionnent mieux.

Votre premier script

Commençons par un script simple qui vous permet de copier des fichiers et d’ajouter des dates à la fin du nom de fichier. Appelons cela «datecp». Tout d’abord, vérifions si ce nom est en conflit avec quelque chose:

Vous pouvez constater qu’il n’ya aucun résultat de la commande quelle. Nous sommes donc prêts à utiliser ce nom.
Vous pouvez constater qu’il n’ya aucun résultat de la commande quelle. Nous sommes donc prêts à utiliser ce nom.

Créons un fichier vierge dans le dossier ~ / bin:

touch ~/bin/datecp

Et changeons l’autorisation maintenant, avant d’oublier:
Et changeons l’autorisation maintenant, avant d’oublier:
Commençons alors à construire notre script. Ouvrez ce fichier dans l'éditeur de texte de votre choix. Comme je l'ai dit, j'aime la simplicité de nano.
Commençons alors à construire notre script. Ouvrez ce fichier dans l'éditeur de texte de votre choix. Comme je l'ai dit, j'aime la simplicité de nano.

nano ~/bin/datecp

Et, allons de l'avant et insérons la première ligne du prérequis, ainsi qu'un commentaire sur le rôle de ce script.

Ensuite, déclarons une variable. Si vous avez déjà pris de l’algèbre, vous savez probablement ce que c’est. Une variable nous permet de stocker des informations et de faire des choses avec. Les variables peuvent «se développer» lorsqu'elles sont référencées ailleurs. C'est-à-dire qu'au lieu d'afficher leur nom, ils afficheront le contenu stocké. Vous pourrez ultérieurement dire à cette même variable de stocker des informations différentes et toute instruction ultérieure à cette nouvelle utilisera les nouvelles informations. C’est un espace réservé vraiment chic.
Ensuite, déclarons une variable. Si vous avez déjà pris de l’algèbre, vous savez probablement ce que c’est. Une variable nous permet de stocker des informations et de faire des choses avec. Les variables peuvent «se développer» lorsqu'elles sont référencées ailleurs. C'est-à-dire qu'au lieu d'afficher leur nom, ils afficheront le contenu stocké. Vous pourrez ultérieurement dire à cette même variable de stocker des informations différentes et toute instruction ultérieure à cette nouvelle utilisera les nouvelles informations. C’est un espace réservé vraiment chic.

Que mettrons-nous en variable? Eh bien, stockons la date et l’heure! Pour ce faire, nous allons faire appel à la commande date.

Jetez un coup d’œil à la capture d’écran ci-dessous pour savoir comment générer le résultat de la commande date:

Utilisons cette dernière itération de la commande date, «date +% m_% d_% y-% H.% M.% S», et l’utilisons dans notre script.

Si nous sauvegardions ce script maintenant, nous pourrions le lancer et cela nous donnerait le résultat de la commande date comme nous l’attendions:
Si nous sauvegardions ce script maintenant, nous pourrions le lancer et cela nous donnerait le résultat de la commande date comme nous l’attendions:
Mais faisons quelque chose de différent. Donnons un nom de variable, tel que date formatted à cette commande. La syntaxe appropriée pour cela est la suivante:
Mais faisons quelque chose de différent. Donnons un nom de variable, tel que date formatted à cette commande. La syntaxe appropriée pour cela est la suivante:

variable=$(command –options arguments)

Et pour nous, nous le construirions comme ceci:

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

C'est ce que nous appelons la substitution de commande. Nous disons essentiellement à bash que chaque fois que la variable «date formatted» s’affiche, il faut exécuter la commande entre parenthèses. Ensuite, quelle que soit la sortie fournie par les commandes, elle devrait être affichée à la place du nom de la variable, "date formatted".
C'est ce que nous appelons la substitution de commande. Nous disons essentiellement à bash que chaque fois que la variable «date formatted» s’affiche, il faut exécuter la commande entre parenthèses. Ensuite, quelle que soit la sortie fournie par les commandes, elle devrait être affichée à la place du nom de la variable, "date formatted".

Voici un exemple de script et sa sortie:

Image
Image
Notez qu'il y a deux espaces dans la sortie. L'espace entre les guillemets de la commande echo et l'espace devant la variable sont tous deux affichés. N'utilisez pas d'espaces si vous ne voulez pas qu'ils apparaissent. Notez également que sans cette ligne «echo» ajoutée, le script ne donnerait absolument aucune sortie.
Notez qu'il y a deux espaces dans la sortie. L'espace entre les guillemets de la commande echo et l'espace devant la variable sont tous deux affichés. N'utilisez pas d'espaces si vous ne voulez pas qu'ils apparaissent. Notez également que sans cette ligne «echo» ajoutée, le script ne donnerait absolument aucune sortie.

Revenons à notre script. Ajoutons ensuite la partie copie de la commande.

cp –iv $1 $2.$date_formatted

Ceci invoquera la commande copy avec les options –i et –v. Le premier vous demandera une vérification avant d'écraser un fichier, et le second affichera ce qui est en train d'être arrêté sur la ligne de commande.
Ceci invoquera la commande copy avec les options –i et –v. Le premier vous demandera une vérification avant d'écraser un fichier, et le second affichera ce qui est en train d'être arrêté sur la ligne de commande.

Ensuite, vous pouvez voir que j’ai ajouté l’option «$ 1».Lors de la création d'un script, un signe dollar ($) suivi d'un nombre indiquera cet argument numéroté du script lors de son invocation. Par exemple, dans la commande suivante:

cp –iv Trogdor2.mp3 ringtone.mp3

Le premier argument est «Trogdor2.mp3» et le deuxième argument est «sonnerie».mp3.

En regardant notre script, nous pouvons voir que nous référons à deux arguments:

Cela signifie que lorsque nous exécutons le script, nous devons fournir deux arguments pour que le script s'exécute correctement. Le premier argument, $ 1, est le fichier qui sera copié. Il est remplacé par le premier argument de la commande '' cp '' ''. ''.
Cela signifie que lorsque nous exécutons le script, nous devons fournir deux arguments pour que le script s'exécute correctement. Le premier argument, $ 1, est le fichier qui sera copié. Il est remplacé par le premier argument de la commande '' cp '' ''. ''.

Le deuxième argument, $ 2, agira comme fichier de sortie pour la même commande. Mais, vous pouvez aussi voir que c'est différent. Nous avons ajouté un point et nous avons référencé la variable "datate_formatted" à partir de la variable ci-dessus. Curieux de savoir ce que cela fait?

Voici ce qui se passe lorsque le script est exécuté:

Vous pouvez voir que le fichier de sortie est répertorié comme tout ce que j'ai entré pour $ 2, suivi d'un point, puis du résultat de la commande date! C'est logique, non?
Vous pouvez voir que le fichier de sortie est répertorié comme tout ce que j'ai entré pour $ 2, suivi d'un point, puis du résultat de la commande date! C'est logique, non?

Maintenant, lorsque j'exécute la commande datecp, il exécutera ce script et me permettra de copier tout fichier dans un nouvel emplacement et d'ajouter automatiquement la date et l'heure à la fin du nom de fichier. Utile pour archiver des choses!

Les scripts Shell sont au cœur de la réussite de votre système d'exploitation. Vous n'avez pas non plus besoin d'apprendre un nouveau langage de programmation. Essayez de créer des scripts avec quelques commandes de base chez vous et commencez à penser à ce que vous pouvez utiliser.

Avez-vous un script? Avez-vous des conseils pour les débutants? Partagez votre opinion dans les commentaires! Il y a plus à venir dans cette série!

Conseillé: