English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Variables Shell

Lors de la définition d'une variable, le nom de la variable ne doit pas comporter de symbole dollar ($, les variables PHP en ont besoin), par exemple :

your_name="w"3codebox.com"

Attention, il ne peut pas y avoir d'espaces entre le nom de la variable et l'égal, ce qui est différent de toutes les langues de programmation que vous connaissez. De plus, le nom des variables doit suivre les règles suivantes :

  •             Les noms peuvent ne contenir que des lettres anglaises, des chiffres et des traits de soulignement, et le premier caractère ne peut pas commencer par un chiffre.

  •             Il ne peut pas y avoir d'espaces à l'intérieur, mais vous pouvez utiliser des traits de soulignement (_).

  •             Ne pas utiliser de symboles de ponctuation.

  •             Ne pas utiliser les mots-clés de bash (vous pouvez consulter la commande help pour voir les mots-clés réservés).

Voici des exemples de noms de variables Shell valides :

w3codebox
LD_LIBRARY_PATH
_var
var2

Nom de variable invalide :

?var=123
user*name=w3codebox

En plus de l'assignation explicite directe, vous pouvez également assigner une valeur à une variable avec des instructions, par exemple :

for file in `ls /etc`
ou
for file in $(ls /etc)

Les instructions ci-dessus feront /Boucler les noms de fichiers dans le répertoire sous etc.

Utilisation de la variable

Pour utiliser une variable définie, il suffit d'ajouter le symbole dollar ($) devant le nom de la variable, par exemple :

your_name="qinjx"
echo $your_name
echo ${your_name}

Les crochets autour du nom de la variable sont optionnels, il est permissible de les ajouter ou non, les ajouter est destiné à aider l'interpréteur à identifier les limites des variables, par exemple dans ce cas :

for skill in Ada Coffee Action Java; do
    echo "I am good at ${skill}Script"
done

Si vous ne mettez pas de crochets autour du nom de la variable skill, et que vous écrivez echo "I am good at $skillScript", l'interpréteur prendra $skillScript pour une variable (valeur vide), et le résultat de l'exécution du code ne sera pas celui que nous attendions.

Il est recommandé de mettre tous les noms de variables entre crochets, c'est une bonne habitude de programmation.

Les variables déjà définies peuvent être redéfinies, par exemple :

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

Cela est légal de cette manière, mais attention, lors de la deuxième assignation, il ne faut pas écrire $your_name="alibaba", l'ajout du symbole dollar ($) n'est utilisé que lorsque l'on utilise une variable.

Variables en lecture seule

La commande readonly peut définir une variable comme variable en lecture seule, la valeur d'une variable en lecture seule ne peut pas être modifiée.

L'exemple suivant essaie de modifier une variable en lecture seule, et génère une erreur :

#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://fr.oldtoolbag.com"

L'exécution du script donne le résultat suivant :

/bin/sh: NAME: Ce variable est en lecture seule.

Suppression de variable

La commande unset peut supprimer les variables. Syntaxe :

unset variable_name

Les variables supprimées ne peuvent pas être utilisées à nouveau. La commande unset ne peut pas supprimer les variables en lecture seule.

Exemple

#!/bin/sh
myUrl="https://fr.oldtoolbag.com"
unset myUrl
echo $myUrl

L'exécution de l'exemple ci-dessus n'aura aucun output.

Type de variable

Lors de l'exécution du Shell, il existe trois types de variables en même temps :

  • 1) Variables localesLes variables locales sont définies dans le script ou la commande, et ne sont valides que dans l'instance actuelle du Shell, d'autres programmes démarrés par le Shell ne peuvent pas accéder aux variables locales.

  • 2) Variables d'environnementTous les programmes, y compris les programmes démarrés par le Shell, peuvent accéder aux variables d'environnement, certains programmes ont besoin des variables d'environnement pour garantir leur bon fonctionnement. Le Shell peut également définir des variables d'environnement si nécessaire.

  • 3) Variables ShellLes variables Shell sont des variables spéciales définies par le programme Shell. Une partie des variables Shell est des variables d'environnement, et une autre partie est des variables locales, ces variables assurent le bon fonctionnement du Shell

Chaînes Shell

Les chaînes sont le type de données le plus couramment utilisé et le plus utile dans la programmation shell (à part les nombres et les chaînes, il n'y a pas d'autres types utiles), les chaînes peuvent être encadrées par des guillemets simples, des guillemets doubles, ou ne pas être encadrées.

Guillemets simples

str='this is a string'

Limites des chaînes de guillemets simples :

  •             Tous les caractères dans les guillemets simples sont affichés tels quels, et les variables dans les chaînes de guillemets simples sont invalides;

  •             Un guillemet simple ne peut pas apparaître seul dans une chaîne de guillemets simples (même après échappement), mais il peut apparaître en paires pour concaténer des chaînes.

Guillemets doubles

your_name='w3codebox'
str="Hello, je sais que vous êtes \"$your_name\"! \n"
echo -e $str

Le résultat de la sortie est :

Hello, je sais que vous êtes "w3codebox"!

Avantages des guillemets doubles :

  •             Les variables peuvent apparaître dans les guillemets doubles

  •             Les caractères d'échappement peuvent apparaître dans les guillemets doubles

Concaténation de chaînes

your_name="w"3codebox
# Utilisation de guillemets doubles pour concaténation
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# Utilisation de guillemets simples pour concaténation
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

Le résultat de la sortie est :

codebox !3codebox ! hello, w3codebox ! hello, w
codebox !3hello, w

codebox ! hello, ${your_name} !

obtenir la longueur de la chaîne
string="abcd" 4

echo ${#string} # Sortie

extraire une sous-chaîne à partir de la chaîne 2 caractères à partir de 4 caractères :

string="w3codebox est un excellent site"
echo ${string}1:4} # Sortie unoo

Attention:le valeur de l'index du premier caractère est 0.

recherche de sous-chaîne

recherche de caractères i ou o la position (quelle lettre apparaît en premier est calculée) :

string="w3codebox est un excellent site"
echo `expr index "$string" io` # Sortie 4

Attention : Dans le script ci-dessus, ` est un guillemet oblique, pas un guillemet simple ', ne le confondez pas.

Tableaux Shell

bash prend en charge les tableaux unidimensionnels (les tableaux multidimensionnels ne sont pas pris en charge) et n'a pas de limite pour la taille des tableaux.

Comme dans le langage C, les indices des éléments du tableau commencent par 0. Pour obtenir un élément du tableau, il faut utiliser un index, qui peut être un entier ou une expression arithmétique, et sa valeur doit être supérieure ou égale à 0.

Définir un tableau

Dans Shell, les parenthèses sont utilisées pour représenter les tableaux, et les éléments du tableau sont séparés par des "espaces". La forme générale de la définition d'un tableau est :

nom_du_tableau=(valeur1 valeur2 ... value n)

par exemple :

array_name=(value0 value1 value2 value3)

ou

array_name=(
value0
value1
value2
value3
)

Il est également possible de définir séparément chaque composante du tableau :

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

Il est possible de ne pas utiliser des indices consécutifs, et la plage des indices n'est pas limitée.

Lire un tableau

Le format général pour lire une valeur d'un tableau est :

${nom_du_tableau[indice]}

par exemple :

valuen=${array_name[n]}

L'utilisation du symbole @ permet de récupérer tous les éléments d'un tableau, par exemple :

echo ${array_name[@]}

Obtenir la longueur d'un tableau

La méthode d'obtention de la longueur d'un tableau est la même que celle d'obtention de la longueur d'une chaîne, par exemple :

# Obtenir le nombre d'éléments de l'array
length=${#array_name[@]}
# Ou
length=${#array_name[*]}
# Obtenir la longueur d'un élément d'array
lengthn=${#array_name[n]}

Commentaires Shell

Les lignes commençant par # sont des commentaires et sont ignorés par l'interpréteur.

En ajoutant un symbole # à chaque ligne # Pour définir des commentaires multilignes, il suffit d'ajouter un symbole # à chaque ligne, comme ceci :

#--------------------------------------------
# C'est un commentaire
# Auteur : Site de tutoriels de base
# Site : fr.oldtoolbag.com
# Slogan : Bien apprendre les bases, c'est la clé pour aller plus loin !
#--------------------------------------------
##### Début de la zone de configuration de l'utilisateur #####
#
#
# Ici, vous pouvez ajouter des informations de description de script
# 
#
##### Fin de la zone de configuration de l'utilisateur #####

Si, pendant le développement, vous rencontrez des segments de code longs qui doivent être annotés temporairement et désannotés plus tard, que faire ?

Il est trop difficile d'ajouter un symbole # à chaque ligne, vous pouvez donc encadrer ce segment de code à annoter entre des crochets, le définir comme une fonction, sans appeler cette fonction nulle part, ce qui rend le code inexécutable et atteint l'effet des commentaires.

Commentaires multilignes

Les commentaires multilignes peuvent également être utilisés dans le format suivant:

:<<EOF
Contenu des commentaires...
Contenu des commentaires...
Contenu des commentaires...
EOF

EOF peut également utiliser d'autres symboles:

:<<'
Contenu des commentaires...
Contenu des commentaires...
Contenu des commentaires...
'
:<<!
Contenu des commentaires...
Contenu des commentaires...
Contenu des commentaires...
!