Scripts Bash : introduction

Scripts Bash : introduction
Scripts Bash, partie 2 : boucles
Scripts Bash, partie 3 : paramètres et clés de la ligne de commande
Scripts Bash, partie 4 : entrée et sortie
Scripts Bash, partie 5 : signaux, tâches en arrière-plan, gestion des scripts
Scripts Bash, partie 6 : fonctions et développement de bibliothèques
Scripts Bash, partie 7 : sed et traitement de texte
Scripts Bash, partie 8 : langage de traitement de données awk
Scripts Bash, partie 9 : expressions régulières
Scripts Bash, partie 10 : exemples pratiques
Scripts Bash, partie 11 : expect et automatisation des utilitaires interactifs

Aujourd'hui, nous allons parler des scripts bash. Ceci est des scripts de ligne de commande, écrits pour le shell bash. Il existe d'autres shells, par exemple — zsh, tcsh, ksh, mais nous allons nous concentrer sur bash. Ce matériel est destiné à tous ceux qui souhaitent apprendre, la seule condition étant de savoir travailler dans la ligne de commande Linux.

Scripts Bash : introduction

Les scripts de ligne de commande sont des ensembles des mêmes commandes qui peuvent être tapées sur le clavier, regroupées dans des fichiers et réunies dans un objectif commun. Les résultats des commandes peuvent avoir une valeur autonome ou servir d'entrée pour d'autres commandes. Les scripts sont un moyen puissant d'automatiser les actions souvent répétées.

Scripts Bash : introduction

Donc, en parlant de la ligne de commande, elle permet d'exécuter plusieurs commandes en une seule fois en les saisissant via un point-virgule :

pwd ; whoami

En fait, si vous avez essayé cela dans votre terminal, votre premier script bash, impliquant deux commandes, est déjà écrit. Il fonctionne de cette manière. D'abord, la commande pwd affiche des informations sur le répertoire de travail actuel, puis la commande whoamimontre les données de l'utilisateur avec lequel vous êtes connecté.

En utilisant cette approche, vous pouvez combiner autant de commandes que vous le souhaitez en une seule ligne, la seule limite étant le nombre maximal d'arguments pouvant être passés au programme. Cette limite peut être déterminée à l'aide de la commande suivante :

getconf ARG_MAX

La ligne de commande est un excellent outil, mais il faut entrer les commandes chaque fois qu'elles sont nécessaires. Que diriez-vous d'enregistrer un ensemble de commandes dans un fichier et de simplement appeler ce fichier pour les exécuter ? En fait, ce fichier dont nous parlons s'appelle un script de ligne de commande.

Comment les scripts bash sont organisés

Créez un fichier vide en utilisant la commande touch. Dans sa première ligne, il faut spécifier quelle оболre nous allons utiliser. Nous sommes intéressés par bash, donc la première ligne du fichier sera la suivante :

#!/bin/bash

Dans les autres lignes de ce fichier, le symbole dièse est utilisé pour désigner des commentaires que l'interpréteur ignore. Cependant, la première ligne est un cas particulier : ici, le dièse, suivi d'un point d'exclamation (cette séquence est appelée shebang) et le chemin vers bash, indiquent au système que le script a été créé spécifiquement pour bash.

Les commandes de la ligne de commande sont séparées par des sauts de ligne, les commentaires sont marqués par le symbole dièse. Voici à quoi cela ressemble :

#!/bin/bash
# This is a comment
pwd
whoami

Ici, comme dans la ligne de commande, on peut écrire des commandes sur une seule ligne, en les séparant par des points-virgules. Cependant, si vous écrivez des commandes sur des lignes différentes, le fichier sera plus facile à lire. Dans tous les cas, l'interpréteur les exécutera.

Configuration des autorisations pour le fichier script

Sauvegardez le fichier en lui donnant le nom myscript, et le travail de création du script bash est presque terminé. Il ne reste plus qu'à rendre ce fichier exécutable, sinon, en essayant de l'exécuter, vous rencontrerez une erreur Permission denied.

Scripts Bash : introduction
Essai d'exécution du fichier script avec des autorisations mal configurées

