Shell

📚 Débutant

Redirections et Pipes

Les redirections permettent de diriger les entrées/sorties des commandes, et les pipes de chaîner les commandes.

Redirections de base

# Rediriger la sortie vers un fichier (écrase le contenu) echo "Bonjour" > fichier.txt # Ajouter à la fin d'un fichier echo "Nouvelle ligne" >> fichier.txt # Rediriger les erreurs ls dossier_inexistant 2> erreurs.txt # Rediriger sortie et erreurs commande > sortie.txt 2>&1 # Rediriger l'entrée sort < liste.txt

Les Pipes (|)

Les pipes permettent de connecter la sortie d'une commande à l'entrée d'une autre :

# Compter le nombre de fichiers ls | wc -l # Chercher un processus ps aux | grep firefox # Trier et afficher les 5 premiers cat notes.txt | sort | head -5 # Chaîner plusieurs commandes cat fichier.txt | grep "erreur" | sort | uniq

Recherche de fichiers

La commande find

# Trouver tous les fichiers .txt find . -name "*.txt" # Trouver les fichiers modifiés dans les 7 derniers jours find . -mtime -7 # Trouver les fichiers plus grands que 10MB find . -size +10M # Trouver et supprimer find . -name "*.tmp" -delete # Trouver et exécuter une commande find . -name "*.log" -exec cat {} \;

La commande grep

# Chercher un mot dans un fichier grep "erreur" fichier.log # Chercher récursivement dans tous les fichiers grep -r "TODO" . # Ignorer la casse grep -i "error" fichier.log # Afficher le numéro de ligne grep -n "function" script.sh # Chercher avec regex grep -E "[0-9]{3}-[0-9]{4}" contacts.txt

Variables et environnement

Variables

# Créer une variable nom="Alice" # Utiliser une variable echo "Bonjour $nom" echo "Bonjour ${nom}!" # Variables d'environnement export MA_VARIABLE="valeur" # Afficher toutes les variables d'environnement env # Afficher une variable spécifique echo $PATH echo $HOME echo $USER
💡 Astuce : Pas d'espace autour du = lors de la déclaration d'une variable !

Permissions de fichiers

Comprendre les permissions

Les permissions se lisent ainsi : rwxrwxrwx

Les 3 groupes représentent : propriétaire, groupe, autres

Modifier les permissions

# Avec chmod en notation symbolique chmod u+x script.sh # Ajoute exécution pour le propriétaire chmod g-w fichier.txt # Retire écriture pour le groupe chmod o+r document.pdf # Ajoute lecture pour les autres chmod a+x programme # Ajoute exécution pour tous # Avec chmod en notation octale chmod 755 script.sh # rwxr-xr-x chmod 644 fichier.txt # rw-r--r-- chmod 600 secret.txt # rw------- # Changer le propriétaire chown utilisateur fichier.txt chown utilisateur:groupe fichier.txt

Scripts Shell basiques

Votre premier script

#!/bin/bash # Mon premier script echo "Bonjour ! Quel est votre nom ?" read nom echo "Enchanté, $nom !" # Afficher la date echo "Nous sommes le $(date +%d/%m/%Y)"

Conditions

#!/bin/bash if [ -f "fichier.txt" ]; then echo "Le fichier existe" else echo "Le fichier n'existe pas" fi # Test numérique age=25 if [ $age -ge 18 ]; then echo "Majeur" fi # Test de chaîne if [ "$nom" = "Alice" ]; then echo "Bonjour Alice !" fi
💡 Opérateurs de test :
  • -f : fichier existe
  • -d : dossier existe
  • -eq : égal (nombres)
  • -ne : différent
  • -gt : plus grand que
  • -lt : plus petit que

Boucles simples

#!/bin/bash # Boucle for sur une liste for fruit in pomme banane orange; do echo "J'aime les ${fruit}s" done # Boucle for sur des nombres for i in {1..5}; do echo "Itération $i" done # Boucle for sur des fichiers for fichier in *.txt; do echo "Traitement de $fichier" done # Boucle while compteur=1 while [ $compteur -le 5 ]; do echo "Compteur: $compteur" ((compteur++)) done

Exercices pratiques

  1. Créez un script qui liste tous les fichiers .txt et compte combien il y en a
  2. Utilisez grep pour trouver toutes les lignes contenant "error" dans un fichier de logs
  3. Créez un script qui demande un nom et affiche "Bonjour [nom] !"
  4. Faites un script avec une boucle qui crée 10 fichiers nommés file1.txt, file2.txt, etc.
  5. Modifiez les permissions d'un script pour le rendre exécutable