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.
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
- Chaque script doit être avec “#! / Bin / bash”
- Chaque nouvelle ligne est une nouvelle commande
- Les lignes de commentaires commencent par un #
- 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:
Créons un fichier vierge dans le dossier ~ / bin:
touch ~/bin/datecp
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.
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.
variable=$(command –options arguments)
Et pour nous, nous le construirions comme ceci:
date_formatted=$(date +%m_%d_%y-%H.%M.%S)
Voici un exemple de script et sa sortie:
Revenons à notre script. Ajoutons ensuite la partie copie de la commande.
cp –iv $1 $2.$date_formatted
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:
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é:
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!