23Aug

Le guide du débutant sur les scripts shell: les bases

click fraud protection

Le terme «shell scripting» est souvent mentionné dans les forums Linux, mais de nombreux utilisateurs ne le connaissent pas. Apprendre cette méthode de programmation facile et puissante peut vous aider à gagner du temps, à mieux apprendre la ligne de commande et à bannir les tâches fastidieuses de gestion de fichiers.

Qu'est-ce que le 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 quelques choses qui sont faites beaucoup plus facilement via cette interface qu'en pointant et cliquant. 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 ce que vous entrez dans les commandes.

Maintenant, certains d'entre vous qui utilisaient Windows avant d'utiliser Linux peuvent se souvenir des fichiers batch. Il s'agissait de petits fichiers texte que vous pouviez remplir avec des commandes à exécuter et Windows les exécutait à son tour. C'était une façon intelligente et soignée de faire certaines choses, comme lancer des jeux dans votre laboratoire d'informatique du lycée quand vous ne pouviez pas ouvrir les dossiers du système ou créer des raccourcis. Les fichiers batch dans Windows, bien qu'utiles, sont une imitation bon marché de scripts shell.

instagram viewer

Les scripts Shell nous permettent de programmer des commandes dans des chaînes et de les faire exécuter par le système en tant qu'événement scripté, tout comme les fichiers batch. Ils permettent également des fonctions beaucoup plus utiles, telles que la substitution de commande. Vous pouvez invoquer une commande, telle que la date, et utiliser sa sortie dans le cadre d'un schéma de dénomination de fichier. Vous pouvez automatiser les sauvegardes et chaque fichier copié peut avoir la date actuelle ajoutée à la fin de son nom. Les scripts ne sont pas seulement des invocations de commandes. Ce sont des programmes à part entière. Le script vous permet d'utiliser des fonctions de programmation, telles que des boucles "for", des instructions /then/ else, etc., directement dans l'interface de votre système d'exploitation. Et vous n'avez pas besoin d'apprendre une autre langue parce que vous utilisez ce que vous connaissez déjà: la ligne de commande.

C'est vraiment la puissance du script, je pense. Vous arrivez à programmer avec des commandes que vous connaissez déjà, tout en apprenant des agrafes de la plupart des principaux langages de programmation. Besoin de faire quelque chose de répétitif et fastidieux? Script le! Besoin d'un raccourci pour une commande vraiment compliquée? Script le! Vous voulez construire une interface de ligne de commande vraiment facile à utiliser pour quelque chose? Script le!

Avant de commencer

Avant de commencer notre série de scripts, couvrons quelques informations de base. Nous utiliserons le shell bash, que la plupart des distributions Linux utilisent nativement. Bash est également disponible pour les utilisateurs Mac OS et Cygwin sous Windows. Comme c'est tellement universel, vous devriez pouvoir écrire des scripts indépendamment de votre plateforme. En outre, tant que toutes les commandes référencées existent, les scripts peuvent fonctionner sur plusieurs plates-formes avec peu ou pas de réglages requis.

Les scripts peuvent facilement utiliser les privilèges "administrateur" ou "superutilisateur", il est donc préférable de tester les scripts avant de les mettre au travail. Utilisez également le bon sens, comme vous assurer que vous avez des sauvegardes des fichiers sur lesquels vous êtes sur le point d'exécuter un script. Il est également important d'utiliser les bonnes options, comme -i pour la commande rm, afin que votre interaction soit requise. Cela peut prévenir certaines erreurs désagréables. En tant que tel, lisez les scripts que vous téléchargez et soyez prudent avec les données que vous avez, juste au cas où les choses tournent mal.

À la base, les scripts sont simplement 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 en texte brut, pas en tant que texte enrichi ou document Word. Depuis que j'adore la facilité d'utilisation que nano fournit, je vais l'utiliser.

Script Permissions et noms

Les scripts sont exécutés comme des programmes, et pour cela, ils doivent avoir les permissions 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 voulez restreindre son utilisation à votre utilisateur, vous pouvez l'utiliser à la place:

chmod + /somecrazyfolder/ script1

Pour exécuter ce script, vous devez aller dans le répertoire approprié et lancer le script comme ceci:

cd ~ / somecrazyfolder

. /script1

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

~ / bin

Dans de nombreuses 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 appartenant à votre utilisateur et non aux autres utilisateurs. En plaçant des scripts ici, vous pouvez simplement les exécuter en tapant leur nom, tout comme les autres commandes, au lieu de devoir utiliser cd et utiliser le préfixe './'.

Avant de nommer un script, cependant, vous devriez avoir la commande suivante pour vérifier si vous avez un programme qui utilise ce nom:

qui [commande]

Beaucoup de gens nomment leurs premiers scripts "test", et quand ils essaient deexécutez-le dans la ligne de commande, rien ne se passe. C'est parce qu'il est en conflit avec la commande de test, qui ne fait rien sans arguments. Assurez-vous toujours que vos noms de scripts ne sont pas en conflit avec les commandes, sinon vous risquez de vous retrouver à faire des choses que vous n'avez pas l'intention de faire!

Instructions de script

Comme je l'ai mentionné précédemment, chaque fichier de script est essentiellement du texte brut. Cela ne signifie pas que vous pouvez écrire ce que vous voulez tout bon gré mal gré, cependant. Quand un fichier texte est tenté d'être exécuté, les shells les analysent pour savoir s'il s'agit de scripts ou non, et comment gérer tout correctement. Pour cette raison, il y a quelques directives que vous devez savoir.

  1. Chaque script devrait être avec "#!/bin/ bash "
  2. Chaque nouvelle ligne est une nouvelle commande
  3. Les lignes de commentaires commencent par #
  4. Les commandes sont entourées par()