Rendons le fichier exécutable :

chmod +x .\/myscript

Essayons maintenant de l'exécuter :

.\/myscript

Après avoir configuré les autorisations, tout fonctionne comme prévu.

Scripts Bash : introduction
Exécution réussie du script bash

Affichage des messages

Pour afficher du texte dans le terminal Linux, on utilise la commande echo. Profitons de ce fait pour modifier notre script en ajoutant des explications aux données que les commandes existantes affichent :

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Voici ce que nous obtiendrons après l'exécution du script mis à jour.

Scripts Bash : introduction
Affichage des messages du script

Nous pouvons maintenant afficher des messages explicatifs en utilisant la commande echo. Si vous ne savez pas comment modifier un fichier en utilisant les outils Linux, ou si vous n'avez jamais rencontré la commande echo, jetez un œil au celui-ci matériel.

Utilisation des variables

Les variables permettent de stocker des informations dans le fichier script, par exemple - les résultats des commandes pour les utiliser dans d'autres commandes.

Il n'y a rien de mal à exécuter des commandes individuelles sans stocker les résultats de leur exécution, mais les possibilités d'une telle approche sont très limitées.

Il existe deux types de variables que l'on peut utiliser dans les scripts bash :

  • Variables d'environnement
  • Variables utilisateur

Variables d'environnement

Parfois, dans les scripts shell, il est nécessaire de travailler avec certaines données système. Voici comment afficher le répertoire personnel de l'utilisateur actuel :

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Notez que nous pouvons utiliser une variable système $HOME entre guillemets, cela n'empêchera pas le système de la reconnaître. Voici ce qui se passe si vous exécutez le script ci-dessus.

Scripts Bash : introduction
Utilisation d'une variable d'environnement dans un script

Et si nous devions afficher le symbole dollar à l'écran ? Essayons ceci :

echo "I have $1 in my pocket"

Le système détectera le symbole dollar dans la chaîne délimitée par des guillemets et décidera que nous faisons référence à une variable. Le script tentera d'afficher la valeur d'une variable indéfinie $1. Ce n'est pas ce que nous voulons. Que faire ?

Dans une telle situation, l'utilisation du caractère d'échappement, la barre oblique inversée, avant le symbole dollar peut aider :

echo "I have $1 in my pocket"

Le script affichera maintenant exactement ce qui est attendu.

Scripts Bash : introduction
Utilisation d'une séquence de contrôle pour afficher le symbole dollar

Variables utilisateur

En plus des variables d'environnement, les scripts bash permettent de définir et d'utiliser des variables personnalisées dans le script. Ces variables conservent leur valeur tant que l'exécution du script n'est pas terminée.

Comme pour les variables système, vous pouvez accéder aux variables personnalisées en utilisant le symbole dollar :
TNW-CUS-FMP — un code promo pour une réduction de 10% sur nos services, valable pendant 7 jours

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Voici ce que vous obtiendrez après l'exécution d'un tel script.

Scripts Bash : introduction
Variables personnalisées dans le script

Substitution de commandes

L'une des fonctionnalités les plus utiles des scripts bash est la capacité d'extraire des informations de la sortie des commandes et de les assigner à des variables, ce qui permet d'utiliser ces informations n'importe où dans le fichier du script.

Cela peut être fait de deux manières.

  • En utilisant le symbole de l'apostrophe inversée « ` »
  • En utilisant la construction $()

En utilisant la première approche, assurez-vous de ne pas entrer de quote simple à la place de l'apostrophe inversée. La commande doit être entourée de deux de ces symboles :

mydir=`pwd`

Avec la deuxième approche, cela s'écrit de la manière suivante :

mydir=$(pwd)

Le script peut donc finalement ressembler à cela :

#!/bin/bash
mydir=$(pwd)
echo $mydir

Au cours de son exécution, la sortie de la commande pwdsera sauvegardée dans la variable mydir, dont le contenu sera affiché à la console à l'aide de la commande echo.

Scripts Bash : introduction
Un script qui sauvegarde les résultats d'une commande dans une variable

Opérations mathématiques

