Programme Bash : tests sur une chaine de caractères

Développement Web côté client (Xhtml, Css, Javascript), coté serveur et système (Php, Java, Mono, Perl, Python, C, C++), Gestion de projet (UML, CVS), Environnements de développement (Eclipse, Mozilla XPFE), 3D (OpenGL), Bases de données (PostgreSql, MySql) ...

Modérateur: Equipe de modération des forums

Programme Bash : tests sur une chaine de caractères

Message par txtman » 07 Mars 2008, 11:31

Bonjour.

Je voudrai écrire dans un script Bash la triple condition suivante :

on teste une chaine de caractère (ex: $texte)
$texte contient par exemple "COUCOU123456.zip"

j'ai besoin de savoir :
- si $texte commence par "COUCOU"
- et si il y a après le "COUCOU" 6 chiffres
- puis ".zip"



J'ai besoin également de faire une boucle sur les fichiers contenu dans un dossier et de les faire passer ce test.

voila c'est relativement simple, mais je ne retrouve plus le moyen d'exprimer cela.

Merci
Avatar de l’utilisateur
txtman
Noobs
 
Message(s) : 592
Inscription : 26 Mars 2004, 11:53

Message par alxgomz » 07 Mars 2008, 13:13

cette regex sed devrait faire l'affaire:

/^COUCOU[0-9]\{6\}\.zip$/

et pour la boucle c soit while soit for.

man bash && man regex
Happy debian user
Avatar de l’utilisateur
alxgomz
Equipe LoLiTa
 
Message(s) : 459
Inscription : 21 Juin 2007, 23:18
Localisation : Faa'a

Message par Cocobu » 07 Mars 2008, 13:18

Et si tu ne sais pas bien utiliser le bash pour faire tes scripts, tu peux les faire en PHP, perl, python, etc ...
Bref, il doit bien y avoir un language de programmation que tu connais mieux que les autres ?
Avatar de l’utilisateur
Cocobu
Equipe LoLiTa
 
Message(s) : 831
Inscription : 24 Mars 2004, 16:20
Localisation : Polynésie Française

Message par J » 07 Mars 2008, 13:33

avant de mettre ca en syntaxe clair (bash, php, ruby etc) tu aurais fait un algo avant, tu te serais machouille 90% du boulot, ben ouais le langage et sa syntaxe ca fait que 10 et encore je crois que je suis gentil...
Avatar de l’utilisateur
J
Equipe LoLiTa
 
Message(s) : 939
Inscription : 10 Jan 2005, 13:31
Localisation : Dans le cyberpf de mana

Message par Cocobu » 07 Mars 2008, 13:50

J a raison.

Si tu n'arrives meme pas a te poser correctement la question en francais, tu ne va pas t'en sortir.
Une fois que tu te posera la bonne question, ton algorythme sera pret, et il ne reste qu'un tout petit travail, celui d'adapter ton algo au language choisi.
Avatar de l’utilisateur
Cocobu
Equipe LoLiTa
 
Message(s) : 831
Inscription : 24 Mars 2004, 16:20
Localisation : Polynésie Française

Message par txtman » 07 Mars 2008, 14:02

ce que je dois faire pour moi est clair dans ma tête.

peut-être que j'ai mal formuler ma demande, je m'en excuse


je suis en train de chercher comment utilise les regex avec bash
Avatar de l’utilisateur
txtman
Noobs
 
Message(s) : 592
Inscription : 26 Mars 2004, 11:53

Message par txtman » 07 Mars 2008, 14:33

voila ce que j'ai besoin de faire :


Code : Tout sélectionner
boucle dans un dossier -> fichier
    si debut(fichier) = "COUCOU" et caractère(fichier de 6 à 11) > 0 et fin(fichier) = ".zip"
      alors faire quelque chose
    fin du si
fin de la boucle



traduit en bash j'en suis là :
Code : Tout sélectionner
         for i in $( ls /home/txtman )
         do
            if expr $i : ^COUCOU[0-9]\{6\}\.zip
            then
               echo "ok : $i"
            fi
         done


bien sûr ça ne fonctionne pas car la syntaxe n'est pas acceptée
Avatar de l’utilisateur
txtman
Noobs
 
Message(s) : 592
Inscription : 26 Mars 2004, 11:53

Message par txtman » 07 Mars 2008, 15:08

Voila ce que j'ai pu écrire et qui fonctionne :

Code : Tout sélectionner
         for i in $( ls /home/txtman | grep "^COUCOU[0-9]\{6\}\.zip$"  )
         do
            
            echo "OK pour $i"
            
         done
         if [ "$i" = "" ]
         then
            echo "Aucun fichiers trouvés"
         fi


il y a surement moyen de faire mieux, j'imagine
Avatar de l’utilisateur
txtman
Noobs
 
Message(s) : 592
Inscription : 26 Mars 2004, 11:53

Message par txtman » 07 Mars 2008, 17:40

alxgomz a écrit :cette regex sed devrait faire l'affaire:

/^COUCOU[0-9]\{6\}\.zip$/

et pour la boucle c soit while soit for.

man bash && man regex



merci bcp pour le motif regex, ça m'a bcp aidé :D
Avatar de l’utilisateur
txtman
Noobs
 
Message(s) : 592
Inscription : 26 Mars 2004, 11:53


Retour vers Développement et programmation

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)

cron