Personal tools
Document Actions

Chaine aleatoire script SHELL

by Rakotomandimby Mihamina last modified 2008-07-20 10:34

Générer une chaine de charactère de longueur prédéfine en pur script Shell.

En toute rigueur, les résultats obtenus grace à la méthode décrite sont des résultat pseudo aléatoires.
En effet, nous nous baserons sur la variable $RANDOM, qui est par définition pseudo-aléatoire.
Quand une portion de texte est un lien, nous vous encourageons à le suivre, car il mène vers une implémentation possible de ce qui est expliqué.

Algorithme

Nous allons partir d'une chaine vide, qui sera la chaine resultat.
Pour générer une chaine de vingt caractères aléatoires, nous allons répéter vingt fois la génération d'un caractère aléatoire.
A chaque génération, nous allonsstocker le caractère obtenu à la fin de la chaine resultat.

Nous voyons là qu'au bout de vingt itérations, nous aurons une chaine de vingt caractères.

Implémentation

Shell: BASH

Nous allons utiliser une syntaxe BASH, qui peut ne pas etre supportée par les "simples" Shells
Pour cela, veiller à ce que le "shebang" soit bien sur BASH.

Modèle: seulement des lettres

Il nous faut savoir quels caractères prendre et accepter dans notre chaine.
Un bon moyen est de lister dans une chaine que nous allons appeler "chaine modèle" les caractères aceptés.

Itération: boucle "for"

Pour répéter un nombre de fois bien défini la même chose, la boucle FOR est l'outil adapté.
Juste pour voir comment on opère la concaténation, nous pouvons faire un test.
Remarquer que pour générer une "séquence de 20", nous n'avons pas encore utilisé le "modèle", nous nous sommes contenté de générer vingt "X".

Manipulation de chaine: modificateurs

Prenons maintenant à part la chaine modèle ($M).
Il est possible d'en obtenir la longueur, et donc d'obtenir un nombre aléatoire compris entre zéro et ladite longueur.
Si, dans la chaine M, à partir du x-ème caractère on veut y caractères, alors cela s'écrit: ${M:x:y}.
Dans notre cas, nous souhaitons que x soit aléatoire mais ne dépassant pas la longueur de M et que y soit à 1.

Au point ou nous en sommes, nous savons générer une lettre aléatoire.
Il reste à mettre le tout dans la boucle FOR, pour obtenir les vingt caractères aléatoires.