FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Qu'est-ce que le script shell et pourquoi devriez-vous l'utiliser

Le shell est un programme au sein d'un système d'exploitation Linux ou Unix qui vous permet d'entrer des commandes à exécuter par le système. Lorsqu'une fenêtre de terminal est ouverte sur un ordinateur Linux, elle démarre le programme shell qui présente une interface pour entrer des commandes. Cette interface est connue sous le nom d'interface de ligne de commande. Lorsqu'une commande est saisie, elle est exécutée par le shell et la sortie s'affiche à l'écran.

En plus de pouvoir accepter et exécuter des commandes de manière interactive, le shell peut également exécuter des commandes stockées dans un fichier. Ce mode d'exécution est connu sous le nom de script shell , et dans cet article, nous couvrons les bases des scripts shell.

1. Histoire du Shell

À partir d'Unix dans les années 1970, il y avait un programme shell appelé V6 Shell développé par Ken Thomson. C'était un shell interactif et manquait de capacité de script.

Il a été suivi par le Bourne Shell en 1977 et reste utilisé aujourd'hui comme shell par défaut pour la racine Compte. Ce shell a ajouté des capacités de script qui se sont avérées extrêmement utiles dans la pratique au fil des ans.

Le développement ultérieur de la coque dans les années 1980 a donné lieu à de nombreuses variantes de coque populaires, dont les plus populaires étaient le C-Shell et le Corn Shell . Chacun de ces shells apportait sa propre syntaxe qui, dans certains cas, était radicalement différente du shell d'origine.

L'un des shells les plus populaires aujourd'hui est le Bash Shell . Bash signifie Bourne-Again-Shell et est une variante considérablement améliorée du Bourne Shell original.

Dans cet article, nous décrivons les scripts shell pour le Bash Shell.

2. Exécuter un script shell

Comment exécuter un script shell ? Simple. Passez simplement le chemin du script en argument au shell :

Un exemple de script shell :

echo "hello world" 

Exécutez-le comme suit :

$ bash bonjour.sh 
# impressions
Bonjour le monde

Remarque : Le shell exige que les lignes soient terminées par des caractères LF (Line-Feed). Si vous écrivez votre script shell sous Windows et essayez de l'exécuter directement sur un système Linux, vous risquez de rencontrer des erreurs. Windows utilise la combinaison CR-LF (Carriage-Return-Line-Feed) pour la terminaison de ligne. Cela doit être converti en LF uniquement. Vérifiez votre éditeur Windows pour savoir comment procéder.

Il existe un autre moyen d'exécuter un script shell directement en tant que commande. Insérez la ligne suivante (le hashbang déclaration) comme première ligne de votre script shell.

#!/bin/bash 

Avec ce changement, notre script shell simple est maintenant :

#!/bin/bash 
echo "bonjour le monde"

Maintenant, vous devez rendre le fichier de script exécutable comme suit :

$ chmod +x bonjour.sh 

À ce stade, vous pouvez exécuter le fichier de script directement sans avoir à référencer explicitement le shell.

$ bonjour.sh 
# impressions
Bonjour le monde

Voyons maintenant quelques avantages de l'utilisation de scripts shell.

3. Automatisation des tâches

Le premier avantage de l'utilisation de scripts shell est l'automatisation des tâches fréquemment exécutées. Supposons que vous ayez une tâche à accomplir tous les jours. Si vous devez exécuter plusieurs commandes sur votre système Linux tous les jours, vous pouvez stocker ces commandes dans un fichier et exécuter le script. Les exemples incluent :

  • Archivez et chargez un fichier ou un dossier tous les jours dans une installation de stockage cloud telle que S3.
  • Compressez les fichiers journaux qui ont tendance à grossir chaque jour.
  • Récupérez les cours des actions, analysez les données récupérées et déclenchez un e-mail ou un SMS lorsque certaines conditions sont remplies (prix trop élevés ou trop bas).

4. Combinaison de plusieurs commandes

En plus d'automatiser les tâches fréquentes, vous pouvez également trouver avantageux de pouvoir combiner plusieurs séquences de commandes en une seule commande. Se souvenir d'une seule commande est beaucoup plus simple que plusieurs commandes, sans parler de l'ordre dans lequel elles doivent être exécutées.

