Mon mémento sur Bash

J'utilise cette page comme pense-bête sur la programmation Bash. J'y note mes trouvailles, astuces et autres petits bouts de scripts. C'est avant tout un aide-mémoire qu'autre chose. Mais si cela peut aider d'autres personnes, c'est bien aussi.

L'ensemble des commandes qui seront présentées ci-dessous ont été réalisées sur des systèmes Debian/Ubuntu.

Je compléterai cette page au fur et à mesure, n'hésitez pas à passer régulièrement sur cette page.

Compter le nombre de lignes d'un fichier

Pour compter le nombre de lignes d'un fichier, il y a plusieurs méthodes :

wc -l nom_fichier

Cela affiche le nombre de ligne mais aussi le nom du fichier.

cat nom_fichier | wc -l

Ici nous avons le résultat souhaité.

Autre méthode

sed -n '$=' nom_fichier
</bash>
 
ou encore
<code bash>
awk 'END {print NR}' nom_fichier

peut aussi faire l'affaire.

Récupérer dans une variable le code retour d'une commande

Le code de retour d'une commande est un mécanisme fourni par le shell Linux. Il signale à l'utilisateur si l'exécution de la commande s'est déroulée correctement ou bien s'il y a eu un problème. Le code de retour est un entier compris entre 0 et 255.

Par convention, un code retour égal à 0 signifie que l'exécution de la commande s'est déroulé sans rencontrer d'erreur.

Nous allons voir comment récupérer ce code erreur et l'insérer dans une variable pour un traitement ultérieur. Dans notre exemple, nous allons vérifier si le service fail2ban a bien démarré.

#!/bin/bash
service fail2ban status > /dev/null   
resultat=$?     // Nous utilisons le caractère spécial
echo ${resultat}

Explication du code :

  • Nous récupérons le statut du service fail2ban, avec la commande service. /dev/null permet de ne pas afficher le résultat de la commande.
  • Le paramètre spécial ? du shell contient le code de retour de la dernière commande exécutée. Ici nous mettons ce dode retour dans la variable resultat.
  • Nous affichons le contenu de la variable resultat avec la commande echo.

Une autre méthode fonctionnant sous Debian 9 :

systemctl status fail2ban.service 1>/dev/null 2>&1; resultat=$?
echo ${sresultat}

Les deux exemples ci-dessus afficheront 0 si fail2ban fonctionne. Et 3 si fail2ban est à l'arrêt.

Notes de version

  • [10/06/2018] : Article initial
  • [20/06/2018] : Ajout de "Récupérer dans une variable le code retour d'une commande"

Auteurs et sources