Rendre ses scripts acces­sibles de n’im­porte où

Tous ceux qui ont déjà créé des scripts Bash savent combien il est éner­vant de devoir soit se placer dans le dossier conte­nant le script en ques­tion, soit écrire le chemin complet vers le script pour l’exé­cu­ter. Or il est possible d’exé­cu­ter ses scripts depuis n’im­porte quel empla­ce­ment dans l’ar­bo­res­cence, simple­ment en disant à GNU/Linux où il doit cher­cher.

Un peu de théo­rie…

Afin d’exé­cu­ter des scripts et a fortiori des programmes, GNU/Linux regarde des dossiers spéci­fiques pour trou­ver les exécu­tables. Ces dossiers sont conte­nus dans la variable d’en­vi­ron­ne­ment $PATH. Afin d’af­fi­cher cette variable et savoir quels sont les dossiers parcou­rus, tapez la commande suivant dans un termi­nal :

$ echo $PATH

Les dossiers parcou­rus sont sépa­rés par le carac­tère “:”. Si vous voulez les voir s’af­fi­cher avec un dossier par ligne, vous pouvez écrire la commande suivante :

$ echo $PATH | sed -e "s/:/\n/g"

… et on passe à la pratique

Pour ajou­ter votre (vos) propre(s) dossier(s) à cette liste, il vous faut éditer votre fichier .bashrc. Ajou­tez-y à la fin une des deux lignes suivantes :

  • si vous voulez ajou­ter un seul dossier :
export PATH=$PATH:lien_absolu_vers_votre_dossier
  • si vous voulez en ajou­ter plusieurs, il suffit de sépa­rer les dossier par un “:” de la manière suivante :
export PATH=$PATH:lien_absolu_vers_votre_dossier_1:lien_absolu_vers_votre_dossier_2

Vous auriez pu écrire ces lignes direc­te­ment dans votre termi­nal, mais cela n’au­rait fonc­tionné que pour la session de ce termi­nal. Pensez à relan­cer une instance de termi­nal pour les chan­ge­ments soient pris en compte. À présent, vous pouvez appe­ler vos programmes et scripts shell où que vous vous trou­viez dans l’ar­bo­res­cence de votre ordi­na­teur.

Calcu­lez l’âge du capi­taine

Voici un petit script bash que j’ai écrit (avec un peu d’aide, je l’avoue), qui n’a aucune utilité, si ce n’est calcu­ler l’âge de quelqu’un. Il n’uti­lise que des fonc­tions de base. L’uti­li­sa­tion est simple, lancez le script et suivez les indi­ca­tions de votre termi­nal

#!/bin/bash
JourActu=`date +%-d`
MoisActu=`date +%-m`
AnneeActu=`date +%Y`

echo "Nous sommes bien le $JourActu/$MoisActu/$AnneeActu."

read -p 'Entrez votre jour de naissance : ' JourNaiss
read -p 'Entrez votre mois de naissance : ' MoisNaiss
read -p 'Entrez votre année de naissance : ' AnneeNaiss

echo "Vous êtes donc né(e) le $JourNaiss/$MoisNaiss/$AnneeNaiss."

let "AnneeReel = AnneeActu - AnneeNaiss"

if [ $MoisNaiss -gt $MoisActu ] || ( [ $MoisNaiss -eq $MoisActu ] && [ $JourNaiss -gt $JourActu ] )
then
let "AnneeReel = AnneeReel - 1"
fi
echo "Vous avez $AnneeReel ans révolus."

let "AnneeAnniv = AnneeNaiss + AnneeReel"
echo "Votre dernier anniversaire était le $JourNaiss/$MoisNaiss/$AnneeAnniv."

if [ $AnneeAnniv -eq $AnneeActu ]
then
let "MoisReel = MoisActu - MoisNaiss"
else
let "MoisReel = 12 + MoisActu - MoisNaiss"
fi

if [ $JourNaiss -gt $JourActu ] 
then
let "MoisReel = MoisReel - 1"
fi

echo "Vous avez $AnneeReel ans et $MoisReel mois."

if [ $JourNaiss -le $JourActu ]
then
let "JourReel = JourActu - JourNaiss"
else
case $MoisActu in
1 | 2 | 4 | 6 | 8 | 9 | 11)
let "JourReel = 31 - JourNaiss + JourActu"
;;
5 | 7 | 10 | 12)
let "JourReel = 30 - JourNaiss + JourActu"
;;
3)
if [ $(( $AnneeActu % 4 )) -eq 0 ] &&
( [ $(( $AnneeActu % 100 )) -ne 0 ] || [ $(( $AnneeActu % 400 )) -eq 0 ] )
then let " JourReel = 29 - JourNaiss + JourActu"
else let " JourReel = 28 - JourNaiss + JourActu"
fi
;;
esac
fi

echo "Vous avez $AnneeReel ans, $MoisReel mois et $JourReel jours."