Pour effectuer des opérations mathématiques dans un fichier de script, vous pouvez utiliser une construction du type $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Scripts Bash : introduction
Opérations mathématiques dans le script

Construction de contrôle if-then

Dans certains scripts, il est nécessaire de contrôler le flux d'exécution des commandes. Par exemple, si une certaine valeur est supérieure à cinq, une action doit être effectuée, sinon une autre. Cela s'applique à de nombreuses situations, et ici, la construction de contrôle if-then. À son niveau le plus simple, elle se présente comme suit :

if commande
then
commandes
fi

Voici un exemple pratique :

#!/bin/bash
if pwd
then
echo "It works"
fi

Dans ce cas, si l'exécution de la commande pwdse termine avec succès, le texte « it works » sera affiché dans la console.

Utilisons nos connaissances et écrivons un script plus complexe. Disons qu'il faut trouver un utilisateur dans /etc/passwd, et s'il est trouvé, informer qu'il existe.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Voici ce que cela donne après l'exécution de ce script.

Scripts Bash : introduction
Recherche d'utilisateur

Ici, nous avons utilisé la commande greppour rechercher un utilisateur dans le fichier /etc/passwd. Si la commande grepvous est inconnue, sa description peut être trouvée ici.

Dans cet exemple, si l'utilisateur est trouvé, le script affichera un message correspondant. Et si l'utilisateur n'est pas trouvé ? Dans ce cas, le script se terminera simplement sans rien nous dire. Nous aimerions qu'il nous informe à ce sujet aussi, donc améliorons le code.

Construction de contrôle if-then-else

Pour que le programme puisse informer à la fois des résultats de recherche réussis et d'un échec, nous utiliserons la construction if-then-else. Voici comment elle est structurée :

if commande
then
commandes
else
commandes
fi

Si la première commande renvoie zéro, ce qui signifie son exécution réussie, la condition sera vraie et l'exécution ne suivra pas la branche sinon. Dans le cas contraire, si quelque chose de différent de zéro est retourné, ce qui indiquera un échec ou un résultat faux, les commandes situées après sinon.

seront exécutées.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Écrivons un tel script : sinon.

Scripts Bash : introduction
Exécution du script avec la construction if-then-else

Continuons notre chemin et posons-nous la question de conditions plus complexes. Que faire si nous devons vérifier non pas une condition, mais plusieurs ? Par exemple, si l'utilisateur requis est trouvé, nous devrions afficher un message, si une autre condition est remplie — un autre message, et ainsi de suite. Dans une telle situation, les conditions imbriquées nous seront utiles. Voici à quoi cela ressemble :

if commande1
then
commandes
elif commande2
then
commandes
fi

Si la première commande renvoie zéro, ce qui indique son succès, les commandes dans le premier bloc seront exécutées. alors, sinon, si la première condition s'avère fausse, et si la deuxième commande renvoie zéro, le deuxième bloc de code sera exécuté.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

Dans un tel script, vous pouvez, par exemple, créer un nouvel utilisateur à l'aide de la commande useradd, si la recherche n'a donné aucun résultat, ou faire quelque chose d'utile.

Comparaison de nombres

Dans les scripts, il est possible de comparer des valeurs numériques. Voici une liste des commandes correspondantes.

n1 -eq n2Retourne la valeur vraie si n1 est égal à n2.
n1 -ge n2 Retourne la valeur vraie si n1est supérieur ou égal à n2.
n1 -gt n2Retourne la valeur vraie si n1 ne nécessite plus n2.
n1 -le n2Retourne la valeur vraie si n1est inférieur ou égal à n2.
n1 -lt n2Retourne la valeur vraie si n1 est inférieur à n2.
n1 -ne n2Retourne la valeur vraie si n1n'est pas égal à n2.

Prenons un exemple en utilisant un des opérateurs de comparaison. Notez que l'expression est placée entre crochets.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Voici ce que retournera cette commande.

Scripts Bash : introduction
Comparaison de nombres dans les scripts

