IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Script simple en csh


Sujet :

Linux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut Script simple en csh
    Bonjour,

    Je ne dispose pas de linux... mais voilà je suis en DUT Info et j'ai un script en CSH à faire. J'ai installé Cygwin pour tester le script et je ne sais pas si il marche... en effet, il me renvoie une erreur mais pourtant il n'y en a pas , en tout cas je ne la vois pas

    Voilà le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/csh
     
    if ($#argv >= 2) then
    	if (-d $argv[$#argv]) then
    		foreach i ($argv)
    			if (-f $i) then
    				mv $i $argv[$#argv]
    			else
    				echo "L'argument $i n'est pas un fichier valide"
    			endif
    		end
    	else
    		echo "Le dernier argument n'est pas un répertoir valide";
    	endif
    endif
    Il me dit qu'il y a une erreur dans le foreach... mais je la vois pas. Si quelqu'un pouvait m'aider.... merci d'avance et bonne année

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Salut

    A part un probleme dans l'algorithme, il n'y a pas de probleme de syntaxe...

    Le dernier argument ne peut pas être un dossier ET un fichier régulier

    Bon courage !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    Merci

    Bon ben en gros cygwin ne marche pas comment faire pour ajouter le module csh ? car là en faite je compile avec sh.ewe dans le répertoire bin car j'ai pas de csh

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Plusieurs choses :
    1. Un script (shell) est interprété et pas compilé.
    2. sh est un B-Shell (Bourne Shell) comme bash (Bourne-Again SHell), et csh un C-Shell (comme tcsh). Les deux ne sont pas compatibles.


    Pour cygwin, je ne peux pas vraiment t'aider, regarde si c'est dispo déjà, mais peut être ne l'est-il pas ! Regarde du coté de tcsh dans ce cas ...

    Bonne chance

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    J'ai déciemment pas de chance, j'ai rien trouver de semblable... tant pis

    Bon voilà mon script si vous pouviez me dire ce que vous en pensez ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #!/bin/csh
    @ i = 1
    if ($#argv >= 2) then
    	if (-d $argv[$#argv]) then
    		while ($i < $#argv)
    			if (-f $argv[$i]) then
    				mv $argv[$i] $argv[$#argv]
    			else
    				echo "L'argument $argv[$i] n'est pas un fichier valide"
    			endif
    			@ i++
    		end
    	else
    		echo "Le dernier argument n'est pas un répertoire valide";
    	endif
    else
    	echo "Il faut en argument les fichiers à copier et le dossier de destination";
    endif
    J'explique :
    Il faut écrire un script où l'on passe en paramètre les fichiers à copier dans un répertoire que l'on passe aussi en paramètre...
    Donc quand je tape :
    sauve *.cc /programme
    Le script va copier tout les fichiers *.cc dans le répertoire programme.
    Donc mon script fais ça noramlement dites moi ce que vous en pensez ?

  6. #6
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Citation Envoyé par FinalSpirit
    Donc mon script fais ça noramlement dites moi ce que vous en pensez ?
    Ca fait bien ce que ca doit (Gestion des erreurs pas denandee ?)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    Ben seulement si le fichier ou le répertoir n'existe pas... sinon non pas de demande de gestion des erreurs... quelle erreur entends tu par là ?

    Sinon si on fais un sauve *.cc /programme est ce que ça va bien compier tout les fichiers ayant la terminaison .cc dans le répertoire programme ? J'ai un doute là dessus

  8. #8
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Je pensais a un deplacement dans un dossier ou l'on a pas les droits d'ecriture ou si on a des droits insuffisants sur la source, voir le cas ou le deplacement change de systeme de fichier et que la destination est pleine, etc ... Bref, tenir compte de la valeur renvoyée par mv.

    Pour ce qui est du pattern matching, c'est effectué par le shell avant de lancer le programme, en gros, si tu tape :
    le shell le transforme en (par exemple) :
    ... et la commande est exécutée. Elle recoit donc bien 3 paramètres et non pas 1 (C'est un "standard" sous Unix / Unix Like).

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    D'accord merci

    Bon maintenant dans le cas où on doit vérifié que le fichier a copié n'existe pas dans le dossier de destination et si il existe on demande si on veut le remplacer ou non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    if ($#argv >= 2) then
    	if (-d $argv[$#argv]) then
    		while ($i < $#argv)
    			if (-f $argv[$i]) then
    				if (-e "$dst/$src") then
    					echo " le fichier $src doit-il etre ecrase (O/n) ? "
    					set reponse = $<
    						if($reponse == 'o' || $reponse == 'O') then
    							cp $src $dst
    						endif
    				else
    					cp $src $dst
    				endif
    			else
    				echo "Le fichier $argv[$i] n'existe pas"
    			endif
    			@ i++
    		end
    	else
    		echo "Le répertoire $argv[$#argv] n'existe pas";
    	endif
    else
    	echo "Il faut en argument les fichiers à copier et le dossier de destination \n
    		  Exemple : sauve fichier1 fichier2 /repertoire";
    endif
    ce code marcherai à ton avis ?

  10. #10
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Il manque les intialisation de i (elle y etait avant) ; src et dst. Pour l'ecrasement, l'option -i de cp pouvais aussi être utilisée (i = interactif)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Points : 77
    Points
    77
    Par défaut
    Je l'ai finis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/bin/csh
    if ($argv[1] == "-i")
    	@ i = 2
    else
    	@ i = 1
    if ($#argv >= 2) then
    	if (-d $argv[$#argv]) then
    		while ($i < $#argv)
    			if (-f $argv[$i]) then
    				if (-e "$argv[$i]/$argv[$#argv]" && $argv[1] == "i") then
    					echo " le fichier $src doit-il etre ecrase (O/n) ? "
    					set reponse = $<
    						if($reponse == 'o' || $reponse == 'O') then
    							cp $argv[$i] $argv[$#argv]
    						endif
    				else
    					cp $argv[$i] $argv[$#argv]
    				endif
    			else
    				echo "Le fichier $argv[$i] n'existe pas"
    			endif
    			@ i++
    		end
    	else
    		echo "Le répertoire $argv[$#argv] n'existe pas";
    	endif
    else
    	echo "Il faut en argument les fichiers à copier et le dossier de destination \n
    		  Exemple : sauve -i fichier1 fichier2 /repertoire";
    endif
    Le -i c'est l'utilisateur qui l'aoute si il en a envie

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/02/2008, 12h32
  2. [PrestaShop] Script simple(10 produits) pour E-Commerce,..
    Par midiweb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 25/01/2008, 11h17
  3. Un script simple
    Par jalilc dans le forum Linux
    Réponses: 11
    Dernier message: 29/05/2006, 10h42
  4. petit script simple
    Par frjover dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/04/2006, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo