Variables Shell

En programmation Shell, une variable est un nom utilisé pour stocker une valeur de données.

Lors de la définition d'une variable, le nom de la variable n'inclut pas le signe dollar ($, comme requis pour les variables en PHP), par exemple :

your_name="exemple"

Notez qu'il ne doit pas y avoir d'espaces entre le nom de la variable et le signe égal, ce qui peut différer de tous les langages de programmation que vous connaissez. De plus, le nommage des variables doit suivre les règles suivantes :

  • Ne contenir que des lettres, des chiffres et des traits de soulignement :Les noms de variables peuvent contenir des lettres (sensibles à la casse), des chiffres et des traits de soulignement_, et ne peuvent pas contenir d'autres caractères spéciaux.
  • Ne peut pas commencer par un chiffre :Les noms de variables ne peuvent pas commencer par un chiffre, mais peuvent contenir des chiffres.
  • Évitez d'utiliser des mots-clés Shell :N'utilisez pas de mots-clés Shell (tels que if, then, else, fi, for, while, etc.) comme noms de variables pour éviter toute confusion.
  • Utilisez des lettres majuscules pour les constantes :Par convention, les noms de variables pour les constantes utilisent généralement des lettres majuscules, par exemplePI=3.14。
  • Évitez d'utiliser des symboles spéciaux :Essayez d'éviter d'utiliser des symboles spéciaux dans les noms de variables, car ils peuvent entrer en conflit avec la syntaxe du Shell.
  • Évitez d'utiliser des espaces :Les noms de variables ne doivent pas contenir d'espaces, car les espaces sont généralement utilisés pour séparer les commandes et les arguments.

Voici des exemples de noms de variables Shell valides :

EXAMPLE="www.example.com"
LD_LIBRARY_PATH="/bin/"
_var="123"
var2="abc"

Nommage de variable non valide :

# 避免使用if作为变量名
if="some_value"
# 避免使用 $ 等特殊符号
variable_with_$=42
?var=123
user*name=example
# 避免空格
variable with space="value"

Évitez les espaces des deux côtés du signe égal :

# 正确的赋值
variable_name=value

# 有可能会导致错误
variable_name = value

En plus de l'affectation directe explicite, vous pouvez également utiliser des instructions pour affecter des valeurs à des variables, comme :

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

L'instruction ci-dessus utilise une boucle pour lister les noms de fichiers dans le répertoire /etc.


Utilisation des variables

Pour utiliser une variable définie, ajoutez simplement un signe dollar avant le nom de la variable, comme :

Exemple

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

Les accolades autour du nom de la variable sont facultatives ; vous pouvez les ajouter ou non. L'ajout d'accolades aide l'interpréteur à identifier la limite de la variable, comme dans le cas suivant :

Exemple

for skill in Ada Coffe Action Java; do
    echo "Je suis bon en ${skill}Script"
done

Si vous n'ajoutez pas d'accolades à la variable skill et que vous écrivez echo "Je suis bon en $skillScript", l'interpréteur traitera $skillScript comme une variable (avec une valeur vide), et le résultat de l'exécution du code ne sera pas celui attendu.

Il est recommandé d'ajouter des accolades à toutes les variables ; c'est une bonne habitude de programmation.

Une variable définie peut être redéfinie, par exemple :

Exemple

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

C'est légal, mais notez que lors de la deuxième affectation, vous ne pouvez pas écrire $your_name="alibaba" ; vous n'ajoutez le signe dollar ($) que lorsque vous utilisez la variable.

Variables en lecture seule

L'utilisation de la commande readonly permet de 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 tente de modifier une variable en lecture seule, ce qui entraîne une erreur :

Exemple

#!/bin/bash

myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.example.com"

Exécutez le script, le résultat est le suivant :

/bin/sh: NAME: This variable is read only.

Suppression de variables

Utilisez la commande unset pour supprimer une variable. Syntaxe :

unset variable_name

Une variable ne peut plus être utilisée après sa suppression. La commande unset ne peut pas supprimer les variables en lecture seule.