La valeur de la variable val1est supérieure à 5, par conséquent, la branche de l'opérateur de comparaison sera exécutée et un message correspondant sera affiché dans la console. alorsComparaison de chaînes

Dans les scripts, il est également possible de comparer des valeurs de chaînes. Les opérateurs de comparaison semblent assez simples, cependant, les opérations de comparaison de chaînes ont certaines spécificités que nous aborderons ci-dessous. Voici la liste des opérateurs.

str1 = str2

Vérifie l'égalité des chaînes, retourne vrai si les chaînes sont identiques. tr1 != str2
sRetourne vrai si les chaînes ne sont pas identiques.str1 < str2
Retourne vrai sistr1 est inférieur àstr2 str1 > str2.
est supérieur à str1 est inférieur à-n str1 str1 > str2.
Retourne vrai si la longueur est supérieure à zéro. est inférieur à-z str1
est égale à zéro.est supérieure à zéro. est inférieur àVoici un exemple de comparaison de chaînes dans un script :

En exécutant le script, nous obtiendrons ce qui suit.

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Comparaison de chaînes dans les scripts

Scripts Bash : introduction
Comparaison de chaînes dans les scripts

Voici une particularité de la comparaison de chaînes qu'il convient de mentionner. En effet, les opérateurs «>» et «» comme une commande de redirection de sortie.

Voici à quoi ressemble le travail avec ces opérateurs dans le code :

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Voici les résultats de l'exécution du script.

Scripts Bash : introduction
Comparaison de chaînes, avertissement affiché

Notez que le script, bien qu'il s'exécute, génère un avertissement :

