Les fonctions permettent de réutiliser du code et d'organiser vos scripts.
#!/bin/bash
# Définir une fonction
dire_bonjour() {
echo "Bonjour, $1 !"
}
# Appeler la fonction
dire_bonjour "Alice"
dire_bonjour "Bob"
# Fonction avec retour
calculer_somme() {
local a=$1
local b=$2
local resultat=$((a + b))
echo $resultat
}
somme=$(calculer_somme 5 3)
echo "La somme est : $somme"
# Fonction avec valeur de retour
verifier_fichier() {
if [ -f "$1" ]; then
return 0 # succès
else
return 1 # échec
fi
}
if verifier_fichier "config.txt"; then
echo "Fichier trouvé"
filocal pour déclarer des variables locales dans vos fonctions.
# Trouver des emails
grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' fichier.txt
# Trouver des numéros de téléphone
grep -E '[0-9]{2}[. -]?[0-9]{2}[. -]?[0-9]{2}[. -]?[0-9]{2}[. -]?[0-9]{2}' contacts.txt
# Trouver des URLs
grep -E 'https?://[^\s]+' fichier.txt
# Utiliser des groupes de capture
grep -E '(error|warning|critical)' logs.txt# Remplacer du texte
sed 's/ancien/nouveau/' fichier.txt
# Remplacer toutes les occurrences sur chaque ligne
sed 's/ancien/nouveau/g' fichier.txt
# Modifier le fichier directement
sed -i 's/ancien/nouveau/g' fichier.txt
# Supprimer des lignes
sed '3d' fichier.txt # Supprimer ligne 3
sed '/pattern/d' fichier.txt # Supprimer lignes contenant pattern
sed '1,5d' fichier.txt # Supprimer lignes 1 à 5
# Insérer du texte
sed '2i\Nouvelle ligne' fichier.txt # Insérer avant ligne 2
sed '2a\Nouvelle ligne' fichier.txt # Insérer après ligne 2# Afficher la première colonne
awk '{print $1}' fichier.txt
# Afficher plusieurs colonnes
awk '{print $1, $3}' fichier.txt
# Utiliser un délimiteur personnalisé
awk -F',' '{print $1, $2}' fichier.csv
# Conditions
awk '$3 > 100 {print $1, $3}' data.txt
# Calculer une somme
awk '{sum += $2} END {print sum}' nombres.txt
# Compter les lignes
awk 'END {print NR}' fichier.txt
# Script awk complexe
awk '
BEGIN { total = 0 }
{
if ($3 > 50) {
total += $3
count++
}
}
END {
print "Total:", total
print "Moyenne:", total/count
}
' data.txt# Lister tous les processus
ps aux
# Trouver un processus spécifique
ps aux | grep firefox
# Arbre des processus
pstree
# Processus en temps réel
top
# ou
htop
# Tuer un processus
kill PID
kill -9 PID # Force kill
# Tuer par nom
pkill firefox
killall firefox
# Exécuter en arrière-plan
./script.sh &
# Lister les jobs en cours
jobs
# Ramener un job au premier plan
fg %1
# Envoyer un job en arrière-plan
bg %1#!/bin/bash
# Substitution de commande
date_actuelle=$(date +%Y-%m-%d)
echo "Aujourd'hui : $date_actuelle"
# Ancienne syntaxe (à éviter)
nombre_fichiers=`ls | wc -l`
# Paramètres de script
echo "Nom du script : $0"
echo "Premier paramètre : $1"
echo "Deuxième paramètre : $2"
echo "Tous les paramètres : $@"
echo "Nombre de paramètres : $#"
# Valeurs par défaut
fichier=${1:-"default.txt"}
echo "Fichier : $fichier"
# Expansion de paramètres
nom="document.txt"
echo "${nom%.txt}.pdf" # document.pdf
echo "${nom#*.}" # txt
echo "${nom/doc/file}" # filement.txt#!/bin/bash
# Déclarer un array
fruits=("pomme" "banane" "orange")
# Accéder aux éléments
echo "${fruits[0]}" # pomme
echo "${fruits[@]}" # tous les éléments
echo "${#fruits[@]}" # nombre d'éléments
# Ajouter un élément
fruits+=("fraise")
# Boucler sur un array
for fruit in "${fruits[@]}"; do
echo "Fruit : $fruit"
done
# Array associatif (dictionnaire)
declare -A ages
ages["Alice"]=25
ages["Bob"]=30
echo "${ages["Alice"]}"#!/bin/bash
# Exit codes
commande
if [ $? -eq 0 ]; then
echo "Succès"
else
echo "Échec"
fi
# Arrêter en cas d'erreur
set -e
# Afficher les commandes exécutées
set -x
# Combiner les deux
set -ex
# Fonction de gestion d'erreur
error_exit() {
echo "Erreur : $1" >&2
exit 1
}
# Utilisation
[ -f "fichier.txt" ] || error_exit "Fichier manquant"
# Trap pour nettoyer avant de quitter
cleanup() {
echo "Nettoyage..."
rm -f temp_*
}
trap cleanup EXIT#!/bin/bash
# Script de sauvegarde
BACKUP_DIR="/backup"
SOURCE_DIR="/home/user/documents"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_FILE="backup_${DATE}.tar.gz"
# Vérifier que le dossier source existe
if [ ! -d "$SOURCE_DIR" ]; then
echo "Erreur : Le dossier source n'existe pas"
exit 1
fi
# Créer le dossier de backup s'il n'existe pas
mkdir -p "$BACKUP_DIR"
# Créer l'archive
echo "Création de la sauvegarde..."
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" "$SOURCE_DIR" 2>/dev/null
# Vérifier le succès
if [ $? -eq 0 ]; then
echo "✓ Sauvegarde créée : ${BACKUP_FILE}"
# Supprimer les backups de plus de 7 jours
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
echo "✓ Anciennes sauvegardes supprimées"
else
echo "✗ Erreur lors de la création de la sauvegarde"
exit 1
fi