Exemple

Exemple

#!/bin/sh

myUrl="https://www.example.com"
unset myUrl
echo $myUrl

L'exécution de l'exemple ci-dessus ne produira aucune sortie.

Types de variables

Shell prend en charge différents types de variables, et certains des principaux types incluent :

Variables de chaîne :Dans Shell, les variables sont généralement traitées comme des chaînes de caractères.

Vous pouvez utiliser des guillemets simples'ou des guillemets doubles"pour définir une chaîne, par exemple :

my_string='Hello, World!'

或者

my_string="Hello, World!"

Variables entières: Dans certains shells, vous pouvez utiliser la commandedeclareoutypesetpour déclarer des variables entières.

De telles variables ne contiennent que des valeurs entières, par exemple :

declare -i my_integer=42

Une telle déclaration indique à Shell de traiter my_integer comme un entier. Si vous essayez de lui affecter une valeur non entière, Shell essaiera de la convertir en entier.

Variables de tableau :Shell prend également en charge les tableaux, ce qui vous permet de stocker plusieurs valeurs dans une seule variable.

Les tableaux peuvent être des tableaux indexés par des entiers ou des tableaux associatifs. Voici un exemple de tableau simple indexé par des entiers :

my_array=(1 2 3 4 5)

Ou des tableaux associatifs :

declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30

Variables d'environnement :Il s'agit de variables spéciales définies par le système d'exploitation ou par l'utilisateur, utilisées pour configurer le comportement de Shell et affecter son environnement d'exécution.

Par exemple, la variable PATH contient le chemin où le système d'exploitation recherche les fichiers exécutables :

echo $PATH

Variables spéciales :Il existe certaines variables spéciales qui ont une signification particulière dans Shell, telles que$0représente le nom du script,$1, $2, etc. représentent les paramètres du script.

$#représente le nombre de paramètres passés au script,$?représente le statut de sortie de la commande précédente, etc.


Chaînes de caractères Shell

Les chaînes de caractères sont le type de données le plus couramment utilisé et le plus utile en programmation shell (à part les nombres et les chaînes, il n'y a pas beaucoup d'autres types à utiliser). Les chaînes peuvent utiliser des guillemets simples, des guillemets doubles ou aucun guillemet.

Guillemets simples

str='this is a string'

Restrictions sur les chaînes entre guillemets simples :

  • Tout caractère entre guillemets simples sera affiché littéralement, et les variables dans les chaînes entre guillemets simples ne sont pas développées ;
  • Un guillemet simple ne peut pas apparaître seul dans une chaîne entre guillemets simples (même si vous échappez le guillemet simple), mais ils peuvent apparaître par paires pour la concaténation de chaînes.

Guillemets doubles

Exemple

your_name="exemple"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

La sortie est :

Hello, I know you are "example"! 

Avantages des guillemets doubles :

  • Les variables peuvent être utilisées à l'intérieur des guillemets doubles
  • Les caractères d'échappement peuvent apparaître entre guillemets doubles

Concaténation de chaînes

Exemple

your_name="exemple"
# Concaténer à l'aide de guillemets doubles
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# Concaténer à l'aide de guillemets simples
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

La sortie est :

hello, example ! hello, example !
hello, example ! hello, ${your_name} !

Obtenir la longueur d'une chaîne

Exemple

