Scripts Bash : le début

Scripts Bash : le début
Scripts Bash Partie 2 : Boucles
Scripts Bash, partie 3 : options et commutateurs de 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
Bash Scripts Partie 10 : Exemples pratiques
Scripts Bash, partie 11 : attente et automatisation des utilitaires interactifs

Aujourd'hui, nous allons parler des scripts bash. Ce - scripts de ligne de commande, écrit pour le shell bash. Il existe d'autres shells tels que zsh, tcsh, ksh, mais nous nous concentrerons sur bash. Ce matériel est destiné à tous, la seule condition est la capacité à travailler ligne de commande Linux.

Scripts Bash : le début

Les scripts de ligne de commande sont des collections des mêmes commandes qui peuvent être saisies à partir du clavier, rassemblées dans des fichiers et unies par un objectif commun. Dans ce cas, les résultats du travail des équipes peuvent soit avoir une valeur indépendante, soit servir de données d’entrée pour d’autres équipes. Les scripts constituent un moyen puissant d’automatiser les actions fréquemment effectuées.

Scripts Bash : le début

Ainsi, si l'on parle de ligne de commande, elle permet d'exécuter plusieurs commandes à la fois en les saisissant séparées par un point-virgule :

pwd ; whoami

En fait, si vous avez essayé cela dans votre terminal, votre premier script bash impliquant deux commandes a déjà été écrit. Cela fonctionne comme ça. L'équipe d'abord pwd affiche des informations sur le répertoire de travail actuel, puis la commande whoamiaffiche des informations sur l'utilisateur sous lequel vous êtes connecté.

En utilisant cette approche, vous pouvez combiner autant de commandes que vous le souhaitez sur une seule ligne, la seule limite est le nombre maximum d'arguments pouvant être transmis au programme. Vous pouvez définir cette limite à l'aide de la commande suivante :

getconf ARG_MAX

La ligne de commande est un excellent outil, mais vous devez y saisir des commandes à chaque fois que vous en avez besoin. Et si nous écrivions un ensemble de commandes dans un fichier et appelions simplement ce fichier pour les exécuter ? En fait, le fichier dont nous parlons s’appelle un script de ligne de commande.

Comment fonctionnent les scripts bash

Créez un fichier vide à l'aide de la commande touch. Sa première ligne doit indiquer quel shell nous allons utiliser. Nous sommes intéressés par bash, donc la première ligne du fichier sera :

#!/bin/bash

D'autres lignes de ce fichier utilisent le symbole dièse pour indiquer les commentaires que le shell ne traite pas. Cependant, la première ligne est un cas particulier, il y a un dièse suivi d'un point d'exclamation (cette séquence est appelée case) et le chemin vers bash, indiquez au système que le script a été créé spécifiquement pour bash.

Les commandes Shell sont séparées par un saut de ligne, les commentaires sont séparés par un signe dièse. Voici à quoi cela ressemble :

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

Ici, tout comme sur la ligne de commande, vous pouvez écrire des commandes sur une seule ligne, séparées par des points-virgules. Cependant, si vous écrivez les commandes sur des lignes différentes, le fichier est plus facile à lire. Dans tous les cas, le shell les traitera.

Définition des autorisations du fichier de script

Enregistrez le fichier en lui donnant un 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, si vous essayez de l'exécuter, vous rencontrerez une erreur Permission denied.

Scripts Bash : le début
Tentative d'exécution d'un fichier de 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 défini les autorisations, tout fonctionne comme il se doit.

Scripts Bash : le début
Exécution réussie du script bash

Sortie des messages

Pour afficher du texte sur la console Linux, utilisez la commande echo. Utilisons la connaissance de ce fait et éditons notre script, en ajoutant des explications aux données générées par les commandes déjà présentes :

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

C'est ce qui se passe après l'exécution du script mis à jour.

Scripts Bash : le début
Sortie de messages à partir d'un script

Nous pouvons désormais afficher des notes explicatives à l'aide de la commande echo. Si vous ne savez pas comment modifier un fichier à l'aide des outils Linux ou si vous n'avez jamais vu la commande auparavant echo, jeter un coup d'œil à cette matériel.

Utiliser des variables

Les variables vous permettent de stocker des informations dans un fichier de script, telles que les résultats de commandes, pour les utiliser par d'autres commandes.

Il n'y a rien de mal à exécuter des commandes individuelles sans stocker leurs résultats, mais les capacités de cette approche sont très limitées.

Il existe deux types de variables pouvant être utilisées dans les scripts bash :

  • Variables d'environnement
  • Variables utilisateur

Variables d'environnement

