Comment exécuter un script shell sous Linux [Essentials Explained for Beginners]

Il existe deux manières d’exécuter un script shell sous Linux. Vous pouvez utiliser:

bash script.sh

Ou vous pouvez exécuter le script shell comme ceci :

./script.sh

C’est peut-être simple, mais cela n’explique pas grand-chose. Ne vous inquiétez pas, je ferai les explications nécessaires avec des exemples afin que vous compreniez pourquoi une syntaxe particulière est utilisée dans le format donné lors de l’exécution d’un script shell.

Je vais utiliser ce script shell d’une ligne pour rendre les choses aussi simples que possible :

[email protected]:~/Scripts$ cat hello.sh

echo "Hello World!"

Méthode 1 : Exécution d’un script shell en passant le fichier en argument au shell

La première méthode consiste à passer le nom du fichier de script comme argument au shell.

Étant donné que bash est le shell par défaut, vous pouvez exécuter un script comme celui-ci :

bash hello.sh

Connaissez-vous l’avantage de cette approche? Votre script n’a pas besoin d’avoir l’autorisation d’exécution. Assez pratique pour des tâches simples et rapides.

Exécuter un script Shell Linux

Si vous ne connaissez pas déjà, je vous conseille de lire mon guide détaillé sur l’autorisation de fichier sous Linux.

Gardez à l’esprit qu’il doit s’agir d’un script shell que vous passez en argument. Un script shell est composé de commandes. Si vous utilisez un fichier texte normal, il se plaindra des commandes incorrectes.

Exécution d’un fichier texte en tant que script

Dans cette approche, vous avez explicitement spécifié que vous souhaitez utiliser bash comme interprète pour le scénario.

Shell n’est qu’un programme et bash est une mise en œuvre de cela. Il existe d’autres programmes shell comme ksh, zsh, etc. Si vous avez d’autres shells installés, vous pouvez également les utiliser au lieu de bash.

Pour example, j’ai installé zsh et je l’ai utilisé pour exécuter le même script :

Exécutez le script Shell avec Zsh .ugb-4037db6-wrapper.ugb-container__wrapper{border-radius:0px !important;padding-top:0 !important;padding-bottom:0 !important;background-color:#f1f1f1 !important}. ugb-4037db6-wrapper > .ugb-container__side{padding-top:35px !important;padding-bottom:35px !important}.ugb-4037db6-wrapper.ugb-container__wrapper:before{background-color:#f1f1f1 !important}. ugb-4037db6-content-wrapper > h1,.ugb-4037db6-content-wrapper > h2,.ugb-4037db6-content-wrapper > h3,.ugb-4037db6-content-wrapper > h4,.ugb-4037db6-content- wrapper > h5,.ugb-4037db6-content-wrapper > h6{color:#222222}.ugb-4037db6-content-wrapper > p,.ugb-4037db6-content-wrapper > ol li,.ugb-4037db6-content- emballage > ul li{color:#222222}

Lecture recommandée :

.ugb-16406c5 .ugb-blog-posts__featured-image{border-radius:0px !important}.ugb-16406c5 .ugb-blog-posts__title a{color:#000000 !important}.ugb-16406c5 .ugb-blog-posts__title a:hover{color:#00b6ba !important}

Comment exécuter plusieurs commandes Linux à la fois dans un terminal Linux [Essential Beginners Tip]

Méthode 2 : exécuter le script shell en spécifiant son chemin

L’autre méthode pour exécuter un script shell consiste à fournir son chemin. Mais pour que cela soit possible, votre fichier doit être exécutable. Sinon, vous aurez l’erreur « autorisation refusée » lorsque vous essayez d’exécuter le script.

Vous devez donc d’abord vous assurer que votre script dispose de l’autorisation d’exécution. Tu peux utiliser la commande chmod pour vous donner cette permission comme ceci :

chmod u+x script.sh

Une fois que votre script est exécutable, tout ce que vous avez à faire est de taper le nom du fichier ainsi que son chemin absolu ou relatif. Le plus souvent vous êtes dans le même répertoire donc vous l’utilisez simplement comme ceci :

./script.sh

Si vous n’êtes pas dans le même répertoire que votre script, vous pouvez lui indiquer le chemin absolu ou relatif vers le script :

Exécution du script Shell dans un autre répertoire

Ce ./ avant le script est important (quand on est dans le même répertoire que le script)

Pourquoi ne pouvez-vous pas utiliser le nom du script lorsque vous êtes dans le même répertoire ? C’est parce que vos systèmes Linux recherchent les exécutables à exécuter dans quelques répertoires sélectionnés qui sont spécifiés dans la variable PATH.

Voici la valeur de la variable PATH pour mon système :

[email protected]:~$ echo $PATH
/home/abhishek/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Cela signifie que tout fichier avec des autorisations d’exécution dans l’un des répertoires suivants peut être exécuté depuis n’importe où dans le système :

  • /home/abhishek/.local/bin
  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /poubelle
  • /usr/jeux
  • /usr/local/games
  • /snap/bin

Les binaires ou les fichiers exécutables des commandes Linux comme ls, cat, etc. se trouvent dans l’un de ces répertoires. C’est pourquoi vous pouvez exécuter ces commandes depuis n’importe où sur votre système en utilisant simplement leurs noms. Voir, la commande ls se trouve dans le répertoire /usr/bin.

Lorsque vous spécifiez le script SANS le chemin absolu ou relatif, il ne peut pas le trouver dans les répertoires mentionnés dans la variable PATH.

Pourquoi la plupart des scripts shell contiennent # ! /poubelle/bash au début des scripts shell ?

Rappelez-vous comment j’ai mentionné que shell n’est qu’un programme et qu’il existe différentes implémentations de shells.

Lorsque vous utilisez le #! /poubelle/bash, vous spécifiez que le script doit être exécuté avec bash comme interprète. Si vous ne le faites pas et exécutez un script de la manière ./script.sh, il est généralement exécuté avec le shell que vous exécutez.

Est-ce que ça importe? Ça pourrait. Vous voyez, la plupart de la syntaxe du shell est commune à tous les types de shell, mais certaines peuvent différer.

Pour example, le comportement du tableau est différent dans bash et zsh coquilles. Dans zsh, l’index du tableau commence à 1 au lieu de 0.

Bash contre Zsh

Utilisant #! /poubelle/bash indique que le script est bash script shell et doit être exécuté avec bash comme interpréteur quel que soit le shell utilisé sur le système. Si vous utilisez une syntaxe spécifique à zsh, vous pouvez indiquer qu’il s’agit d’un script zsh en ajoutant # ! /bin/zsh comme première ligne du script.

L’espace entre # ! /poubelle/bash n’a pas d’importance. Vous pouvez également utiliser #!/bin/bash.

Cela vous a-t-il été utile ?

J’espère que cet article a ajouté à vos connaissances Linux. Si vous avez encore des questions ou des suggestions, veuillez laisser un commentaire.

Les utilisateurs experts peuvent toujours pinailler cet article sur des choses que j’ai manquées. Mais le problème avec de tels sujets pour débutants est qu’il n’est pas facile de trouver le bon équilibre d’informations et d’éviter d’avoir trop ou trop peu de détails.

Si vous êtes intéressé à apprendre bash scénario, nous avons un toute la série Bash pour débutants sur notre site Web axé sur l’administrateur système Manuel Linux. Si vous le souhaitez, vous pouvez également acheter l’ebook avec des exercices supplémentaires pour prendre en charge Linux Handbook.