# Comment écrire des scripts shell
Table of Contents
Les scripts shell permettent d’exploiter le shell comme un langage de programmation déjà préinstallé sur la plupart des distributions Linux. Ils vous permettront de créer des automatisations basiques.
Configuration de base
- Créer un fichier
touch my_script.shnano my_script.sh # Créer et ouvrir le fichier dans l'éditeur de texte nano- Ajouter un shebang en haut du fichier, puis les instructions.
#!/usr/bin/env bashecho "Hello, World!"- Rendre le fichier exécutable
chmod +x my_script.sh- Exécuter le script
./my_script.shLangage de script
Variables
Les variables en bash sont précédées d’un préfixe $. Par exemple :
name="John"echo "Hello, $name!"Paramètres
Les paramètres peuvent être passés à un script bash lors de l’exécution.
./my_script.sh JohnLa valeur des paramètres peut être accédée en utilisant $1, $2, etc. :
#!/usr/bin/env bashecho "Hello, $1!"Sortie : Hello, John!
Tu peux aussi utiliser la commande read pour obtenir une saisie utilisateur et la stocker dans une variable.
#!/usr/bin/env bashecho "Enter your name:"read nameecho "Hello, $name!"Conditions
#!/usr/bin/env bashif [ "$1" == "John" ]; then echo "Hello, John!"else echo "Hello, stranger!"fiBoucles
for i in {1..5}; do ## On peut éviter le ; avec une nouvelle ligne comme dans l'exemple suivant echo "Iteration $i"doneSortie : Iteration 1 Sortie : Iteration 2 …
for nom in Alice Bob Charlie do echo "Bonjour, $nom!" doneSortie : Bonjour, Alice! Sortie : Bonjour, Bob! Sortie : Bonjour, Charlie!
compteur=1while [ $compteur -le 2 ] do echo "Compteur: $compteur" ((compteur++)) doneSortie : Compteur: 1 Sortie : Compteur: 2
Exemples
Vérifier si une liste d’entrées est un fichier ou un répertoire
#!/usr/bin/env bashif [[ "$#" -eq 0 ]]; then echo "Usage: ./checkType.sh <path>" exit 1fi
for arg in "$@"; do if [ -f "$arg" ]; then echo "$arg is a file" elif [ -d "$arg" ]; then echo "$arg is a directory" else echo "$arg does not exist or is neither a file nor a folder" fidoneChanger le propriétaire d’une liste de fichiers
#!/usr/bin/env bash
echo "Files to update :"read files
echo "New owner and group :"read new_owner
for file in $files; do
if [[ ! -f "$file" ]]; then echo "$file is not a file" continue fi current_owner=$(ls -l "$file" | awk '{print $3}')
if [[ "$current_owner" != "$new_owner" ]]; then sudo chown "$new_owner" "$file" echo "$file owner $current_owner changed to $new_owner" fidone