GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel étape par étape sur les scripts shell

Dans ce didacticiel, nous allons parler des scripts shell et de la création de votre premier script shell. Ils sont appelés scripts shell en général, mais nous allons les appeler scripts Bash car nous allons utiliser Bash parmi les autres shells Linux.

Il existe zsh, tcsh, ksh et d'autres shells.

Dans les articles précédents, nous avons vu comment utiliser le shell Bash et comment utiliser les commandes Linux.

Le concept d'un script Bash est d'exécuter une série de commandes pour faire votre travail.

Pour exécuter plusieurs commandes en une seule étape à partir du shell, vous pouvez les saisir sur une seule ligne et les séparer par des points-virgules.

pwd ; whoami

Ceci est un script Bash !!

La commande pwd s'exécute en premier, affichant le répertoire de travail actuel, puis la commande whoami s'exécute pour afficher les utilisateurs actuellement connectés.

Vous pouvez exécuter plusieurs commandes autant que vous le souhaitez, mais avec une limite. Vous pouvez déterminer votre maximum d'arguments à l'aide de cette commande.

 getconf ARG_MAX

Eh bien, qu'en est-il de mettre les commandes dans un fichier, et lorsque nous devons exécuter ces commandes, nous exécutons uniquement ce fichier. C'est ce qu'on appelle un script Bash.

Tout d'abord, créez un nouveau fichier à l'aide de la commande touch. Au début de tout script Bash, nous devons définir quel shell nous allons utiliser car il existe de nombreux shells sous Linux, Bash shell en fait partie.

Symbole de script shell