string="abcd"
echo ${#string}   # Affiche 4

Lorsque la variable est une chaîne,${#string}est équivalent à${#string[0]}:

Exemple

string="abcd"
echo ${#string[0]}   # Affiche 4

Extraction de sous-chaînes

L'exemple suivant commence à partir du2caractère de la chaîne et commence à extraire4caractères :

Exemple

string="example is a great site"
echo ${string:1:4} # Affiche unoo

Remarque: la valeur d'index du premier caractère est0。

Recherche de sous-chaînes

Trouvez la position du caractèreiou deo(la lettre qui apparaît en premier est comptée) :

Exemple

string="example is a great site"
echo `expr index "$string" io`  # Affiche 4

Remarque :Dans le script ci-dessus,`il s'agit d'un backtick, pas d'une apostrophe simple', ne vous méprenez pas.


Tableaux Shell

bash prend en charge les tableaux à une dimension (ne prend pas en charge les tableaux multidimensionnels) et ne limite pas la taille du tableau.

Comme dans le langage C, les indices des éléments de tableau sont numérotés à partir de 0. Pour accéder à un élément dans un tableau, vous avez besoin d’un indice. L’indice peut être un entier ou une expression arithmétique, et sa valeur doit être supérieure ou égale à 0.

Définition des tableaux

Dans le Shell, les parenthèses sont utilisées pour représenter des tableaux, et les éléments du tableau sont séparés par l’"espace". La forme générale pour définir un tableau est :

数组名=(值1 值2 ... 值n)

Par exemple :

array_name=(value0 value1 value2 value3)

ou

array_name=(
value0
value1
value2
value3
)

Vous pouvez également définir séparément les différents éléments d’un tableau :

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

Il n’est pas nécessaire d’utiliser des indices consécutifs, il n’y a pas de limite sur la plage des indices.

Lecture des tableaux

Le format général pour lire la valeur d’un élément de tableau est :

${array name [subscript]}

Par exemple :

valuen=${array_name[n]}

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

echo ${array_name[@]}

Obtenir la longueur d'un tableau

La méthode pour obtenir la longueur d’un tableau est la même que pour obtenir la longueur d’une chaîne de caractères, par exemple :

Exemple

# Obtenir le nombre d’éléments du tableau
longueur=${#array_name[@]}
# Ou
longueur=${#array_name[*]}
# Obtenir la longueur d’un seul élément du tableau
longueur=${#array_name[n]}

Commentaires Shell

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

En ajoutant un signe## à chaque ligne pour définir des commentaires multilignes, comme ceci :

Exemple

#--------------------------------------------
# Ceci est un commentaire
# auteur: Exemple
# site:www.example.com
# slogan : Ce que vous apprenez n'est pas seulement de la technologie, mais aussi des rêves !
#--------------------------------------------
##### Début de la zone de configuration utilisateur #####
#
#
# Ajoutez ici les informations de description du script
#
#
##### Fin de la zone de configuration utilisateur #####

Si, pendant le développement, vous rencontrez un grand bloc de code qui doit être temporairement mis en commentaire puis décommenté plus tard, que pouvez-vous faire ?

Ajouter un symbole # à chaque ligne est trop laborieux. Vous pouvez entourer le bloc de code à commenter d'une paire d'accolades et le définir comme une fonction. Si la fonction n'est jamais appelée, le code ne s'exécutera pas, ce qui produit le même effet que la mise en commentaire.

Commentaires multilignes

Utilisation de here-documents

Les commentaires multilignes peuvent aussi utiliser le format suivant :

:<<EOF
Contenu du commentaire...
Contenu du commentaire...
Contenu du commentaire...
EOF

Dans l'exemple ci-dessus,:est une commande nulle utilisée pour exécuter le here-document suivant,<<'EOF'indique le début d'un here-document, COMMENT est l'identifiant du here-document, et le contenu entre ces deux identifiants sera traité comme un commentaire et ne sera pas exécuté.

D'autres symboles peuvent aussi être utilisés à la place de EOF :

Exemple

: <<'COMMENT'
Ceci est la partie commentée.
Il peut contenir plusieurs lignes.
COMMENT


:<<'
Contenu du commentaire...
Contenu du commentaire...
Contenu du commentaire...
'


:<<!
Contenu du commentaire...
Contenu du commentaire...
Contenu du commentaire...
!

Utiliser directement le signe :

Nous pouvons également utiliser la commande deux-points:, et utiliser des guillemets simples'pour encadrer plusieurs lignes de contenu. Comme les deux-points sont une commande vide, ces contenus ne seront pas exécutés.

Le format est :: + espace + guillemet simple。

Exemple

: '
Ceci est la partie commentée.
Il peut contenir plusieurs lignes.
'

Autres extensions