Un exemple serait la séquence de démarrage du système d'exploitation Linux lui-même. Dans le cadre du démarrage, le système d'exploitation exécute un certain nombre de commandes pour mettre le système dans un état correct. Ces commandes sont en fait des scripts shell qui vivent sous le /etc annuaire. Si vous jetez un coup d'œil à l'un de ces scripts shell, vous vous rendrez compte de la complexité du démarrage d'un système, que vous auriez peut-être dû effectuer manuellement en l'absence de scripts shell.

Voici un exemple de script shell, /etc/profile , qui est exécuté chaque fois qu'un utilisateur se connecte. Imaginez taper ces commandes à la main !

# /etc/profile :fichier .profile à l'échelle du système pour le shell Bourne (sh(1)) 
# et shells compatibles Bourne (bash(1), ksh(1), ash(1), ...).
si [ "$PS1" ] ; ensuite
if [ "$BASH" ] &&[ "$BASH" !="/bin/sh" ]; ensuite
# Le fichier bash.bashrc définit déjà la PS1 par défaut.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; ensuite
. /etc/bash.bashrc
Fi
autre
if [ "`id -u`" -eq 0 ] ; ensuite
PS1='# '
autre
PS1='$ '
Fi
Fi
Fi
# Le umask par défaut est maintenant géré par pam_umask.
# Voir pam_umask(8) et /etc/login.defs.
if [ -d /etc/profile.d ]; ensuite
pour je dans /etc/profile.d/*.sh; fais
si [ -r $i ]; ensuite
. $i
Fi
terminé
désarmé je
Fi

5. Plus facile à développer

Il est possible d'effectuer les mêmes actions qu'un script shell à l'intérieur d'un programme normal écrit en C/C++. Cependant, il est beaucoup plus facile d'écrire et de déboguer un script shell qu'un programme C/C++. Surtout pour les tâches d'administration système qui incluent l'exécution de commandes externes, la création et la suppression de fichiers et de répertoires, la redirection de la sortie, etc.

Les programmes C/C++ sont meilleurs pour un niveau d'opération beaucoup plus bas, comme l'invocation d'appels système, la manipulation de structures de données, etc.

6. Transparence

Un script shell, du fait qu'il s'agit d'un fichier texte, peut facilement être visualisé pour vérifier les actions qu'il exécute. En revanche, la seule façon de savoir ce que fait un programme écrit dans un langage tel que C/C++ (et compilé dans un exécutable) est de savoir s'il choisit de vous le dire ou si vous avez accès au code source. Par exemple, vous pouvez vérifier si un script shell supprime des fichiers, et si vous avez besoin de ces fichiers, vous pouvez les copier à un autre emplacement.

Il est également beaucoup plus facile de diagnostiquer les problèmes avec des scripts shell plutôt qu'avec des programmes réguliers puisque vous pouvez consulter le code source. Ce script échoue-t-il parce qu'un répertoire n'existe pas ? Vous pouvez regarder dans le code du script et créer le répertoire (bien qu'un script shell qui se comporte bien doive le vérifier et le créer pour éviter de telles erreurs).

7. Portatif

Un script shell peut être transféré vers d'autres systèmes d'exploitation Unix et de type Unix et exécuté (si le shell lui-même est présent). Même lors du transfert d'un script shell à partir d'architectures différentes telles que x86, MIPS, Sparc, etc., les scripts shell sont beaucoup plus portables que les programmes C/C++.

La seule façon de transférer et d'utiliser un programme C/C++ sur un autre système est de copier le code source, de créer le programme et d'essayer de l'exécuter. Même dans ce cas, il peut ne pas fonctionner comme prévu s'il utilise un code spécifique à l'architecture.

Maintenant que vous avez une idée de ce que sont les scripts shell et de leurs nombreux avantages, n'aimeriez-vous pas les utiliser pour vos tâches ? Quels problèmes avez-vous rencontrés lors de leur utilisation ? Veuillez nous en informer dans les commentaires ci-dessous.


[]