Sous GNU/Linux, il existe une commande permettant de générer une séquence de nombre.
Il s'agit de la commande seq.
Cette commande s'utilise avec ou sans options et avec un nombre d'arguments allant de 1 à 3.
Un seul argument indique la fin de la séquence.
Deux arguments indiquent le début et la fin de la séquence.
Trois arguments indiquent le début, le pas et la fin de la séquence.
Générer une séquence simple jusqu'à 10 :
$ seq 10
1
2
3
4
5
6
7
8
9
10
Générer une séquence allant de 5 à 10 :
$ seq 5 10
5
6
7
8
9
10
Générer une séquence allant de 1 à 10 avec un pas de 2 :
$ seq 1 2 10
1
3
5
7
9
Par défaut, le séparateur est le retour chariot. L'option -s permet de modifier ce séparateur :
$ seq -s "-" 1 2 10
1-3-5-7-9
L'option -w permet d'avoir une séquence dont les nombres ont le même nombre de caractères :
$ seq -w 0 100
000
001
002
003
004
005
006
007
008
009
...
098
099
100
Parcourir une séquence avec une boucle for :
$ for i in $(seq 0 2 10); do echo $i; done
0
2
4
6
8
10
Il existe une autre méthode permettant de générer une séquence de nombres, ou de lettres :
$ echo {1..5}
1 2 3 4 5
$ echo {5..-4}
5 4 3 2 1 0 -1 -2 -3 -4
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo "Nombre #"{1..7},
Nombre #1, Nombre #2, Nombre #3, Nombre #4, Nombre #5, Nombre #6, Nombre #7,
$ echo {1..5}{x..z}" +" "..."
1x + 1y + 1z + 2x + 2y + 2z + 3x + 3y + 3z + 4x + 4y + 4z + 5x + 5y + 5z + ...
$ echo {001..090}
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090
$ for j in {1..10}; do echo $j; done
1
2
3
4
5
6
7
8
9
10
Générer toutes les combinaisons possibles pour les immatriculations automobiles françaises :
$ echo {A..Z}{A..Z}"-"{001..999}"-"{A..Z}{A..Z}
Attention. Cette commande génère un peu moins de 460 millions de données.
Initialisation du tableau A :
$ TAB_A=(25 46 98 3 9 10 21 15 6)
$ echo ${TAB_A[*]}
25 46 98 3 9 10 21 15 6
Initialisation du tableau B contenant les valeurs triées du tableau A :
$ TAB_B=($(echo ${TAB_A[*]} | sed 's/ /\n/g' | sort -n))
$ echo ${TAB_B[*]}
3 6 9 10 15 21 25 46 98
L'astuce consiste à afficher les valeurs du tableau A, puis substituer les espaces entre les différentes valeurs par des retours à la ligne et enfin utiliser la commande sort pour trier les valeurs.
Sous Debian/Ubuntu, il existe une commande qui permet de transformer la console en calculatrice.
Cette commande s'appelle bc.
Pour l'installer :
$ apt-get install bc
Utilisation (en rouge les résultats affichés) :
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5*8
40
15+9
24
45/8
5
Sans option, la commande bc exécute les calculs sans les décimales.
Pour afficher les décimales, il suffit d'utiliser l'option -l
$ bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5*8
40
9-5
4
6+8
14
40/5
8.00000000000000000000
45/8
5.62500000000000000000
Par défaut, l'option -l affiche 20 chiffres après la virgule.
Pour modifier cette valeur, il suffit d'utiliser la fonction scale.
$ bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=5
45/8
5.62500
Il est également possible d'utiliser des variables.
Calculer la valeur de pi :
pi est égal à 4 fois l'arc tangente de 1 radian.
J'ai récemment été confronté à l'erreur "integer expression expected" lors d'un test de deux entiers dans un de mes scripts.
Après plusieurs tests, j'ai finalement compris d'où venait mon erreur.
La variable que je testais ne contenait pas que des chiffres.
Elle n'était donc pas reconnue comme un entier.
Un simple "echo" de ma variable ne faisait pas apparaître tous les caractères de celle-ci.
Pour m'en apercevoir, j'ai dû utiliser la commande "od".
Exemple :
Je vais générer volontairement une erreur au niveau du contenu de la variable à tester en y insérant un caractère spécifique.
$ a=$(echo -e "20\a")
$ echo $a
20
La commande "echo" ne fait pas apparaitre le caractère spécifique contenu dans ma variable.
Je test si ma variable est égale à 20 (par exemple).
$ test $a -eq 20
-bash: test: 20: integer expression expected
J'ai bien une erreur car effectivement ma variable ne peut pas être considérée comme un entier à cause du caractère spécifique qu'elle contient.
La preuve avec la commande "od -c" ...
$ echo -n $a | od -c
0000000 2 0 \a
... le caractère spécifique "\a" apparait bien.
En conclusion, penser à bien vérifier le contenu des variables avec la commande "od" pour voir si des caractères spécifiques ne s'y sont pas insérés.