Tu dois faire un script en shell qui s'utilise ainsi :
$ ./script arg1 arg2 arg3
et qui a la même sortie que la commande ps -C arg1,arg2,arg3
en utilisant sed :)
On peut t'aider à voir ce qui ne va pas dans ton code, comme on l'a fait pour l'exercice 2. mais peu de gens vont te donner une réponse toute faite. Ça ne serait pas te rendre service…
man sed ! Non je déconne ça va pas trop t'aider. Cherche plutôt un cours, avec des exemples, sur le web pour te familiariser avec sed.
C'est d'ailleurs assez tordu de le faire avec sed… J'y arrive, mais le script ne supporte pas des espaces supplémentaires entre les arguments (alors que les deux premiers scripts si), ça finit en arg1,arg2,,,,arg3 ce que ps -C trouve toute aussi impropre comme liste…
Posté par Marotte ⛧ .
En réponse au message Exercice shell script.
Évalué à 3.
Dernière modification le 30 octobre 2014 à 17:36.
je m'en sors pas avec les conditions
Pour y voir plus clair, plutôt que de sauter des lignes dans ton code, « indente » le. Ce n'est pas parce que ce n'est pas obligatoire, comme en python par exemple, que ce n'est pas nécessaire. On indente toujours le code. Si j'étais prof ce serait direct deux points en moins un code sans indentation :)
Poste le code entier. Mais par contre, c'est très important :
1) Saute une ligne
2) Mets trois "backquote" (c'est le caractère sur AltGr+7) suivi de "sh" (sans espace)
3) Colle ton code à partir de la ligne d'après
4) Saute une ligne
5) Mets trois "backquote" et saute une ligne
Je suis du même avis que toi. Par curiosité j'ai essayé de faire son exercice et je suis tombé sur un comportement qui me laisse dubitatif :
J'initialise d'abord ma variable VAR comme une chaîne vide VAR="" (pour être sûr, en fait au début je ne l'avais pas fait mais j'ai cru que le comportement décrit ci-dessous était lié à ça. Je viens également d'essayer VAR= c'est la même chose…)
à chaque tour de boucle si VAR contient déjà quelque chose
Pour le test j'ai le choix entre ! -z $VAR c'est celui qui me vient en premier, -n $VAR celui que je trouve dans le man de la commande test à la recherche d'un truc plus propre, $VAR qui est, toujours d'après le manuel, équivalent au second.
Je ne comprends pas pourquoi :
! -z $VAR -> OK
$VAR -> OK
-n $VAR -> NOK (j'ai 'arg1,arg2,argN,' en sortie…)
cat /challenge/binary/binary1/.passwd. Pourquoi on fait ça ? Je ne le sais pas, ça ne semble pas permettre une élévation de droits en soi.
Le programme binary1 est un cracker de mot de passe et écrit le mot de passe deviné dans le fichier .passwd, ainsi quelle n'est pas la stupéfaction de l'utilisateur qui voit s'afficher son mot de passe top secret, son intimité, lors d'un inoffensif ls :)
En tous cas merci pour tes explications détaillées.
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Tu es en prison ? :) Dans quel pays ?
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2. Dernière modification le 31 octobre 2014 à 11:33.
Tu surf sous elinks et tu n'arrives pas à afficher la nimage dans ton framebuffer ? Tu réponds par mail ? Tu utilises un terminal Braille ?
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Merci pour ton explication.
C'est tordu, je me demande la raison derrière :/
Oui…
Si ça se trouve le résultat et peut être aléatoire sans guillemets ? Ou bien le test -n se comporte volontairement de manière différente ?
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Non, tu ne dois pas utiliser de boucle for, c'est dans l'énoncé.
Il faut utiliser le paramètre spécial
$@
qui contient l'ensemble des arguments (et pas$*
qui fait sensiblement la même chose mais pas tout à fait)C'est traité au chapitre « Paramètre spéciaux » du manuel de ton shell.
Chez moi, /bin/sh lance /bin/dash donc
man dash
…Tu fais ce truc sous quel OS ?
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Tu dois faire un script en shell qui s'utilise ainsi :
$ ./script arg1 arg2 arg3
et qui a la même sortie que la commande ps -C arg1,arg2,arg3
en utilisant sed :)
On peut t'aider à voir ce qui ne va pas dans ton code, comme on l'a fait pour l'exercice 2. mais peu de gens vont te donner une réponse toute faite. Ça ne serait pas te rendre service…
man sed ! Non je déconne ça va pas trop t'aider. Cherche plutôt un cours, avec des exemples, sur le web pour te familiariser avec sed.
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
J'ai utilisé $* parce que je suis idiot.
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
C'est d'ailleurs assez tordu de le faire avec sed… J'y arrive, mais le script ne supporte pas des espaces supplémentaires entre les arguments (alors que les deux premiers scripts si), ça finit en arg1,arg2,,,,arg3 ce que ps -C trouve toute aussi impropre comme liste…
Bon courage !
^^
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Ni l'un ni l'autre, à part pour le test du nombre d'arguments…
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Parce que geany n'est pas lancé ? :)
Ton script fonctionne.
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Bien vu.
Si je test $VAR et "$VAR" ou ! -z $VAR et ! -z "$VAR" j'ai le même résultat, par contre -n $VAR et -n "$VAR" ne donne pas le même résultat.
C'est en flagrante contradiction avec le manuel :
J'aime mon shell…
C'est normal ce comportement ?
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 3. Dernière modification le 30 octobre 2014 à 17:36.
Pour y voir plus clair, plutôt que de sauter des lignes dans ton code, « indente » le. Ce n'est pas parce que ce n'est pas obligatoire, comme en python par exemple, que ce n'est pas nécessaire. On indente toujours le code. Si j'étais prof ce serait direct deux points en moins un code sans indentation :)
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2. Dernière modification le 30 octobre 2014 à 17:29.
ça c'est bon, et pas besoin d'enlever une virgule à la fin :)
ça non.
Si tu veux tester si $VAR est vide il ne faut pas utiliser
-eq
, je te laisse chercher toi même (man test) !EDIT : Quoique
-eq ""
fonctionne peut-être, mais il y a mieux.[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
De toute façon te casses pas :
je viens de tester ça ne fonctionne pas. Mais on peut faire comme ça :
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Poste le code entier. Mais par contre, c'est très important :
1) Saute une ligne
2) Mets trois "backquote" (c'est le caractère sur AltGr+7) suivi de "sh" (sans espace)
3) Colle ton code à partir de la ligne d'après
4) Saute une ligne
5) Mets trois "backquote" et saute une ligne
Sinon ce ne sera pas lisible. C'est expliqué sur le wiki : https://linuxfr.org/wiki/aide-edition#code
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
J'ai trouvé celui qui lisait pas les énoncés jusqu'au bout ! :) C'est la partie 4. Tu brûles les étapes.
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2. Dernière modification le 30 octobre 2014 à 17:00.
Tu as fait une erreur dans la condition, $VAR est une chaîne vide, ce n'est pas un entier :
Tu peux retourner lire la page man de test ;) Mais sinon j'ai déjà donné des exemples dans mes autres commentaires…
Mais tu t'y prends aussi mal dans la boucle :
Si VAR n'est PAS VIDE:
VAR=?
sinon:
VAR=?
Je te donne un indice pour trouver les ? : la virgule n'est pas au bon endroit et dans l'un des cas tu n'as pas besoin d'utiliser les deux variables…
C'est plus propre que la méthode donnée plus haut qui consiste à mettre des virgules au mauvais endroit pour ensuite en enlever une ! :p
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 3. Dernière modification le 30 octobre 2014 à 16:47.
`commande`
et$(commande)
ne sont pas équivalents, le premier exécute la commande dans un sous-shell, la deuxième dans le shell courant.C'est peut-être pour ça que tu as un comportement étrange avec
$*
En espérant ne pas dire de conneries.
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Au moins c'est cool, là on enlève bien une virgule :)
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Bin si sauf qu'il y a théoriquement 3 conditions qui sont équivalentes pour tester si $VAR n'est pas vide :
! -z $VAR
$VAR
-n $VAR
Je ne comprends pas pourquoi la dernière ne fonctionne pas.
Et comme cela a été dit, il ne faut pas enlever la virgule mais la mettre seulement si c'est nécessaire (ie : si $VAR n'est pas vide)
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2. Dernière modification le 30 octobre 2014 à 16:20.
man test
En fait la commande test s'appelle aussi "[" (si tu regardes dans /usr/bin tu verras un programme nommé simplement « [ »)
Tiens d'ailleurs c'est marrant je m'attendais à un lien physique… mais passons
Ce n'est pas très compliqué :
qui peut aussi s'écrire :
ou encore :
Le crochet fermant est juste là pour la décoration… Par contre n'oublie pas de laisser un espace à l'intérieur des crochets ;)
[^] # Re: Débuggage
Posté par Marotte ⛧ . En réponse au message Exercice shell script. Évalué à 2.
Je suis du même avis que toi. Par curiosité j'ai essayé de faire son exercice et je suis tombé sur un comportement qui me laisse dubitatif :
J'initialise d'abord ma variable VAR comme une chaîne vide
VAR=""
(pour être sûr, en fait au début je ne l'avais pas fait mais j'ai cru que le comportement décrit ci-dessous était lié à ça. Je viens également d'essayerVAR=
c'est la même chose…)Pour le test j'ai le choix entre
! -z $VAR
c'est celui qui me vient en premier,-n $VAR
celui que je trouve dans le man de la commande test à la recherche d'un truc plus propre,$VAR
qui est, toujours d'après le manuel, équivalent au second.Je ne comprends pas pourquoi :
! -z $VAR -> OK
$VAR -> OK
-n $VAR -> NOK (j'ai 'arg1,arg2,argN,' en sortie…)
[^] # Re: Un .deb pour les prochaines versions ?
Posté par Marotte ⛧ . En réponse au journal Pourquoi vous ne devriez pas packager vous-même votre logiciel pour Debian ?. Évalué à 6.
Le portable est pas supposé s'éteindre tout seul en cas de chauffe trop importante, avant destruction des circuits internes ?
[^] # Re: Un .deb pour les prochaines versions ?
Posté par Marotte ⛧ . En réponse au journal Pourquoi vous ne devriez pas packager vous-même votre logiciel pour Debian ?. Évalué à 2.
Haha ! Vraiment ? Je suis curieux…
[^] # Re: ok
Posté par Marotte ⛧ . En réponse au message questions sur differentes commandes. Évalué à 2. Dernière modification le 28 octobre 2014 à 21:21.
C'te flemme du copier/coller :) Ça ne participe pas à la clarté de ton propos…
[^] # Re: N'exécute pas ces commandes
Posté par Marotte ⛧ . En réponse au message questions sur differentes commandes. Évalué à 3.
Le programme binary1 est un cracker de mot de passe et écrit le mot de passe deviné dans le fichier .passwd, ainsi quelle n'est pas la stupéfaction de l'utilisateur qui voit s'afficher son mot de passe top secret, son intimité, lors d'un inoffensif ls :)
En tous cas merci pour tes explications détaillées.