Voici un script qui permet de calculer le PGCD et le PPCM d'au moins deux nombres.
$ nl scripts/pgcd.sh
1 #!/bin/bash
2 # Ce script permet de calculer le PGCD et le PPCM
3 # d'au moins deux nombres passés en argument.
4 #
5 # Il utilise quelques commandes intéressantes.
7 # Fonction permettant de tester si les arguments
8 # passés au script sont bien numériques et supérieur à 0
9 function isNumeric() {
10 for arg in $@; do
11 if ! expr "$arg" : '-\{0,1\}[0-9]\{1,\}$' >/dev/null; then
12 echo "ERREUR !!! $arg n'est pas un nombre."
13 exit 1
14 else
15 if expr "$arg" = 0 >/dev/null; then
16 echo "ERREUR !!! Saisir un nombre superieur a 0"
17 exit 1
18 fi
19 fi
20 done
21 }
22 # On initialise la variable PATH
23 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
24 # On test si le nombre d'arguments passés
25 # au script est bien supérieur ou égal à 2
26 if [ $# -lt 2 ]; then
27 echo "Usage: `basename $0` premier_nombre deuxieme-nombre etc etc ..."
28 exit 1
29 fi
30 # On exécute la fonction isNumeric en lui passant en argument
31 # tous les arguments passés au script
32 isNumeric $@
33 # Fonction permettant de calculer le PGCD
34 # Cette fonction, je l'ai trouvé sur le site :
36 function pgcd() {
37 dividende=$1
38 diviseur=$2
39 reste=1
40 until [ "$reste" -eq 0 ]; do
41 let "reste=$dividende%$diviseur"
42 dividende=$diviseur
43 diviseur=$reste
44 done
45 }
46 NBR1=$1
47 PPCM=$1
48 VAR="($1"
49 # On décale les arguments du scripts vers la gauche
50 shift
51 # On calcul le PPCM et le PGDC
52 # de tous les nombres passés au script
53 until [ "$#" -eq 0 ]; do
54 NBR2=$1
55 VAR="$VAR,$1"
56 shift
57 pgcd $PPCM $NBR2
58 let "PPCM=$PPCM*$NBR2/$dividende"
59 pgcd $NBR1 $NBR2
60 NBR1=$dividende
61 done
62 VAR="$VAR)"
63 # On affiche le résultat
64 echo; echo "PGCD $VAR = $dividende"; echo
65 echo "PPCM $VAR = $PPCM"; echo
66 exit 0