Parfois, les commandes shell doivent fonctionner avec certaines données système. Voici un exemple de la façon d'afficher le répertoire personnel de l'utilisateur actuel :

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

Veuillez noter que nous pouvons utiliser une variable système $HOME entre guillemets, cela n'empêchera pas le système de le reconnaître. C'est ce que vous obtenez si vous exécutez le scénario ci-dessus.

Scripts Bash : le début
Utiliser une variable d'environnement dans un script

Que faire si vous devez afficher un signe dollar sur l'écran ? Essayons ça:

echo "I have $1 in my pocket"

Le système détectera un signe dollar dans une chaîne entre guillemets et supposera que nous avons référencé une variable. Le script va essayer d'afficher la valeur d'une variable non définie $1. Ce n’est pas ce dont nous avons besoin. Ce qu'il faut faire?

Dans cette situation, l’utilisation du caractère d’échappement, une barre oblique inverse, avant le signe dollar aidera :

echo "I have $1 in my pocket"

Le script affichera désormais exactement ce qui est attendu.

Scripts Bash : le début
Utiliser une séquence d'échappement pour imprimer un signe dollar

Variables utilisateur

En plus des variables d'environnement, les scripts bash vous permettent de définir et d'utiliser vos propres variables dans le script. Ces variables conservent une valeur jusqu'à ce que le script termine son exécution.

Comme pour les variables système, les variables utilisateur sont accessibles à l'aide du signe dollar :
TNW-CUS-FMP - code promo pour une réduction de 10 % sur nos services, disponible pour activation sous 7 jours

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

C'est ce qui se passe après l'exécution d'un tel script.

Scripts Bash : le début
Variables personnalisées dans un script

Remplacement de commande

L'une des fonctionnalités les plus utiles des scripts bash est la possibilité d'extraire des informations de la sortie d'une commande et de les affecter à des variables, vous permettant ainsi d'utiliser ces informations n'importe où dans le fichier de script.

Ceci peut être fait de deux façons.

  • Utiliser le backtick "`"
  • Intentionnellement $()

Lorsque vous utilisez la première approche, veillez à ne pas inclure de guillemets simples à la place du guillemet arrière. La commande doit être entourée de deux icônes :

mydir=`pwd`

Dans la deuxième approche, la même chose s’écrit ainsi :

mydir=$(pwd)

Et le script pourrait ressembler à ceci :

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

Lors de son fonctionnement, la sortie de la commande pwdsera enregistré dans une variable mydir, dont le contenu, à l'aide de la commande echo, ira à la console.

Scripts Bash : le début
Un script qui enregistre 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 telle que $((a+b)):

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

Scripts Bash : le début
Opérations mathématiques dans un script

construction de contrôle si-alors

Dans certains scénarios, vous devez contrôler le flux d’exécution des commandes. Par exemple, si une certaine valeur est supérieure à cinq, vous devez effectuer une action, sinon une autre. Ceci est applicable dans de nombreuses situations, et ici la structure de contrôle nous aidera if-then. Dans sa forme la plus simple, cela ressemble à ceci :

if команда
then
команды
fi

Voici un exemple fonctionnel :

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

Dans ce cas, si la commande est exécutée pwdse terminera avec succès, le texte «ça marche» s'affichera dans la console.

Utilisons les connaissances dont nous disposons et écrivons un script plus complexe. Disons que nous devons trouver un certain utilisateur dans /etc/passwd, et si vous avez réussi à le trouver, signalez qu'il existe.

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

C'est ce qui se passe après l'exécution de ce script.

Scripts Bash : le début
Recherche d'utilisateurs

Ici, nous avons utilisé la commande greprechercher un utilisateur dans un fichier /etc/passwd. Si l'équipe grepque vous ne connaissez pas, sa description peut être trouvée ici.

Dans cet exemple, si l'utilisateur est trouvé, le script affichera un message correspondant. Que se passe-t-il si l'utilisateur est introuvable ? Dans ce cas, le script terminera simplement son exécution sans rien nous dire. Nous aimerions qu'il nous en parle également, nous allons donc améliorer le code.

construction de contrôle if-then-else

Pour que le programme puisse rapporter à la fois les résultats d'une recherche réussie et d'un échec, nous utiliserons la construction if-then-else. Voici comment cela fonctionne:

if команда
then
команды
else
команды
fi

Si la première commande renvoie zéro, ce qui signifie qu'elle a été exécutée avec succès, la condition sera vraie et l'exécution ne se poursuivra pas le long de la branche. else. Sinon, si quelque chose d'autre que zéro est renvoyé, ce qui indiquerait un échec ou un résultat faux, les commandes après else.