La première ligne que vous saisissez lors de l'écriture d'un script Bash est le (# !) suivi du shell que vous utiliserez.

# ! <===ce signe s'appelle shebang.

#!/bin/bash

Si vous utilisez le signe dièse (#) devant n'importe quelle ligne de votre script shell, cette ligne deviendra un commentaire, ce qui signifie qu'elle ne sera pas traitée, mais la ligne ci-dessus est un cas particulier. Cette ligne définit le shell que nous allons utiliser, qui est le shell Bash dans notre cas.

Les commandes shell sont saisies une par ligne comme ceci :

#!/bin/bash

# This is a comment

pwd

whoami

Vous pouvez taper plusieurs commandes sur la même ligne, mais vous devez les séparer par des points-virgules, mais il est préférable d'écrire les commandes sur des lignes séparées; cela facilitera la lecture plus tard.

Définir l'autorisation de script

Après avoir écrit votre script shell, enregistrez le fichier.

Maintenant, définissez ce fichier pour qu'il soit exécutable ; sinon, il vous donnera l'autorisation refusée. Vous pouvez revoir comment définir les autorisations à l'aide de la commande chmod.

chmod +x ./myscript

Ensuite, essayez de l'exécuter en le tapant simplement dans le shell :

./myscript

Et oui, il est exécuté.

Créez votre premier script Bash

Comme nous le savons par d'autres articles, l'impression de texte se fait à l'aide de

echo

commande.

Modifiez votre fichier et saisissez ceci :

#!/bin/bash

# our comment is here

echo "The current directory is:"

pwd

echo "The user logged in is:"

whoami

Regardez la sortie :

Parfait! Nous pouvons maintenant exécuter des commandes et afficher du texte :

echo

Si vous ne connaissez pas la commande echo ou comment modifier un fichier, je vous recommande de consulter les articles précédents sur les commandes Linux de base.

Utiliser des variables

Les variables vous permettent de stocker des informations pour les utiliser dans votre script.

Vous pouvez définir deux types de variables dans votre script shell :

  • Variables d'environnement
  • Variables utilisateur

Variables d'environnement

Parfois, vous devez interagir avec des variables système; vous pouvez le faire en utilisant des variables d'environnement.

#!/bin/bash

# display user home

echo "Home for the current user is: $HOME"

Notez que nous plaçons la variable système $HOME entre guillemets doubles et qu'elle imprime correctement la variable home.

Et si nous voulions imprimer le signe dollar lui-même ?

echo "I have $1 in my pocket"

Étant donné que la variable $1 n'existe pas, elle ne fonctionnera pas. Alors, comment surmonter cela ?

Vous pouvez utiliser le caractère d'échappement, qui est la barre oblique inverse \ avant le signe dollar comme ceci :

echo "I have \$1 in my pocket"

Maintenant ça marche !!

Variables utilisateur

Vous pouvez également définir et utiliser vos variables personnalisées dans le script.

Vous pouvez appeler des variables utilisateur de la même manière :

#!/bin/bash

# User variables

grade=5

person="Adam"

echo "$person is a good boy, he is in grade $grade"

chmod +x myscript

./myscript

Remplacement de commande

Vous pouvez extraire des informations du résultat d'une commande en utilisant la substitution de commande.

Vous pouvez effectuer une substitution de commande avec l'une des méthodes suivantes :

  • Le caractère de backtick (`).
  • Le format $().

Assurez-vous que lorsque vous tapez le caractère backtick, ce n'est pas le guillemet simple.

Vous devez entourer la commande de deux backticks comme ceci :

mydir=`pwd`

Ou dans l'autre sens :

mydir=$(pwd)

Le script pourrait donc ressembler à ceci :

#!/bin/bash

mydir=$(pwd)

echo $mydir

Vous pouvez stocker le résultat de la commande dans la variable mydir.

Calcul mathématique

Vous pouvez effectuer des calculs mathématiques de base en utilisant le format $(( 2 + 2 )) :

#!/bin/bash

var1=$(( 5 + 5 ))

echo $var1

var2=$(( $var1 * 2 ))

echo $var2

C'est aussi simple que ça.

instruction si-alors

Vos scripts shell auront besoin d'instructions conditionnelles. Par exemple, si la valeur est inférieure à 10, faites ceci, sinon faites cela. Vous pouvez imaginer la logique que vous voulez.

La structure la plus basique de l'instruction if-then est la suivante :

si commande ; alors

faire quelque chose

fi

et voici un exemple :

#!/bin/bash

if whoami; then

	echo "It works"

fi

Depuis le

whoami

renverra mon utilisateur afin que la condition revienne vraie, et il imprimera le message.

Allons plus loin et utilisons d'autres commandes que nous connaissons.

Vérifier si un utilisateur existe

Peut-être rechercher un utilisateur spécifique dans le fichier de l'utilisateur

/etc/passwd

et si un enregistrement existe, dites-le moi dans un message.

#!/bin/bash

user=likegeeks

if grep $user /etc/passwd; then

	echo "No such a user $user"

fi

Nous utilisons le

/etc/passwd

dossier. Vous pouvez consulter notre tutoriel sur la commande grep.

Si l'utilisateur existe, le script shell imprimera le message.

Que faire si l'utilisateur n'existe pas ? Le script quittera l'exécution sans nous dire que l'utilisateur n'existe pas. OK, améliorons davantage le script.

instruction si-alors-sinon

L'instruction if-then-else adopte la structure suivante :

si commande ; alors

faire quelque chose

sinon

faire autre chose

fi

Si la première commande s'exécute et renvoie zéro, ce qui signifie un succès, elle ne touchera pas les commandes après l'instruction else ; sinon, si l'instruction if renvoie une valeur différente de zéro ; ce qui signifie que la condition de l'instruction échoue, dans ce cas, le shell lancera les commandes après l'instruction else.

#!/bin/bash

user=anotherUser

if grep $user /etc/passwd; then

	echo "The user $user Exists"

else

	echo "The user $user doesn’t exist"

fi

Nous allons bien jusqu'à présent, continuez à avancer.

Maintenant, que se passe-t-il si nous avons besoin de plus d'instructions else ?

Eh bien, c'est facile, nous pouvons y parvenir en imbriquant des déclarations if comme celle-ci :

si condition1 ; alors

commandes

condition elif2 ; alors

commandes

fi

Si la première commande renvoie zéro ; signifie succès, il exécutera les commandes après, sinon si la deuxième commande renvoie zéro, il exécutera les commandes après, sinon si aucune ne renvoie zéro, il n'exécutera que les dernières commandes.

#!/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"

fi

Vous pouvez imaginer n'importe quel scénario, peut-être que si l'utilisateur n'existe pas, créez un utilisateur à l'aide de

useradd

commander ou faire quoi que ce soit d'autre.

Combiner les tests

Vous pouvez combiner plusieurs tests à l'aide de la commande AND (&&) ou OR (||).

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] && [ -n $name ]; then

	echo "The name exists and the folder $dir exists."

else

	echo "One test failed"

fi

Cet exemple renverra true uniquement si les deux tests ont réussi; sinon, cela échouera.

Vous pouvez également utiliser OR (||) de la même manière :

#!/bin/bash

dir=/home/likegeeks

name="likegeeks"

if [ -d $dir ] || [ -n $name ]; then

	echo "Success!"

else

	echo "Both tests failed"

fi

Cet exemple renverrait le succès si l'un ou les deux réussissaient.

Cela n'échouerait que si les deux échouaient.

Comparaisons numériques

Vous pouvez effectuer une comparaison numérique entre deux valeurs numériques à l'aide de vérifications de comparaison numérique comme ceci :

nombre1 -eq nombre2 Vérifie si nombre1 est égal à nombre2.

nombre1 -ge nombre2 Vérifie si nombre1 est supérieur ou égal à nombre2.

number1 -gt number2 Vérifie si number1 est supérieur à number2.

nombre1 -le nombre2 Vérifie si nombre1 est inférieur ou égal à nombre2.

nombre1 -lt nombre2 Vérifie si nombre1 est inférieur à nombre2.

nombre1 -ne nombre2 Vérifie si nombre1 n'est pas égal à nombre2.

À titre d'exemple, nous allons essayer l'un d'entre eux, et le reste est le même.

Notez que l'instruction de comparaison est entre crochets, comme indiqué.

#!/bin/bash

num=11

if [ $num -gt 10]; then

	echo "$num is bigger than 10"

else

	echo "$num is less than 10"

fi

Le nombre est supérieur à dix, il exécutera donc la première instruction et imprimera le premier écho.

Comparaisons de chaînes

Vous pouvez comparer des chaînes de l'une des manières suivantes :

string1 =string2 Vérifie si string1 est identique à string2.

string1 !=string2 Vérifie si string1 n'est pas identique à string2.

string1

string1> string2 Vérifie si string1 est supérieur à string2.

-n string1 Vérifie si string1 est plus long que zéro.

-z string1 Vérifie si string1 est de longueur nulle.

Nous pouvons appliquer une comparaison de chaînes à notre exemple :

#!/bin/bash

user="likegeeks"

if [ $user = $USER ]; then

	echo "The user $user&nbsp; is the current logged in user"

fi

Une remarque délicate sur le supérieur à et inférieur à pour les comparaisons de chaînes, ils DOIVENT être échappé avec la barre oblique inverse car si vous utilisez uniquement le symbole supérieur à, les résultats sont erronés.

Donc, vous devriez le faire comme ça :

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Il s'exécute, mais il donne cet avertissement :

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

Pour résoudre ce problème, enveloppez les $vals avec un guillemet double, en le forçant à rester comme une chaîne comme ceci :

#!/bin/bash

v1=text

v2="another text"

if [ $v1 \> "$v2" ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

Une note critique sur supérieur à et inférieur à pour les comparaisons de chaînes. Consultez l'exemple suivant pour comprendre la différence :

#!/bin/bash

v1=Likegeeks

v2=likegeeks

if [ $v1 \> $v2 ]; then

	echo "$v1 is greater than $v2"

else

	echo "$v1 is less than $v2"

fi

sort myfile

comme les geeks

Comme les geeks

La condition de test considère les lettres minuscules plus grandes que les lettres majuscules.

sort

Contrairement à la commande sort, qui fait le contraire.

La condition de test est basée sur l'ordre ASCII.

sort

Alors que la commande de tri est basée sur les ordres de numérotation des paramètres système.

Comparaisons de fichiers

Vous pouvez comparer et rechercher des fichiers à l'aide des opérateurs suivants :

-d mon_fichier Vérifie s'il s'agit d'un dossier.

-e mon_fichier Vérifie si le fichier est disponible.

-f my_file Vérifie si c'est un fichier.

-r mon_fichier Vérifie s'il est lisible.

mon_fichier nt my_file2 Vérifie si my_file est plus récent que mon_fichier2.

mon_fichier ot my_file2 Vérifie si my_file est plus ancien que mon_fichier2.

-O my_file Vérifie si le propriétaire du fichier et l'utilisateur connecté correspondent.

-G my_file Vérifie si le fichier et l'utilisateur connecté ont un groupe identique.

Comme ils l'impliquent, vous ne les oublierez jamais.

Choisissons-en un et prenons-le comme exemple :

#!/bin/bash

mydir=/home/likegeeks

if [ -d $mydir ]; then

	echo "Directory $mydir exists"

	cd $mydir

	ls

else

	echo "NO such file or directory $mydir"

fi

Nous n'allons pas taper chacun d'entre eux à titre d'exemple. Il vous suffit de taper la comparaison entre les crochets telle quelle et de terminer votre script normalement.

Il existe d'autres fonctionnalités avancées si-alors, mais parlons-en dans un autre article.

C'est pour maintenant. J'espère que vous l'apprécierez et que vous continuerez à pratiquer de plus en plus.

Merci.


Linux
  1. Descripteurs de fichiers et scripts shell ?

  2. Affichage du contenu de la plus haute valeur dans les scripts Shell ?

  3. Dois-je utiliser Apt ou Apt-get dans les scripts Shell ?

  4. Symbole Backtick (`) dans Linux Shell Scripting

  5. Qu'est-ce que l'utilisation () dans les scripts shell ?

Tutoriel de script Bash pour les débutants

Qu'est-ce que Shebang dans Linux Shell Scripting ?

Shell Scripting Part4 - Entrée, sortie et redirection

Gestion efficace des fuseaux horaires Linux (tutoriel étape par étape)

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques

Tutoriel sur les fonctions Bash Shell avec 6 exemples pratiques