#1 Le 14/05/2014, à 12:34
- el.karima
[Résolu][Script]Utilisation de $RANDOM
Bonjour,
Je veux créer un script en sh qui génère des nombres aléatoires, et je me demande si je peux utiliser $RANDOM, parce que j'ai déjà lu sur internet que cette fonction est une fonction interne bash, et je sais pas vraiment si je peux l'utiliser même en sh.
Même si je pense que la question est assez bête, mais est-ce qu'il y a une personne qui peut me répondre?
[Modération]Remplacement du titre par un plus explicite.
Dernière modification par el.karima (Le 14/05/2014, à 20:11)
Hors ligne
#2 Le 14/05/2014, à 13:15
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
bonjour,
il y a un prog dans linux /dev/urandom
étant donné que c'est un programme normalement il ne devrait pas avoir de problème pour l'usage de sh ou de bash
< /dev/urandom tr -dc 0-9 | head -c10;
on peut rajouter un echo a la fin pour le passage a la ligne
sinon dans un script
nombre=$(< /dev/urandom tr -dc 0-9 | head -c10)
echo $nombre
le head -c te permet de choisir le nombre de chiffre aléatoire que te renverra la commande
EDIT
pour répondre a ta question oui, le $RANDOM est propre a bash, et ne renvois donc qu'une variable vide dans sh,
c'est pour cela je penses qu'a été implanté les programles /dev/random et /dev/urandom dans le système pour etre universelle
Dernière modification par casperfr (Le 14/05/2014, à 13:19)
Hors ligne
#3 Le 14/05/2014, à 13:34
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
bonjour,
il y a un prog dans linux /dev/urandom
étant donné que c'est un programme normalement il ne devrait pas avoir de problème pour l'usage de sh ou de bash< /dev/urandom tr -dc 0-9 | head -c10;
on peut rajouter un echo a la fin pour le passage a la ligne
sinon dans un scriptnombre=$(< /dev/urandom tr -dc 0-9 | head -c10) echo $nombre
le head -c te permet de choisir le nombre de chiffre aléatoire que te renverra la commande
EDIT
pour répondre a ta question oui, le $RANDOM est propre a bash, et ne renvois donc qu'une variable vide dans sh,
c'est pour cela je penses qu'a été implanté les programles /dev/random et /dev/urandom dans le système pour etre universelle
Parfait, merci beaucoup, ça va vraiment m'aider !
Et si j'ai bien compris, si je veux que le nombre retourné soit composé de deux chiffres il suffit de remplacer 10 par 2. Mais si veux que le nombre retourné soit compris entre 0 et 32 , qu'est ce que je dois rajouter à la ligne de commande?
Hors ligne
#4 Le 14/05/2014, à 14:02
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
c'est bien cela,
en faite, le programme urandom te renvois des caractere alphanumerique (la table ASCII en faite je crois) je dirait de maniere infini (mais je n'ai jamais essayé) donc dans la commande "tr -dc 0-9" on lui dis de ne concervé que les chiffres de 0 a 9 (tu peux choisir ce que tu concerve donc)
on peut par exemple choisir d'affiché tous les caracteres alpha numérique
tr -cd a-zA-Z0-9 < /dev/urandom | head -c 12 ; echo ""
(j'ai délibérément changé la position de tr pour te montré que la commande peut varié et on obtient le meme résultat)
on peut aussi faire des caractere particuluer
et on précise le nombre de carractere qui nous interresse que l'on veux retourné avec head on choisi le début du retour de la commande et -c le nombre de caractere
donc il n'est pas simple de choisir les limittes basses et haute avec ce genre de commande, mais je suppose que cela est possible avec un peut de réflexion
exemple si on peut commencé a compté a 333 par exemple il suffit de rajouter 333 au nombre obtenu psuique théoriquement on peut obtenir le 0 par le biais de cette commande,
pour la limitte haute, il me faut un peut de réflexion je dois dire
Hors ligne
#5 Le 14/05/2014, à 14:04
- Filador
Re : [Résolu][Script]Utilisation de $RANDOM
Bonjour,
Mais si veux que le nombre retourné soit compris entre 0 et 32 , qu'est ce que je dois rajouter à la ligne de commande?
Pour générer un nombre entre deux valeurs :
echo $((RANDOM%32))
Si tu veux plus de précision, je suis tombé sur cette documentation :
http://hamador.free.fr/tuto_bash/ch09s06.html (exemple 9.26.)
Cordialement,
Filador
Hors ligne
#6 Le 14/05/2014, à 15:13
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
Bonjour filador,
le problème qui se pose ici n'est pas la création d'un nombre aléatoire mais le shell qui propose l'obtention de ce nombre,
tu as parfaitement raison pour l'usage de random dans ta proposition,
mais comme dis dans le 1er post, random est 'exclusif' a bash et ne fonctionne pas avec sh,
si tu essais ton exemple
fichier nombre.sh
echo $((RANDOM%32))
et quand tu l'execute
server@Server-Web:~$ bash nombre.sh
29
server@Server-Web:~$ sh nombre.sh
0
c'est pour cela que j'ai proposé quelque chose qui fonctionne dans les deux cas
fichier nombre.sh
tr -cd 0-9 < /dev/urandom | head -c 12 ; echo ""
et quand tu l'execute
server@Server-Web:~$ bash nombre.sh
829414284016
server@Server-Web:~$ sh nombre.sh
880997548488
Dernière modification par casperfr (Le 14/05/2014, à 15:14)
Hors ligne
#7 Le 14/05/2014, à 15:33
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
#casperfr
parfait j'ai compris maintenant, merci beaucoup,
mais j'ai une dernière question si par exemple je veux exploiter le résultat de cette ligne de commande pour couper des fichiers dans des différents répertoires d'une façon aléatoire (sans changer leurs noms par des chiffres), est ce que c'est possible?
#Filador
Merci beaucoup, mais #casperfr vient me dire que c'est impossible tant que je travaille avec le sh et non pas le bash
Hors ligne
#8 Le 14/05/2014, à 15:43
- Filador
Re : [Résolu][Script]Utilisation de $RANDOM
Ah très bien désolé, j'ai lu un peu trop vite le post... désolé.
Hors ligne
#9 Le 14/05/2014, à 15:47
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
j'ai pas bien compris ta deuxieme question,
tu veux coupé le fichier,
mais tu veux coupé sont contenu ou le nom de ce fichier
parce que tu as différente commande et chacune fonctionne un peut différement,
explique moi ce que tu veux faire que je puisse t'aidé au mieux
Hors ligne
#10 Le 14/05/2014, à 15:58
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
D'accord
L'idée est la suivante:
j'ai un ensemble des images que je veux les déplacer l'une après l'autre dans des différents répertoires d'une façon aléatoire à condition qu'une unique image soit déplacée dans un répertoire différent (je peux pas avoir deux images dans le même répertoire qui porte le même nom par exemple: image_00.jpeg et image_01.jpeg ne doivent plus être dans le même répertoire) .
j'espère que j'ai bien expliqué l'idée, merci d'avance!!
Hors ligne
#11 Le 14/05/2014, à 16:05
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
donc ce que j'ai compris,
tu as un dossiers, a l'interrieur de ce dossier ce trouve des images
ces images on des nom de la forme image_xx.jpeg
et tu veux pouvoir déplacer ces fichiers de maniere aléatoire dans d'autre différent dossier
si c'est image sont dans un seul et meme dossier elle porte donc tous des noms différent mais j'ai peut etre mal compris ce que tu voulais me dire
Hors ligne
#12 Le 14/05/2014, à 16:18
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
donc ce que j'ai compris,
tu as un dossiers, a l'interrieur de ce dossier ce trouve des images
ces images on des nom de la forme image_xx.jpeg
et tu veux pouvoir déplacer ces fichiers de maniere aléatoire dans d'autre différent dossier
Oui exactement!
si c'est image sont dans un seul et meme dossier elle porte donc tous des noms différent mais j'ai peut etre mal compris ce que tu voulais me dire
Non, c'est pas ça malheureusement j'ai mal expliqué l'idée
Normalement quand je vais déplacer les images, chaque image sera déplacée vers un répertoire.
càd que chaque répertoire doit contenir une seule image qui porte le nom image_xx.jpeg, et si le nombre des répertoires est insuffisant je créerai autres..
Hors ligne
#13 Le 14/05/2014, à 16:32
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
ok je commence a mieux comprendre ton besoin,
récapitulon,
tu as tout plein d'image, c'est image on un nom,
tu veux que ces images soit rangé dans un dossier, chaque dossier ne contiendra qu'une seule image,
il y aura donc autant de dossier que d'image,
le nom de ce dossier sera le meme que celui de l'image qu'il contient,
ce nom sera aléatoire pour évité que deux dossier porte le meme nom,
est ce que c'est ça que tu as besoin ?
Hors ligne
#14 Le 14/05/2014, à 16:45
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
le nom de ce dossier sera le meme que celui de l'image qu'il contient,
ce nom sera aléatoire pour évité que deux dossier porte le meme nom,est ce que c'est ça que tu as besoin ?
En fin t as en gros au modo compris l'essentiel
Le nom du dossier pourra être différent du nom de l'image c'est pas ça le problème
ce que je cherche c'est de déplacer les images aléatoirement dans les dossiers qui peuvent êtres déjà existés sinon on les crée
et comme j'ai déjà dit une image par dossier!!
Hors ligne
#15 Le 14/05/2014, à 17:19
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
excuse moi je reviens un peut plus tard pour continué sur ton problème,
je donnes un court et je reviens
Hors ligne
#16 Le 14/05/2014, à 17:22
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
D'accord merci beaucoup
Hors ligne
#17 Le 14/05/2014, à 18:21
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
me voila de retour,
alors si je t'ai posé toutes ces question c'est parce que s'il faut créé des dossiers on utilisera une méthode,
si on doit le déplacer dans des dossiers existant on utilisera une autre méthode,
donc si on doit mélangé les deux c'est plus compliquer,
en soit le déplacement de fichier dans des dossiers ne pause aucun problème c'est qu'il faut faire la liste de ces dossiers (via une liste) pour pouvoir les déplacer,
si on doit créé un dossier pas besoin de connaitre le dossier préalablement.
question,
les dossier existant déja, peuvent-il déja contenir une image ou sont il tous vide ?
je dirais que sinon, voila ce que l'on fait,
on déplace chaque image dans un dossier que l'on créé, ce dossier sera nommé de manière aléatoire, ce qui fait que on aura pas de déplacement des images de manière aléatoire comme ce que tu voulais , mais le nom des dossier étant eux aléatoire, si par exemple le classement par ordre alphabétiqe de ces dossiers te donnera un ordre de dossier parfaitement aléatoire et donc si j'ai compris le résultat aléatoire que tu cherche a obtenir
Hors ligne
#18 Le 14/05/2014, à 18:33
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
les dossier existant déja, peuvent-il déja contenir une image ou sont il tous vide ?
Oui ils peuvent contenir un fichier texte, un autre répertoire, une image ou peu importe, à condition que cette image ne sera pas une image de la liste des images à déplacer.
Hors ligne
#19 Le 14/05/2014, à 18:37
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
ok,
et que penses tu de mon idée de créé des nom alléatoire au dossier, plutot qu'un déplacement aléatoire
les dossiers extistant déja pourrait etre renommer de cette maniere,
on compte le nombre d'image a déplacer,
on compte le nombre de dossier,
on adapte le nombre de dossier (si il y a plus d'image que de dossier)
on vérifie la présence d'image dans les dossier existant pour savoir si elle n'existe pas déja dans la liste d'image a déplacer, et si c'est le cas, on la supprime des images a déplacer
on effectue le déplacement de ces images dans les dossiers (sans ordre aléatoire)
ensuite on renomme les dossiers aléatoirement pour que tu obtiennes ton résultat aléatoire.
Hors ligne
#20 Le 14/05/2014, à 18:47
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
oui c'est ça parfait!
Mais comment peut-on renommer les dossiers aléatoirement?
Hors ligne
#21 Le 14/05/2014, à 18:54
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
ce n'est pas dossier que l'on renomme aléatoirement mais le nom que l'on lui donne, qui lui sera aléatoire,
par un bête classement alphabétique, chaque dossier ce retrouvera lui aléatoire
donc les images qui se trouve dedans le seront aussi, meme si elles ont été copié dans l'ordre,
un petit schéma de ce que je te propose,
tu as sa
image1
image2
image3
image4
image5
image6
image7
image8
et ses dossier
dossier1
dossier2
dossier3
dossier4
dossier5
dossier6
dossier7
dossier8
on fait notre déplacement
dossier1
image1
dossier2
image2
dossier3
image3
dossier4
image4
dossier5
image5
dossier6
image6
dossier7
image7
dossier8
image8
on renome les dossier
dossier5321
image1
dossier6678
image2
dossier1237
image3
dossier0307
image4
dossier9902
image5
dossier7752
image6
dossier3647
image7
dossier5621
image8
puis on affiche les dossiers normalement classer par nom
dossier0307
image4
dossier1237
image3
dossier3647
image7
dossier5321
image1
dossier5621
image8
dossier6678
image2
dossier7752
image6
dossier9902
image5
on retrouve bien nos image de maniere aléatoire,
pense tu que cela pourrais allé ?
Hors ligne
#22 Le 14/05/2014, à 19:10
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
Ah maintenant j'ai compris dieu merci !
Je pense que cela pourrais aller
Mais j'ai une petite question, si par exemple on veut répéter ça pour plusieurs liste (en utilisant une boucle) est ce que ça va marcher aussi?
je suppose par exemple j'ai deux listes des images:
liste 1:
image1.jpg
image2.jpg
image3.jpg
image3.jpg
liste 2:
img1.jpg
img2.jpg
img3.jpg
img4.jpg
je déplace les images de la première, on change les nom des répertoires aléatoirement, puis on les classe dans l'ordre alphabétique puis on déplace les images de la deuxième liste
comme ça on garantie que image1 et img1 ne seront plus dans le même répertoire , et même chose pour les autres non??
Hors ligne
#23 Le 14/05/2014, à 19:18
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
absolument,
la méthode que je t'ai donné précédement, donne des caracteres aléatoire, mais ce sont des caracteres, tu peux aussi choisir de concervé les lettres avec les nombre ou ce que tu veux en faite,
il est relativement simple avec une commende (mv en locurence) de changé le nom des dossiers,
tu peut faire le déplacement de ta premiere liste renomer les dossiers, puis le déplacement de ta deuxieme liste renommer les dossiers, puis renommer une derniere fois le dossier pour qu'il porte le nom de 1 a 32 par exemple pour que les valeurs ce suive tout en ayant des fichiers mis 'pseudo aléatoirement' a l'interrieur
le renommage comme le déplacement (il utilise le meme programme) ou la copie étant des programmes, l'usage en ai le meme quelque soit le shell, bash ou sh
petite question, pourquoi l'usage de sh ? celui ci est bien un shell mais offre beaucoup moins de possibilité que bash meme si les possibilités sont quand meme gigantesque, sachant que depuis un certain nombre d'année bash a remplacer sh en temps qu'interpréteur par défaut, en tout cas pour les distributions ubuntu.
Hors ligne
#24 Le 14/05/2014, à 19:40
- el.karima
Re : [Résolu][Script]Utilisation de $RANDOM
petite question, pourquoi l'usage de sh ? celui ci est bien un shell mais offre beaucoup moins de possibilité que bash meme si les possibilités sont quand meme gigantesque, sachant que depuis un certain nombre d'année bash a remplacer sh en temps qu'interpréteur par défaut, en tout cas pour les distributions ubuntu.
C'est pas vraiment mon choix , c'est le prof qui nous oblige de travailler avec le sh et non pas le bach
une autre question, pour renommer les dossiers est ce qu'on doit utiliser /dev/urandom??
Dernière modification par el.karima (Le 15/05/2014, à 22:48)
Hors ligne
#25 Le 14/05/2014, à 19:56
- casperfr
Re : [Résolu][Script]Utilisation de $RANDOM
pour renommer un dossier,
la commande est mv
la commande veux dire move (déplacer)
mais si tu déplace un fichier au meme endroit en lui changeant de nom tu fais simplement un renommage de ce fichier,
pour renommer
mv ancien_nom nouveau_nom
pour déplacer
mv /ancien_emplacement/nom /nouvelle_emplacement/nom
dans ce cas les fichiers porte le meme nom mais comme les endroits sont différent linux en fait donc un déplacement,
comme c'est dans le cadre de cour, je préfère quand meme te prévenir,
la ligne que je t'ai fournis permet de te donné un code aléatoire (dans le cas que je t'ai donné c'est toi qui choisi si c'est composer de chiffre de lettre ou des deux), il doit exister beaucoup d'autre méthode pour obtenir un nombre aléatoire, par exemple un usage simple pour obtenir des mots de passe aléatoire,
une autre méthode,
on prend la date et on crypte la date
date +%s | sha256sum | base64 | head -c 8 ; echo
tu obtient un texte aléatoire de 8 caracteres il n'est pas du tout aléatoire puisque basé sur l'heure mais celle ci changent constament, il est quasiement impossible d'avoir deux valeur identique meme en faisant l'instruction sumultanément,
donc ce que je veux dire c'est qu'il ne faut pas considéré comme acquis la version aléatoire que je t'ai donné, c'est une méthode parmis une quantité gigantesque de méthode existante.
tu dois mettre en oeuvre ce dont on a parlé ? (tu dois faire le script)
Hors ligne