./myscript: ligne 5: [: trop d'arguments

Pour se débarrasser de cet avertissement, entourons $val2 de guillemets :

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Maintenant, tout fonctionne comme il se doit.

Scripts Bash : introduction
Dans les scripts, il est également possible de comparer des valeurs de chaînes. Les opérateurs de comparaison semblent assez simples, cependant, les opérations de comparaison de chaînes ont certaines spécificités que nous aborderons ci-dessous. Voici la liste des opérateurs.

Une autre particularité des opérateurs «>» et «<» réside dans leur fonctionnement avec les symboles en majuscules et minuscules. Pour comprendre cette particularité, préparons un fichier texte avec ce contenu :

Likegeeks
likegeeks

Enregistrons-le en lui donnant le nom myfile, puis exécutons la commande suivante dans le terminal :

sort myfile

Elle triera les chaînes du fichier comme suit :

likegeeks
Likegeeks

Commande sort, par défaut, trie les chaînes par ordre croissant, c'est-à-dire que la lettre minuscule dans notre exemple est inférieure à la majuscule. Préparons maintenant un script qui comparera les mêmes chaînes :

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Si nous l'exécutons, il s'avère que tout est inversé : la lettre minuscule est maintenant plus grande que la majuscule.

Scripts Bash : introduction
Commande sort et comparaison de chaînes dans le fichier de script

Dans les commandes de comparaison, les lettres majuscules sont inférieures aux lettres minuscules. La comparaison des chaînes se fait ici par la comparaison des codes ASCII des symboles, l'ordre de tri dépend donc des codes des symboles.

Commande sort, à son tour, utilise l'ordre de tri défini dans les paramètres de la langue système.

Vérifications des fichiers

Les commandes ci-dessous sont probablement les plus utilisées dans les scripts bash. Elles permettent de vérifier différentes conditions concernant les fichiers. Voici la liste de ces commandes.

-d fichierVérifie si le fichier existe et s'il s'agit d'un répertoire.
-e fichierVérifie si le fichier existe.
-f fichier Vérifie si le fichier existe et s'il s'agit d'un fichier.
-r fichierVérifie si le fichier existe et s'il est lisible.
-s fichierVérifie si le fichier existe et s'il n'est pas vide.
-w fichierVérifie si le fichier existe et s'il est writable.
-x fichierVérifie si le fichier existe et s'il est exécutable.
fichier1 -nt fichier2 Vérifie si c'est plus récent que file1, que file2.
file1 -ot file2Vérifie si c'est plus ancien que file1, que file2.
-O file Vérifie si le fichier existe et si l'utilisateur actuel en est le propriétaire.
-G fileVérifie si le fichier existe et si son identifiant de groupe correspond à celui de l'utilisateur actuel.

Ces commandes, comme beaucoup d'autres que nous avons abordées aujourd'hui, ne sont pas difficiles à retenir. Leurs noms, étant des abréviations de différents mots, indiquent clairement les vérifications qu'elles effectuent.

Testons l'une des commandes en pratique :

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Ce script, pour un répertoire existant, affichera son contenu.

Scripts Bash : introduction
Affichage du contenu du répertoire

Nous pensons que vous pourrez expérimenter avec les autres commandes par vous-même, elles s'appliquent toutes selon le même principe.

Résultats

Aujourd'hui, nous avons parlé de la façon de commencer à écrire des scripts bash et avons examiné quelques éléments de base. En réalité, le sujet de la programmation bash est énorme. Cet article est une traduction de la première partie d'une grande série de 11 matériaux. Si vous voulez la suite tout de suite, voici la liste des originaux de ces matériaux. Pour votre confort, celui que vous venez de lire est également inclus.

  1. Script Bash étape par étape — il s'agit de la façon de commencer à créer des scripts bash, de l'utilisation des variables, des structures conditionnelles, des calculs, des comparaisons de nombres, de chaînes, et de la façon d'obtenir des informations sur les fichiers.
  2. Programmation Bash Partie 2, Bash l'incroyable — ici, nous dévoilons les particularités du travail avec les boucles for et while.
  3. Programmation Bash Partie 3, Paramètres & options — ce matériel est dédié aux paramètres de ligne de commande et aux clés pouvant être passées aux scripts, au travail avec les données saisies par l'utilisateur et pouvant être lues à partir de fichiers.
  4. Programmation Bash Partie 4, Entrée & Sortie — ici, nous parlons des descripteurs de fichiers et de leur utilisation, des flux d'entrée, de sortie, d'erreur, et du rediriger la sortie.
  5. Programmation Bash Partie 5, Signaux & Tâches — ce matériel est dédié aux signaux Linux, à leur traitement dans les scripts, à l'exécution de scénarios programmés.
  6. Programmation Bash Partie 6, Fonctions — ici, vous pouvez apprendre à créer et utiliser des fonctions dans des scripts, à développer des bibliothèques.
  7. Programmation Bash Partie 7, Utilisation de sed — cet article est dédié au travail avec l'éditeur de texte en flux sed.
  8. Programmation Bash Partie 8, Utilisation de awk — ce matériel est consacré à la programmation dans le langage de traitement de données awk.
  9. Programmation Bash Partie 9, Expressions régulières — ici, vous pouvez lire sur l'utilisation des expressions régulières dans les scripts bash.
  10. Bash Scripting Partie 10, Exemples Pratiques — ici, des techniques de gestion des messages envoyés aux utilisateurs et une méthode de surveillance du disque sont présentées.
  11. Bash Scripting Partie 11, Commande Expect — ce matériel est consacré à l'outil Expect, qui permet d'automatiser l'interaction avec des utilitaires interactifs. En particulier, il aborde les scripts expect et leur interaction avec des scripts bash et d'autres programmes.

Nous pensons que l'une des propriétés précieuses de cette série d'articles est qu'elle commence par les concepts les plus simples, adaptés à tout utilisateur, et conduit progressivement à des sujets assez sérieux, offrant à tous les intéressés la possibilité d'avancer dans la création de scripts en ligne de commande Linux.

Chers lecteurs ! Nous demandons aux gourous de la programmation bash de partager comment ils ont atteint les sommets de leur maîtrise, de révéler leurs secrets, et nous attendons les impressions de ceux qui viennent d'écrire leur premier script.

Scripts Bash : introduction

Seuls les utilisateurs enregistrés peuvent participer au sondage. Connectez-vous, s'il vous plaît.

Devrions-nous traduire les autres parties de la série d'articles ?

  • Oui !

  • Non, ce n'est pas nécessaire

1030 utilisateurs ont voté. 106 utilisateurs se sont abstenus.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster