[Shell] : string contenue dans une autre

Résolu
Thorfin -  
 Thorfin -
Bonjour,

Je cherche à déterminer si une chaîne de caractères est contenue dans une autre.
J'ai fait le script suivant :

#!/bin/bash
chaine1='Mystring'
chaine2='My'
if [[ "$chaine1" == *"$chaine2"* ]]
then
echo "It's there!";
fi

Ce petit programme a l'air de fonctionner MAIS je souhaiterai y faire appel de la façon suivante :
/home/program.sh home/file1 home/file2 home/file3
"file1" est un fichier contenant uniquement "Mystring"
"file2" est un fichier contenant uniquement "My"
et "file3" est le fichier dans lequel écrire "It's there!"

Comment faire pour lire les chaînes de caractères des fichiers, effectuer le test et renvoyer la réponse dans un fichier ?

Toute aide est la bienvenue

P.S. : je suis débutant en shell, je ne maîtrise absolument pas ce langage.
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
$ ls
file1  file2  foo.sh*

$ cat file1
Mystring

$ cat file2
My

$ cat foo.sh 
#!/bin/bash

grep -q -f $2 $1
if [[ $? = 0 ]]
then
echo "It's there!" > $3
fi

$ ./foo.sh file1 file2 file3

$ ls
file1  file2  file3  foo.sh*

$ cat file3
It's there!

$ 

;-))
1
Thorfin
 
J'essaierai ça le semaine pro, d'ici là merci à toi :-)
0
Thorfin
 
J'ai un problème : le test est négatif quelques soit les cas de figure.
File1 contient : Mystring
File2 contient : My
File3 contient : 0 !!!!
Par contre j'ai modifié légèrement le script foo.sh pour rajouter un else :

#!bin/bash

grep -q -f $2 $1
if [[ $? = 0 ]]
then
echo "1" > $3
else
echo "0" > $3
fi
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Ben chez moi, pas de soucis :

$ ls
file1  file2  foo.sh*

$ cat file1
Mystring

$ cat file2
My

$ cat foo.sh 
#!/bin/bash

grep -q -f $2 $1
if [[ $? = 0 ]]
then
echo "It's there!" > $3
else
echo "Bad!" > $3
fi

$ ./foo.sh file1 file2 file3

$ ls
file1  file2  file3  foo.sh*

$ cat file3
It's there!

$ echo "toto" > file2

$ cat file2
toto

$ ./foo.sh file1 file2 file3

$ cat file3
Bad!

$

:-))
0
Thorfin
 
J'exécute les commandes dans un terminal via un logiciel, je ne vois donc pas ce qu'il se passe (je constate juste). J'ai essayé d'entrer les commande dans un terminal, quand j'entre ./foo.sh file1 file2 file3
il me retourne :
grep: illegal option -- q
grep: illegal option -- f
Usage: grep -hblcnsviw pattern file . . .
Alors qu'initialement on a les mêmes fichiers ! le nom diffère, en fait, j'envoie très exactement la commande :
./contains.sh Temporary_string_83724.Script Temporary_stringSearch_83724.Script Temporary_stringSearchResult_83724.Script

Il ne s'agit pas d'un problème de version bash, bourne, c ? (je m'y connais pas du tout)
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Sur quel système es-tu ?
0
Géca Messages postés 799 Date d'inscription   Statut Contributeur Dernière intervention   106
 
Bonjour,

Connaissez-vous la commande diff ?

--
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

Pourquoi elle est sensée répondre à ses attentes ?
La commande "diff" compare le contenu de 2 fichiers (ou répertoires), mais en aucun cas ne peut déterminer si le contenu d'un fichier est présent dans l'autre ;-(
0
Thorfin
 
Non je ne connais pas la commande diff mais d'après ce que dit zipe31 elle me serait inutile. Donc je ne sais pas si il faut que je cherche dans cette direction?!
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
C'est dans quel but ce script ?
0
Thorfin
 
En fait je travaille en radiothérapie et on utilise un logiciel de planification de traitement (Pinnacle) permettant d'automatiser pas mal d'étape à l'aide de script (le code est propre au logiciel et basé sur du c++). Je voudrais détruire un objet si son nom contient les caractères "eq" mais c'est impossible à faire avec le code du logiciel. Il faut donc que j'envoie les actions à effectuer dans un terminal, que j'effectue les opérations en shell et que je récupère le résultat dans le script Pinnacle. Je sais envoyer les deux chaînes de caractères d'intérêt dans deux fichiers distincts (ou dans un mais ça à l'air plus compliqué à exploiter ?!) et je sais lire le fichier dans lequel sera stocké le résultat. Mais entre ces deux opération, tout ce qui est du shell, je ne vois pas comment m'en sortir ...
(je ne sais pas si je suis très clair, je peux détailler certains points si ça peut aider)
0
Géca Messages postés 799 Date d'inscription   Statut Contributeur Dernière intervention   106
 
Désolé effectivement la commande diff n'aide en aucune manière dans le cas proposé.
0