Je suis étudiant en dernière année de DUT Informatique et j’ai du mal à comprendre un sujet sur lequel j’essaie de m’entrainer pour mes partiels...
Il m’est demandé de créer un shell script portant le nom que je veux et qui se présente ainsi :
#!/bin/bash
for NUMERO in ‘seq 1 1000’
do
echo Processus ${1} : Iteration numero ${NUMERO}
sleep $((RANDOM%5))
done
Je dois éxécuter ce shell-script, par conséquent je modifie les permissions avec chmod +x nom_du_shell suivi de ./nom_du_shell
Pour l’arrêter je fais un ctrl C. Mais j’ai l’impression que mon shell-script ne marche pas bien au vue du message retourné par mon terminal...
Par la suite je dois aussi réaliser une exécution en parallèle dans la même fenêtre de 2 exemplaires du shell-script avec l’argument first pour le premier et second pour le deuxième, et là je suis complètement perdu. J’aurai fait ./nom_du_shell first et ./nom_du_shell second mais ça me semble bizarre. J’attends donc vos réactions sur ce sujet...
Le premier truc demandé c’est : Executez le shell-script que vous venez de saisir.
Et après : Arretez ce shell-script.
Donc je suis pas certain qu’il faille modifier quelques choses, ou alors je comprends pas la démarche à suivre. C’est le 1er shell-script sur lequel je bosse donc je suis un peu perdu à vrai dire... :/
Parce que utiliser des guillemets simple n'empêche pas l’exécution du script:
$ bash -x script.sh
+ for NUMERO in ‘seq 1 1000’
+ echo Processus : Iteration numero ‘seq
Processus : Iteration numero ‘seq
+ sleep 2
+ for NUMERO in ‘seq 1 1000’
+ echo Processus : Iteration numero 1
Processus : Iteration numero 1
+ sleep 3
+ for NUMERO in ‘seq 1 1000’
+ echo Processus : Iteration numero 1000’
Processus : Iteration numero 1000’
+ sleep 4
EDIT: J'ai simplement copié collé le script posté par l'OP, mais avec des guillemets simple on a une seule itération de la boucle for avec comme valeur pour NUMERO : "seq 1 1000".
Après l’execution je n’ai même pas à l’arrêter étant donné que je n’ai même pas le temps de faire un ctrl C puisque je n’ai qu’un echo...
C'est parce que tu ne fais pas assez de tour de boucle. Tu devrais avoir 1000 tours de boucles et chaque tour devrait prendre en moyenne 2 secondes, donc ton script devrait prendre environ 2000 secondes environ, ce qui te laisse le temps de faire ce que tu as à faire.
dantonq a écrit:
parce que c'est un vieux sujet, l'énoncé utilise des ` pour réaliser une Substitution de commande, au lieu de $().
et tu les as interprété comme des apostrophes, le shell interprète ce texte comme une chaîne littérale, et non comme une commande à exécuter
Tu as mal recopié le script, voilà tout.
Tu peux même utiliser une boucle for à la manière du C pour incrémenter ton compteur si c'est plus clair pour toi:
for ((numero = 1; numero <= 1000; numero++)); do
echo "$numero";
sleep $((RANDOM%5))
done
C'est peut être les lunettes. Vois tu une différence entre ces deux lignes ?
for NUMERO in 'seq 1 1000'
for NUMERO in `seq 1 1000`
Je tiens à te tenir au courant que je suis actuellement 2ème de ma promo dans cette matière. Nous n’avons pas eu le temps de voir les shell-script en cours mais cela peut quand même tomber lors de mes partiels. J’aurai pu faire l’élève qui s’en moque et qui y va les mains dans les poches en faisant l’impasse, mais ce n’est pas mon cas. J’essaie d’apprendre auprès des gens qui veulent bien partager leurs savoirs en donnant des conseils, et non pas auprès de ceux qui se permettent de prendre de haut les autres. Alors merci de ne pas me manquer de respect car je ne suis qu’un «débutant»...
J'ai les mêmes (j'enseigne en iut info, justement), ici c'est enseigné au premier semestre module m1101.
En tout cas, c'est un sujet où il existe des bouquins et des ressources en ligne depuis des décennies (les informaticiens ayant été les premiers à mettre leurs cours sur internet).
Donc
Si on n'a pas eu de cours, en trouver. Et ne pas s'imaginer qu'on va résoudre les exercices en inventant soi même les connaissances.
Lire attentivement les réponses, quand on pose les questions.
---
Pour lancer deux instances en parallèle (Et en arrière plan)
. /truc first & ./truc second &
Quelqu'un a recommandé avec raison la forme $(commande), qui est maintenant dans la norme posix (avant, c'etait spécifique à bash), ça a été inventé d'une part pour les problèmes de lisibilité, d'autre part pour permettre l'emboitement.
- Edité par michelbillaud 24 janvier 2020 à 14:25:46
Shell-script problème
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Un bonjour, un s'il te plaît (stp accepté) et un merci ne font pas de mal
Un bonjour, un s'il te plaît (stp accepté) et un merci ne font pas de mal
Un bonjour, un s'il te plaît (stp accepté) et un merci ne font pas de mal
Un bonjour, un s'il te plaît (stp accepté) et un merci ne font pas de mal
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Un bonjour, un s'il te plaît (stp accepté) et un merci ne font pas de mal
Un bonjour, un s'il te plaît (stp accepté) et un merci ne font pas de mal