use str use re fn -bytes {|begin size| str:from-codepoints (range $begin (+ $begin $size)) } fn -upper {|| -bytes 0x41 26 } fn -lower {|| -bytes 0x61 26 } fn -digit {|| -bytes 0x30 10 } fn -j {|@strings| str:join '' $strings } fn -alpha {|| -j (-upper) (-lower) } fn -alphanum {|| -j (-alpha) (-digit) } fn -random {|chars| var size = (count $chars) print $chars[(randint 0 $size)] } fn -is-int {|arg| re:match '^\d+$' $arg } fn -help {|| echo 'Génère une chaîne de caractères aléatoires' echo 'Usage: genstr [(-auldh)] [] []' echo '' echo 'Options:' echo ' -a Uniquement des lettres ([A-Za-z])' echo ' -u Uniquement des lettres majuscules ([A-Z])' echo ' -l Uniquement des lettres minuscules ([a-z])' echo ' -d Uniquement des chiffres ([0-9])' echo '' echo ' Liste de caractères possibles' echo ' Longueur de la chaîne (par défaut: 10)' echo '' echo 'Si aucune classe de caractères ou liste de caractères n’est fournie, utilise les caractères alphanumériques ([A-Za-z0-9]).' } edit:add-var genstr~ {|@args| var len chars h = 0 '' $false each {|e| if (or (eq $e -h) (eq $e --help)) { set h = $true -help break } elif (eq $e -a) { set chars = (-j $chars (-alpha)) } elif (eq $e -u) { set chars = (-j $chars (-upper)) } elif (eq $e -l) { set chars = (-j $chars (-lower)) } elif (eq $e -d) { set chars = (-j $chars (-digit)) } elif (and (-is-int $e) (> $e 0)) { set len = $e } else { set chars = (-j $chars $e) } } $args if (not $h) { if (== $len 0) { set len = 10 } if (eq $chars '') { set chars = (-alphanum) } set chars = [(str:split '' $chars)] range $len | each {|_| -random $chars } echo } }