Écrivons le script suivant :

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

Son exécution a échoué else.

Scripts Bash : le début
Exécuter un script avec une construction if-then-else

Bon, passons à autre chose et interrogeons-nous sur des conditions plus complexes. Et si vous deviez vérifier non pas une condition, mais plusieurs ? Par exemple, si l'utilisateur souhaité est trouvé, un message doit être affiché, si une autre condition est remplie, un autre message doit être affiché, et ainsi de suite. Dans une telle situation, les conditions imbriquées nous aideront. Cela ressemble à ceci :

if команда1
then
команды
elif команда2
then
команды
fi

Si la première commande renvoie zéro, ce qui indique son exécution réussie, les commandes du premier bloc seront exécutées then, sinon, si la première condition est 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 pas produit de résultats, ou faire autre chose d'utile.

Comparaison des nombres

Dans les scripts, vous pouvez comparer des valeurs numériques. Vous trouverez ci-dessous une liste de commandes pertinentes.

n1 -eq n2Renvoie vrai si n1 égal n2.
n1 -ge n2 Renvoie vrai si n1plus ou égal n2.
n1 -gt n2Renvoie vrai si n1 plus n2.
n1 -le n2Renvoie vrai si n1inférieur ou égal n2.
n1 -lt n2Renvoie vrai si n1 est inférieur à n2.
n1 -ne n2Renvoie vrai si n1n'est pas égal à n2.

À titre d'exemple, essayons l'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

C'est ce que cette commande produira.

Scripts Bash : le début
Comparaison des nombres dans les scripts

Valeur variable val1supérieur à 5, le branchement finit par être exécuté thenopérateur de comparaison et un message correspondant s'affiche dans la console.

Comparaison de chaînes

Les scripts peuvent également comparer des valeurs de chaîne. Les opérateurs de comparaison semblent assez simples, mais les opérations de comparaison de chaînes ont certaines fonctionnalités, que nous aborderons ci-dessous. Voici une liste d'opérateurs.

str1 = str2 Teste l’égalité des chaînes, renvoyant vrai si les chaînes sont identiques.
str1 != str2Renvoie vrai si les chaînes ne sont pas identiques.
str1 < str2Renvoie vrai si str1moins que str2.
str1 > str2 Renvoie vrai si str1plus que str2.
-n str1 Renvoie vrai si longueur str1Au dessus de zéro.
-z str1Renvoie vrai si longueur str1égal à zéro.

Voici un exemple de comparaison de chaînes dans un script :

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

À la suite de l'exécution du script, nous obtenons ce qui suit.

Scripts Bash : le début
Comparaison de chaînes dans des scripts

Voici une fonctionnalité de comparaison de chaînes qui mérite d'être mentionnée. À savoir, les opérateurs ">" et "<" doivent être échappés avec une barre oblique inverse, sinon le script ne fonctionnera pas correctement, même si aucun message d'erreur n'apparaîtra. Le script interprète le signe ">" 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 du script.

Scripts Bash : le début
Comparaison de chaînes, avertissement donné

Veuillez noter que le script, bien qu'exécuté, émet un avertissement :

