Documentation d'utilisation de Bash
Syntaxe de base
Les scripts Bash commencent généralement par une ligne shebang pour spécifier l'interpréteur :
#!/bin/bash
Les variables sont assignées sans espaces autour du signe =
:
nom_variable="valeur"
Pour accéder à la valeur d'une variable, utilisez le symbole $
:
echo $nom_variable
- Liste des variables système courantes
$(pwd)
: Le répertoire de travail actuel.$LOGNAME
: Nom de l'utilisateur connecté, resistant àsu
.$USER
: Nom de l'utilisateur courante, peut-être affecté parsu
.$HOME
: Répertoire personnel de l'utilisateur.$PATH
: Liste des répertoires où chercher les exécutables.$SHELL
: Chemin de l'interpréteur de commandes utilisé.$HOSTNAME
: Nom de l'hôte de la machine.$RANDOM
: Génère un nombre aléatoire.$?
: Code de retour de la dernière commande exécutée.- arguments passés au script
$#
: Nombre d'arguments passés au script.$0
: Nom du script en cours d'exécution.$@
: Tous les arguments passés au script.$1
,$2
, ... : Arguments individuels passés au script.
Gestion des sorties
Opérateur | Description |
---|---|
><fichier> |
Redirige la sortie standard vers un fichier |
2> |
Redirige les erreurs standard vers un fichier |
2>&1 |
Redirige les erreurs standard vers la sortie standard |
&> |
Redirige les sorties standard et les erreurs vers un fichier |
>> |
Ajoute la sortie standard à un fichier |
2>> |
Ajoute les erreurs standard à un fichier |
&>> |
Ajoute les sorties standard et les erreurs à un fichier |
Utilisez
/dev/null
, le trou noir de Linux, pour ignorer les sorties.
Tableaux
Description | Exemple de code |
---|---|
Définir un tableau | nom_tableau=(valeur1 valeur2 valeur3) |
Accéder à un élément (index 0) | echo ${nom_tableau[0]} |
Obtenir tous les éléments | echo ${nom_tableau[@]} |
Obtenir la longueur d'un tableau | echo ${#nom_tableau[@]} |
Dictionnaires (Tableaux associatifs)
Les dictionnaires (ou tableaux associatifs) en Bash permettent de stocker des paires clé-valeur. Vous devez déclarer le tableau comme associatif avant de l'utiliser :
declare -A nom_dict=(
[cle1]="valeur1"
[cle2]="valeur2"
)
Pour ajouter des paires clé-valeur au dictionnaire :
nom_dict[cle3]="valeur3"
nom_dict[cle4]="valeur4"
Pour accéder à une valeur par sa clé :
echo ${nom_dict[cle1]} # Affiche : valeur1
Pour obtenir toutes les clés du dictionnaire :
echo ${!nom_dict[@]} # Affiche : cle1 cle2 cle3 cle4
Pour obtenir toutes les valeurs du dictionnaire :
echo ${nom_dict[@]} # Affiche : valeur1 valeur2 valeur3 valeur4
Instructions conditionnelles
if, elif, else
L'instruction if
exécute du code conditionnellement :
if [ condition ] || [condition]; then
# code à exécuter si la condition est vraie
elif [ autre_condition1 ] && [ autre_condition2 ]; then
# code à exécuter si autre_condition est vraie
else
# code à exécuter si aucune condition n'est vraie
fi
Conditions courantes pour les instructions if
Voici quelques conditions courantes que vous pouvez utiliser dans les instructions if
:
Condition | Exemple de code |
---|---|
Vérifier si un répertoire existe | if [ -d repertoire ]; then |
Vérifier si un fichier existe | if [ -e fichier ]; then |
Vérifier si une chaîne est vide | if [ -z "$chaine" ]; then |
Vérifier si une chaîne n'est pas vide | if [ -n "$chaine" ]; then |
Comparer deux nombres | if [ "$nb1" -eq "$nb2" ]; then |
Vérifier si un nombre est supérieur | if [ "$nb1" -gt "$nb2" ]; then |
Vérifier si un nombre est inférieur | if [ "$nb1" -lt "$nb2" ]; then |
La commande précedent a terminé avec succes | if [ $? -eq 0 ]; then |
for pkg in "${packages[@]}"; do
if echo "$installed" | grep -q "$pkg"; then
read -p "Désinstallation de : $pkg?(o/n)" choice
if [ "$choice" = "o" ] || [ "$choice" = "O" ]; then
adb shell pm uninstall "$pkg" &>/dev/null
if adb shell pm uninstall "$pkg" &>/dev/null; then
echo "✅ $pkg est désinstallé."
elif adb shell pm uninstall --user 0 "$pkg" &>/dev/null; then
echo "✅ Scamsung/Google empêche le déinstallation complète de $pkg. Il sera désinstallé pour utilisateur 0 seulement."
elif adb shell pm disable-user --user 0 "$pkg" &>/dev/null; then
echo "✅ $pkg ne peut pas être désinstallé et plutôt désactivé."
else
echo " Malheureusement Scamsung/Google empêche le déinstallation/désactivition de $pkg"
fi
fi
fi
done
Instructions case
L'instruction case
permet d'exécuter du code en fonction d'une correspondance de modèle. Elle est utile lorsque vous avez plusieurs conditions à vérifier.
Exemple :
read -p "Entrez un nombre entre 1 et 3 : " nombre
case $nombre in
1)
echo "Vous avez entré un."
;;
2)
echo "Vous avez entré deux."
;;
3)
echo "Vous avez entré trois."
;;
*)
echo "Nombre invalide."
;;
esac
Boucles
Boucle for
La boucle for
itère sur une liste d'éléments :
for <variable> in <groupe>*; do
<commandes>
done
Exemples :
for fichier in *.txt *.png; do
# commandes à exécuter pour chaque fichier .txt et .png
done
for i in {1..5}; do
echo "Nombre : $i"
done
fruits=("pomme" "banane" "cerise")
legumes=("concombre" "aubergine" "courgette")
for frais in "${fruits[@]}" "${legumes[@]}"; do
echo "Produit frais : $frais"
done
Boucle while
La boucle while
exécute du code tant qu'une condition est vraie :
while [ condition ]; do
# code à exécuter
done
Exemple :
compteur=1
while [ $compteur -le 5 ]; do
echo "compteur : $compteur"
((compteur++)) # Incrémentation
done
Ceci est essentiellement une boucle for
avec un compteur personnalisé.
ligne_compteur=1
while IFS= read -r ligne; do
echo "Ligne $ligne_compteur : $ligne"
((ligne_compteur++))
done < fichier.txt
Cette boucle while
lit fichier.txt
ligne par ligne.
fichier.txt
est la cible de la boucle, alimentée par <
.
IFS=
n'est pas une affectation de variable. Cela spécifie que les séparateurs de champs internes (\s, \t, etc.) ne doivent pas être ignorés.
read ligne
lit un fichier ligne par ligne et stocke chaque ligne temporairement comme $ligne
. -r
spécifie que les \
doivent être interprétés littéralement et non comme des caractères d'échappement.
Sorties
# Rediriger la sortie standard vers un fichier
commande > sortie.txt
# Rediriger les erreurs standard vers un fichier
commande 2> erreurs.txt
# Rediriger à la fois la sortie standard et les erreurs standard vers le même fichier
commande &> sortie_et_erreurs.txt
# Ajouter la sortie standard à un fichier
commande >> sortie.txt
# Ajouter les erreurs standard à un fichier
commande 2>> erreurs.txt
# Ajouter à la fois la sortie standard et les erreurs standard au même fichier
commande &>> sortie_et_erreurs.txt
sudo ls > /root/fichier #❌ C'est sudo qui est redirigé
Functions simple
echo()
Option | Description |
---|---|
-n |
Supprime le saut de ligne à la fin de la sortie. |
-e |
Interprète les séquences d'échappement comme \n , \t , etc. |
eval()
eval (ssh-agent -s)
read (input utilisateur)
read -p "Do you want to install $app? (y/n) " choice
if [ "$choice" = "y" ]; then
install+=("$app")
fi
Plus
Pour plus, rendez-vous sur Linux Terminal
Member discussion