Le Hash-Bang Hack

Lorsqu'un shell analyse un fichier texte, le moyen le plus direct d'identifier le fichierun script est en faisant votre première ligne:

#!/bin/ bash

Si vous utilisez un autre shell, remplacez son chemin ici. Les lignes de commentaires commencent par hashes( #), mais en ajoutant le bang( !) Et le chemin shell après que ce soit une sorte de hack qui contournera cette règle de commentaire et forcera le script à s'exécuter avec le shell vers lequel pointe cette ligne.

Nouvelle ligne = Nouvelle commande

Chaque nouvelle ligne doit être considérée comme une nouvelle commande ou un composant d'un système plus important. Si /then/ else instructions, par exemple, prendra plusieurs lignes, mais chaque composant de ce système est dans une nouvelle ligne. Ne laissez pas une commande saigner dans 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 le fait, vous devez désactiver l'habillage de texte pour être du bon côté.Vous pouvez désactiver l'habillage de texte en nano bits en appuyant sur ALT + L.

Commentaire 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 de texte ou divisez votre commentaire en plusieurs lignes commençant toutes par un hachage. L'utilisation de nombreux commentaires est une bonne pratique à suivre, car elle vous permet, ainsi qu'à d'autres personnes, de modifier vos scripts plus facilement. La seule exception est le hack Hash-Bang mentionné ci-dessus, donc ne pas suivre #s avec! S.;-) Les commandes

sont entourées par des parenthèses

Dans les jours anciens, les substitutions de commandes étaient faites avec des graduations individuelles( `, partage la touche ~).Nous n'allons pas encore toucher à cela, mais comme la plupart des gens partent et explorent après avoir appris les bases, c'est probablement une bonne idée de mentionner que vous devriez utiliser des parenthèses à la place. C'est principalement parce que lorsque vous imbriquez - mettez des commandes à l'intérieur 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-le "datecp".Tout d'abord, vérifions si ce nom est en conflit avec quelque chose:

Vous pouvez voir qu'il n'y a pas de sortie de la commande which, donc nous sommes tous configurés pour utiliser ce nom.

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

touch ~ /bin/ datecp

Et, changeons la permission maintenant, avant qu'on oublie:

Commençons donc par construire notre script. Ouvrez ce fichier dans votre éditeur de texte de votre choix. Comme je l'ai dit, j'aime la simplicité de nano.

nano ~ /bin/ datecp

Et, allons-y et mettons dans la première ligne de prérequis, et un commentaire sur ce que fait ce script.

Ensuite, déclarons une variable. Si vous avez déjà pris 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. Autrement dit, au lieu d'afficher leur nom, ils afficheront leur contenu stocké.Vous pouvez ensuite dire à cette même variable de stocker différentes informations, et toute instruction qui se produira après cela 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 appeler la commande date.

Jetez un oeil à la capture d'écran ci-dessous pour savoir comment construire la sortie de la commande date:

Vous pouvez voir qu'en ajoutant différentes variables qui commencent par%, vous pouvez changer la sortie de la commande à ce que vous voulez. Pour plus d'informations, vous pouvez consulter la page de manuel 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 devions enregistrer ce script maintenant, nous pourrions l'exécuter et nous donnerait la sortie de la commande date comme nous l'attendions:

Mais, faisons quelque chose de différent. Donnons un nom de variable, comme date_formatée à cette commande. La syntaxe appropriée pour ceci est la suivante:

variable = $( arguments de commande -options)

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 lorsque la variable "date_formatée" apparaît, pour exécuter la commande à l'intérieur des parenthèses. Ensuite, quelle que soit la sortie, les commandes doivent être affichées à la place du nom de la variable, "date_formatée".

Voici un exemple de script et sa sortie:

Notez qu'il y a deux espaces dans la sortie. L'espace dans les guillemets de la commande echo et l'espace devant la variable sont tous les 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 maintenant dans la partie copie de la commande.

cp -iv $ 1 $ 2. $ date_formaté

Invoque la commande copy avec les options -i et -v. Le premier vous demandera une vérification avant d'écraser un fichier, et ce dernier affichera ce qui est en panne sur la ligne de commande.

Ensuite, vous pouvez voir que j'ai ajouté l'option "$ 1".Lors de l'écriture de scripts, un signe dollar( $) suivi d'un nombre indique l'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 "ringtone.mp3".

En regardant notre script, nous pouvons voir que nous référençons deux arguments:

Cela signifie que lorsque nous exécuterons le script, nous aurons besoin de fournir deux arguments pour que le script s'exécute correctement. Le premier argument, $ 1, est le fichier qui sera copié et est remplacé par le premier argument de la commande "cp -iv".

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

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

Vous pouvez voir que le fichier de sortie est listé comme tout ce que j'ai entré pour $ 2, suivi d'un point, puis de la sortie de la commande date!Ça a du sens, non?

Maintenant quand j'exécute la commande datecp, il va exécuter ce script et me permettre de copier n'importe quel fichier à un nouvel emplacement, et ajouter automatiquement la date et l'heure à la fin du nom de fichier. Utile pour l'archivage des choses!

Les scripts Shell sont au cœur de votre système d'exploitation. Vous n'avez pas besoin d'apprendre un nouveau langage de programmation pour y arriver non plus. Essayez les scripts avec quelques commandes de base à la maison et commencez à penser à ce que vous pouvez utiliser pour cela.

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