./myscript: line 5: [: too many arguments

Pour nous débarrasser de cet avertissement, nous concluons $val2 entre guillemets doubles :

#!/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 : le début
Comparaison de chaînes

Une autre caractéristique des opérateurs ">" et "<" est la manière dont ils fonctionnent avec les caractères majuscules et minuscules. Afin de comprendre cette fonctionnalité, préparons un fichier texte avec le contenu suivant :

Likegeeks
likegeeks

Sauvons-le en lui donnant un nom myfile, puis exécutez la commande suivante dans le terminal :

sort myfile

Il triera les lignes du fichier comme ceci :

likegeeks
Likegeeks

Équipe sort, par défaut, trie les chaînes par ordre croissant, c'est-à-dire que la lettre minuscule dans notre exemple est plus petite que la lettre 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 vous l'exécutez, il s'avère que tout est inversé : la lettre minuscule est désormais plus grande que la majuscule.

Scripts Bash : le début
La commande de tri et la comparaison des chaînes dans un fichier de script

Dans les commandes de comparaison, les lettres majuscules sont plus petites que les lettres minuscules. La comparaison de chaînes se fait ici en comparant les codes ASCII des caractères, l'ordre de tri dépend donc des codes de caractères.

Équipe sort, à son tour, utilise l'ordre de tri spécifié dans les paramètres de langue du système.

Vérifications de fichiers

Les commandes suivantes sont peut-être utilisées le plus souvent dans les scripts bash. Ils vous permettent de vérifier diverses conditions concernant les fichiers. Voici une liste de ces commandes.

-d fileVérifie si un fichier existe et s'il s'agit d'un répertoire.
-e fileVérifie si le fichier existe.
-f file Vérifie si un fichier existe et s'il s'agit d'un fichier.
-r fileVérifie si le fichier existe et est lisible.
-s file ПVérifie si le fichier existe et n'est pas vide.
-w fileVérifie si le fichier existe et est accessible en écriture.
-x fileVérifie si le fichier existe et est exécutable.
file1 -nt file2 Vérifie si c'est plus récent file1que file2.
file1 -ot file2Vérifie si plus vieux file1que file2.
-O file Vérifie si le fichier existe et appartient à l'utilisateur actuel.
-G fileVérifie si un fichier existe et si son ID de groupe correspond à l'ID de groupe de l'utilisateur actuel.

Ces commandes, ainsi que bien d’autres discutées aujourd’hui, sont faciles à retenir. Leurs noms, abréviations de divers mots, indiquent directement les contrôles qu'ils effectuent.

Essayons 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 : le début
Lister le contenu d'un répertoire

Nous pensons que vous pouvez expérimenter vous-même les commandes restantes ; elles sont toutes utilisées selon le même principe.

Les résultats de

Aujourd'hui, nous avons expliqué comment commencer à écrire des scripts bash et abordé quelques éléments de base. En fait, le sujet de la programmation bash est énorme. Cet article est une traduction de la première partie d’une large série de 11 documents. Si vous souhaitez continuer dès maintenant, voici une liste des originaux de ces matériaux. Pour plus de commodité, la traduction que vous venez de lire est incluse ici.

  1. Script Bash étape par étape — nous parlons ici de la façon de commencer à créer des scripts bash, de prendre en compte l'utilisation de variables, de décrire les structures conditionnelles, les calculs, les comparaisons de nombres, de chaînes et la recherche d'informations sur les fichiers.
  2. Bash Scripting Partie 2, Bash le génial — ici les fonctionnalités de travail avec les boucles for et while sont révélées.
  3. Bash Scripting Partie 3, Paramètres et options — ce matériel est consacré aux paramètres de ligne de commande et aux clés qui peuvent être transmises aux scripts, travaillant avec les données que l'utilisateur saisit et qui peuvent être lues à partir de fichiers.
  4. Bash Scripting Partie 4, Entrée et sortie - nous parlons ici des descripteurs de fichiers et de leur utilisation, des entrées, des sorties, des flux d'erreurs et de la redirection de sortie.
  5. Bash Scripting Partie 5, Soupirs et emplois — ce matériel est consacré aux signaux Linux, à leur traitement dans des scripts et au lancement de scripts selon un planning.
  6. Bash Scripting Partie 6, Fonctions — ici, vous pouvez en apprendre davantage sur la création et l'utilisation de fonctions dans des scripts et le développement de bibliothèques.
  7. Bash Scripting Partie 7, Utilisation de sed — cet article est consacré à l'utilisation de l'éditeur de texte sed streaming.
  8. Bash Scripting Partie 8, Utilisation d'awk — ce matériel est consacré à la programmation dans le langage de traitement de données awk.
  9. Bash Scripting Partie 9, Expressions régulières — ici, vous pouvez en savoir plus sur l'utilisation des expressions régulières dans les scripts bash.
  10. Bash Scripting Partie 10, Exemples pratiques — voici des techniques pour travailler avec des messages pouvant être envoyés aux utilisateurs, ainsi qu'une méthode de surveillance des disques.
  11. Bash Scripting Partie 11, Commande Attendre — ce matériel est dédié à l'outil Expect, avec lequel vous pouvez automatiser l'interaction avec des utilitaires interactifs. En particulier, nous parlons des scripts attendus et de leur interaction avec les scripts bash et d'autres programmes.

Nous pensons que l'une des caractéristiques précieuses de cette série d'articles est que, en partant du plus simple, adapté aux utilisateurs de tout niveau, elle mène progressivement à des sujets assez sérieux, donnant à chacun la possibilité d'avancer dans la création de scripts de ligne de commande Linux. .

Chers lecteurs! Nous demandons aux gourous de la programmation bash de raconter comment ils ont atteint le sommet de leur maîtrise, de partager leurs secrets, et nous attendons avec impatience de recevoir les impressions de ceux qui viennent d'écrire leur premier script.

Scripts Bash : le début

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. se connecters'il te plait.

Dois-je traduire le reste de la série d’articles ?

  • Oui!

  • Non, pas besoin

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

Source: habr.com