Qu'est-ce que Shell ?
Si vous travaillez sur un système d'exploitation (OS) Microsoft, Apple ou Linux, vous utilisez des scripts shell, peut-être sans le savoir. En fait, vous interagissez avec des shells à chaque fois que vous démarrez votre système d'exploitation Linux.
Les scripts shell aident les programmeurs, les scientifiques des données et les utilisateurs occasionnels à gagner du temps et à éviter les tâches répétitives grâce à l'automatisation. Par exemple, les scripts peuvent effectuer des sauvegardes quotidiennes, installer des correctifs, surveiller les systèmes et l'activité, et effectuer des audits de routine.
Les shells lisent des commandes humaines assez intuitives et les transforment en quelque chose que le système comprendra.
Qu'est-ce qu'un shell ?
Un shell est un type de programme informatique appelé interpréteur de ligne de commande qui permet aux utilisateurs de Linux et d'Unix de contrôler leurs systèmes d'exploitation à l'aide d'interfaces de ligne de commande. Les shells permettent aux utilisateurs de communiquer efficacement et directement avec leur système d'exploitation.
Le shell n'est pas un langage unique mais, parce qu'il utilise des commandes en langage naturel, il est facile à apprendre, même sans connaissances en programmation. Cependant, chaque dialecte de script shell est considéré comme un langage, et si vous envisagez des activités plus complexes, les shells demandent beaucoup de pratique.
Les scripts shell sont l'un des moyens les plus simples de mettre en place l'automatisation. En utilisant des commandes Linux ou Unix, le shell scripting donne aux data scientists, DevOps et TechOps des structures de contrôle conditionnelles et en boucle pour répéter des commandes.
Les scripts shell ne portent pas toujours le même nom. Sh,
Bash (le plus courant), csh,
et tesh sont tous des scripts shell. Dans le système d'exploitation VM d'IBM, ils sont appelés EXEC ; dans le système DOS, les scripts shell sont appelés fichiers batch.
Un shell se divise en deux catégories : le shell à ligne de commande et le shell graphique. Les shells de ligne de commande sont accessibles à l'aide d'interfaces de ligne de commande où les systèmes reçoivent des entrées sous forme de commandes lisibles par l'homme et utilisent ensuite les interfaces de ligne de commande pour afficher les résultats.
Les shells graphiques utilisent une interface utilisateur graphique (GUI) pour effectuer des interactions et des opérations essentielles telles que l'ouverture, la fermeture et l'enregistrement de fichiers.
Voici quelques exemples de commandes shell :
Pour savoir dans quel répertoire vous vous trouvez : pwd
Pour trouver une commande dans le manuel : man command
Pour faire défiler un fichier texte : less file 1
ou more file 1
Différents types de shells
Le shell de Bourne
Aussi cool que son nom puisse le laisser supposer, le shell Bourne n'a rien à voir avec les espions et les courses-poursuites à grande vitesse. Le shell Bourne, deuxième shell Unix le plus utilisé, a été créé en 1979 par Stephen Bourne aux laboratoires Bell. Comme son prédécesseur, le shell Thompson, le nom du fichier exécutable de Bourne est sh
.
Le shell Bourne est le shell par défaut du système d'exploitation Solaris. Malgré son âge, le shell Bourne est toujours aussi populaire en raison de sa rapidité et de sa compacité. Cependant, le shell Bourne n'est pas très interactif et ne peut pas se souvenir de son site command history.
. Il manque également d'expressions logiques et arithmétiques.
Les messages de Bourne sont les suivants :
- Chemin complet de la commande :
/bin/sh
et/sbin/sh
- Utilisateur non root par défaut :
$
- Utilisateur racine par défaut :
#
command-line
Le shell C, nom de fichier csh
, et son prédécesseur nom de fichier tcsh
, est un autre shell Unix datant de la fin des années 70. Il a été créé par Bill Joy, qui était à l'époque un étudiant diplômé de l'université de Californie à Berkeley.
Contrairement au shell Bourne, le shell C est interactif et reconnaît command history
et aliases
. Les shells C comprennent également une syntaxe d'expression de type C et une arithmétique intégrée.
Les invites de la ligne de commande sont les suivantes :
- Commande full-path :
/bin/csh
- Nom d'hôte par défaut de l'utilisateur non root :
%
- Nom d'hôte par défaut de l'utilisateur root :
#
KornShell
Le KornShell, nom de fichier ksh
, a été développé au début des années 1980 par David Korn aux Bell Labs. KornShell inclut de nombreuses fonctionnalités du shell C, et c'est un super-ensemble du shell Bourne, avec lequel il est donc rétrocompatible.
Le KornShell fonctionne plus rapidement que le C-shell. Il exécute des scripts du shell Bourne et propose des tableaux, des fonctions et des outils de manipulation de chaînes de caractères semblables à ceux du langage C. En outre, il intègre des fonctions arithmétiques.
Les invites KornShell sont les suivantes :
- Commande full-path :
/bin/ksh
- Utilisateur non root par défaut : $
- Utilisateur root par défaut : #
Le shell GNU Bourne-Again
Le shell GNU Bourne-Again, ou Bash, est une alternative libre au shell Bourne. Il a été conçu par Brian Fox pour le projet GNU et a été publié en 1989. Non seulement il est entièrement compatible avec le shell Bourne, mais il reprend plusieurs des meilleures caractéristiques des shells KornShells et C. Le shell GNU Bourne-Again dispose de touches fléchées automatiquement affectées à l'édition et au rappel de commandes.
Les invites de GNU Bourne-Again sont les suivantes :
- Commande full-path :
/bin/bash
- Invite par défaut de l'utilisateur non root :
bash-x.xx$
- Utilisateur racine par défaut :
bash-x.xx#
Ce que fait le shell scripting
Cette analogie est un peu simpliste, mais imaginez que les scripts shells soient le remplissage automatique des programmeurs. Au lieu de taper les commandes au clavier une par une, le shell utilise des séquences de commandes dans des scripts uniques que les utilisateurs peuvent lancer à l'aide d'un simple nom de fichier dans la ligne de commande. Les scripts shell permettent d'exécuter des programmes, d'envelopper du texte et de manipuler des fichiers.
Les scripts shell permettent d'effectuer un certain nombre de tâches, notamment de surveiller l'utilisation du disque, d'effectuer des sauvegardes, de créer des outils de commande, de manipuler des fichiers, d'exécuter des programmes, de lier des programmes entre eux, de compléter des lots, etc.
Principales alternatives au shell
Dans le système d'exploitation VM d'IBM, ils sont appelés EXEC ; dans le système DOS, les scripts shell sont appelés fichiers batch. Il s'agit toutefois de scripts shell. D'autres langages de script, tels que Javascript, Python, Perl et TCL sont également des langages de script. Il n'est pas surprenant que les professionnels de l'informatique aient tous leur préférence, et nous reviendrons sur les avantages et les inconvénients des shells dans un instant.
Pourquoi Shell est-il si populaire ?
Les shells sont courants sur presque tous les systèmes d'exploitation parce qu'ils sont efficaces et faciles à mettre à jour. Il surveille le système de votre ordinateur et effectue des sauvegardes de routine sans que vous ayez à y penser.
Il n'est pas nécessaire de changer de syntaxe car les syntaxes et les commandes du shell sont identiques à celles saisies en ligne de commande. En outre, il est facile et rapide d'écrire des scripts shell : ils démarrent rapidement et sont faciles à déboguer.
Quels sont les inconvénients des scripts Shell ?
Les scripts shell peuvent être sujets à des erreurs et difficiles à diagnostiquer en cas de problème. Les shells ne sont pas conçus pour des tâches complexes ou de grande envergure, et leur exécution est lente. En outre, les shells n'offrent pas beaucoup de structure de données et peuvent présenter des défauts de syntaxe ou de conception.
Quand Shell a-t-elle été créée ?
Le premier script shell a été créé au début des années 1960 par Louis Pouzin, membre du personnel informatique du MIT. Sa première ligne de commande était RUNCOM
, qui libérait les informaticiens des tâches répétitives telles que la compilation, la mise à jour, le renommage et le déplacement.
Bien que Pouzin ne soit pas un expert en langage informatique, ou peut-être parce qu'il ne l'était pas, il pensait que les lignes de commande pouvaient être un langage à part entière.
Au milieu des années 1960, Pouzin fait équipe avec le scientifique britannique Christopher Strachey. Strachey conçoit un macro-générateur qui sert de base au langage de commande de Pouzin, lequel fonctionne sur ce qui est à l'époque le système d'exploitation de pointe Multics.
Comment Shell a trouvé son nom
Pouzin a baptisé son nouveau langage "shell" car il s'agit de la couche externe des systèmes d'exploitation.
Caractéristiques du shell
Les shells sont appréciés des programmeurs en raison de leur concision. Cela ne signifie pas pour autant qu'ils sont basiques. Les shells offrent plusieurs fonctionnalités, notamment :
Traitement en arrière-plan
L'un des principaux avantages des scripts shell est qu'ils peuvent s'exécuter en arrière-plan. Selon la commande, les shells peuvent s'exécuter en avant-plan ou en arrière-plan. Les processus de premier plan sont visibles à l'écran et ne peuvent s'exécuter que de manière séquentielle.
Les processus d'arrière-plan n'apparaissent pas à l'écran et peuvent s'exécuter de manière non séquentielle. Pour exécuter un script shell en arrière-plan, il suffit d'ajouter une esperluette (&) à la fin du script.
Substitutions par des jokers
Les substitutions par caractères génériques permettent aux systèmes de traiter plus d'une commande à la fois ou de trouver des bouts de phrases dans des fichiers texte. Par exemple, *
indique au système de rechercher n'importe quelle chaîne, même les chaînes vides. ?
recherche un seul caractère, [example]
recherche n'importe quel caractère ("exemple" n'est qu'un exemple) et [1-9]
(un autre exemple) indique au shell de rechercher les caractères compris dans l'intervalle.
Alias de commande
Les alias du shell sont des raccourcis de commande. Certains alias sont constitués d'un seul mot, d'autres d'une seule lettre. Pour voir la liste des alias, il suffit d'entrer ·alias
.
Historique des commandes
Les shells offrent de nombreux moyens de gagner du temps et d'économiser des efforts, mais l'une des fonctionnalités particulièrement pratiques est son historique des commandes. Au lieu de retaper les commandes, la commande history
affiche toutes les commandes qui ont été utilisées au cours de cette session.
Substitution de nom de fichier
La substitution de nom de fichier est également connue sous le nom de "globbing". Lorsqu'un mot contient des caractères tels que ?
, *
, ou [
, ou commence par ~
, le shell considère le mot comme un motif et le remplace par une liste alphabétique de noms de fichiers correspondant au motif.
Redirection des entrées/sorties
La redirection des entrées/sorties (i/o) permet aux utilisateurs d'échanger l'entrée standard (stdin) et la sortie standard (stdout) pour les associer à l'écran d'affichage, au clavier ou à un fichier.
Tuyauterie
Le piping shell est un autre type de redirection qui envoie la sortie d'une commande/processus/programme vers une autre commande/processus/programme. Cela permet aux commandes/processus/programmes de fonctionner simultanément et de transférer des données en continu sans passer par l'écran d'affichage ou les fichiers texte temporaires.
Substitution de variables shell
Lorsque le shell rencontre une expression contenant des caractères spéciaux, il traduit le code en quelque chose de plus reconnaissable pour les utilisateurs. Ce processus est appelé substitutions de variables ou simplement variables.
Les variables sont également utilisées par les programmeurs plus expérimentés. Si, par exemple, un programmeur ne connaît pas les valeurs réelles avant d'exécuter un programme, il peut utiliser la variable comme un espace réservé avant que le code ne soit prêt à être exécuté.
La diversité des shells
Il existe deux principaux types de shells : "shell" (sh) et "bash". Tous deux fonctionnent sous le système d'exploitation Unix. Shell est un nom générique pour l'écriture de scripts dans n'importe quel shell. Comme son nom l'indique, bash (Bourne Again Shell) est un shell amélioré et étendu.
Bash utilise la mise à jour pour plus de fonctionnalités, prend en charge les contrôles de tâches, est plus facile à utiliser que sh et prend en charge l'historique des commandes. Sh ne prend pas en charge l'historique des commandes ; ses scripts fonctionnent dans n'importe quel shell et sont plus portables.
L'évolution de Shell au fil des ans
Au fil des ans, les shells ont évolué et sont restés plus ou moins les mêmes. Le shell Bourne a constitué un grand pas en avant par rapport au shell original de Thompson, mais de nombreuses fonctions originales ont été conservées. Bien sûr, les ordinateurs et nos attentes ont changé.
Il existe potentiellement autant de shells qu'il y a d'utilisateurs, mais fondamentalement, il y a deux types de shells : les shells de ligne de commande et les shells Bourne. Tout le reste est un dialecte plutôt qu'une langue différente.
Les shells Unix
Les shells Unix sont les plus anciens et ils sont toujours d'actualité. Les shells Unix fonctionnent sur les systèmes d'exploitation Unix et apparentés, tels que les Mac.
command-lines
Les lignes de commande (csh) sont les shells Unix les plus courants. Les lignes de commande excellent dans le travail interactif, y compris les alias, cdpath, le contrôle des tâches, le hachage des chemins, les piles de répertoires, etc. Ils offrent également des fonctions d'édition et d'historique.
Ligne de commande Tenex
La ligne de commande Tenex (tcsh) a été développée par Ken Greer de l'université Caregia Melo. Tenex a été considéré comme une amélioration par rapport à la version originale en ligne de commande. Contrairement à la version originale de C, Tenex offre, entre autres, des fonctions d'édition et de complétion en ligne de commande. En 1981, tsch a fusionné avec csh.
Coquilles Korn
Les shells Korn (ksh) sont un autre shell Unix, mais il s'agit d'une sorte de compromis entre les shells C et Bourne, avec une rétrocompatibilité avec ce dernier. Le shell Korn a été développé au début des années 1980 par David Korn aux Bell Labs.
Bourne à nouveau shells
Le shell Bourne Again (Bash) est un shell Unix open-source qui a été écrit à la fin des années 1990 par Brian Fox pour le projet GNU comme une mise à jour du shell Bourne.
Coquillages exotiques
Bien qu'ils soient tous construits sur des shells C ou Bourne, les programmeurs ont conçu des centaines, voire des milliers de dialectes différents. Certains sont utiles, d'autres sont simplement amusants.
Qui utilise Shell ?
Presque tous ceux qui utilisent un ordinateur bénéficient d'un shell, mais ils sont particulièrement bénéfiques pour les administrateurs système, les personnes DevOps, les programmeurs et les scientifiques des données. Les shells sont utilisés pour automatiser des tâches et des applications, installer des paquets, sauvegarder ou restaurer des données, et bien sûr pour la programmation.
Exemples de shells
Les shells sont aussi basiques ou aussi complexes que le souhaite l'utilisateur. Un simple message d'accueil bash, par exemple, se lit : echo “hello $USER”
, tandis que les scripts shell complexes sont presque illimités. Voici quelques exemples de base :
Créez un fichier dans bash à l'aide d'un éditeur approprié. Nous utilisons ici l'éditeur vi.
$ vi example.sh
Appuyez sur la touche 'i' pour commencer à insérer le code :
#!/bin/bash
valid=true
count=1
while [ $valid ]
do
echo $count
if [ $count -eq 10 ];
then
break
fi
((count++))
done
Exécutez en utilisant
bash example.sh
$vi example2.sh
#!/bin/bash
echo "Enter first number"
read x
echo "Enter second number"
read y
((sum=x+y))
echo "The result of addition = $sum"
bash example2.sh
Carrières chez Shell
Plutôt qu'un plan de carrière, considérez les scripts shell comme un outil utile dans l'arsenal d'un data scientist. Les professionnels des données de toutes sortes doivent connaître plusieurs langages (ou du moins ils le devraient), et les scripts shell les aident à utiliser ces langages plus efficacement.
Cependant, certaines entreprises ont des fonctions qui requièrent spécifiquement l'utilisation de scripts shell. Le salaire moyen est d 'environ 78 000 dollars. Cela dit, les scripts shell constituent un élément essentiel pour accéder à des fonctions telles que celles d'administrateur système, qui peuvent donner lieu à des salaires à six chiffres.
Conclusion
Le shell est comme une chaîne de caractères qui traverse tous les langages de programmation. Les commandes complexes sont réduites à des raccourcis concis et intuitifs. Comprendre le shell est une compétence importante pour tout data scientist ou ingénieur informatique. Apprenez à connaître le shell dans le cours d' introduction au shell de DataCamp.
FAQ sur les shells
Qu'est-ce que le noyau ?
Le noyau est la partie la plus essentielle du système d'exploitation. Le noyau est responsable de l'allocation de la mémoire et du temps aux programmes de l'ordinateur, et il gère les communications et le magasin de fichiers en réponse aux appels du système.
Qu'est-ce que le shell ?
Le shell est l'interface entre le noyau et l'utilisateur.
Quels sont les avantages du shell ?
Nous savons déjà que le shell est efficace et qu'il prend en charge de nombreuses tâches ennuyeuses pour l'utilisateur ; mais au-delà de cela, les shells permettent aux utilisateurs de personnaliser les scripts en fonction de leurs propres besoins.
Quels sont les inconvénients du shell ?
Une seule erreur peut s'avérer très coûteuse et difficile à identifier. En outre, les shells ne sont pas très portables d'un système d'exploitation à l'autre.
Quelle est la différence entre Unix et Linux ?
Linux est un clone d'Unix développé par Linus Torvalds. Linux n'est pas en soi un système d'exploitation, c'est un noyau. Unix, en revanche, comprend le noyau, le shell et les programmes.
Quels sont les shells couramment utilisés sur les systèmes Linux et Unix ?
Bash, ou le shell Bourne Again, est le shell le plus couramment utilisé, mais Linux et Unix prennent également en charge les lignes de commande, KornShells et TCSH.
Qu'est-ce que la syntaxe du shell ?
Dans le langage naturel, la syntaxe fait référence à la façon dont les mots et les phrases sont agencés. La syntaxe du shell est très similaire ; elle fait référence à l'ordre des opérations.
Qu'est-ce qu'un interprète ?
Un interpréteur interprète des instructions simples en code machine.
Qu'est-ce qu'un compilateur ?
Un compilateur traduit des programmes de haut niveau en langage machine plus complexe.
Comment exécuter un fichier shell ?
Permission d'installation avec : chmod+x script-name-here.sh
Ensuite, exécutez-le avec : ./script-name-here.sh
ou sh script-name-here.sh.