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

Shell et commandes GNU Discussion :

Différence de comportement entre SE (win/Unix)


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut Différence de comportement entre SE (win/Unix)
    Bonjour,

    j'ai un probléme perturbant.
    J'ai écrit un script shell qui fonctionne à merveille sur mon PC (win XP)

    J'essaie de faire marcher le script sur un serveur unix, il plante à tous les coups et me sort des messages d 'erreur :
    : command not foundipts/MyScript.sh: line 4:
    /home/Scripts/MyScript.sh: line 10: syntax error in conditional expression
    'home/Scripts/MyScript.sh: line 10: syntax error near `]]
    'home/Scripts/MyScript.sh: line 10: `if [[ $# -ne 2 ]]
    Voici les premières lignes de mon 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #!/bin/ksh
    #****************************************************************************#
    #  Program Name  : obfuscation.ksh
     
    # this process avoids overlapping strings: the first string replaced is the biggest (dictionary speaking) so that if a string is included in another, the comparison happens once
    Ref_file=$1/Scripts/Neutralize.txt
    Log_file=$1/Logs/Obfuscation.log
     
    if [[ $# -ne 2 ]]
    	then
    		echo "Error Calling the obfuscation script" >> $Log_file
    		echo "The script needs exactly 2 arguments. Usage: ./MyScript.ksh MainFolderPath FolderToObfuscatePath." >> $Log_file
    		exit 255
    	fi
     
    if [[ -e TEMP ]]
    	then
    		rm -f TEMP
    	fi
     
    while read line
    do
    	count=`echo $line | cut -f1 -d "," | wc -m`
    	echo "$count	$line" >> TEMP
    done < $Ref_file
     
    sort -r TEMP > $Ref_file
    awk '{ printf( "%s" , substr( $0, 10, 100)); printf( "\n" ) } '

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    man ksh

    [[ -e .... ]] && ............ || ................;

    ou
    if [ ............. ] ; then ...................; fi

    ne melanges pas les syntaxes réelles de ksh et les faux ksh ....comme dans windows ou c'est un melange de ksh bash et shell windows

    en langages clair respectes le standard ksh même si t'es sous daub' ça t'eviteras des problèmes graves et plus encore..... l'impossibilité de porter tes scripts.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    que veux tu dire par faux ksh ??

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    Je ne connais que ce moyen pour écrire du shell..

    Le man ksh ne m'a pas trop aidé.. peut étre parce que je n'arrive pas à trouver les bonnes lignes..

    peux tu m'aigiuiller comment écrire une condition en shell 'réel' .. ?

    Merci

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par freestyler Voir le message
    que veux tu dire par faux ksh ??

    un shell est un shell

    dos/powershell lançant ksh ne lance en realité qu'un interpreteur de ligne de commandes ksh mais pas un shell ksh et en plus pas dans un environnement unix

    c'est donc bien un interpreteur ksh et non pas un shell ksh.

    voilà pourquoi je parle de "faux" ksh,bash ou autre

    quand aux syntaxes regarde ce que j'ai déjà écrit plus haut tu as la solution

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    c'est pas des lignes vides les numeros de lignes affichés sont les lignes réelles
    (sans compter donc les commentaires).

    C'est ton while qui pete il est pas bien ecrit,
    il faut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | while read line ; do ............... ; done
    parce que si ton fichier n'as pas pas de fin de ligne ou de fin de fichier c'est cuit avec ta methode...de même avec certaines escape sequences...

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{ printf( "%s" , substr( $0, 10, 100)); printf( "\n" ) } ' $Ref_file > TEMP && mv TEMP $Ref_file
    pete aussi ..

    Erreur :
    syntax error near unexpected token `

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    Salut
    je suisdésespéré au point d'envoyer tout mon code..

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #!/bin/ksh
    #****************************************************************************#
    #  Program Name  : obfuscation.ksh
    # this process avoids overlapping strings: the first string replaced is the biggest (dictionary speaking) so that if a string is included in another, the comparison happens once
    Ref_file=$1/Scripts/Neutralize.txt
    Log_file=$1/Logs/Obfuscation.log
    if [ -e TEMP ] ; then rm -f TEMP ; fi
    cat $Ref_file | while read line ; do
    	count=`echo $line | cut -f1 -d "," | wc -m`
    	echo "$count	$line" >> TEMP ; 
    done
    sort -r TEMP > $Ref_file
    awk '{ printf( "%s" , substr( $0, 10, 100)); printf( "\n" ) } ' $Ref_file > TEMP && mv TEMP $Ref_file
    _neutralize()
    {
    cd $1
    c_List=`ls *.dat`
     
    ob_folder="$1"_ob
     
    if [ -d $ob_folder ] ; then rm -rf $ob_folder ; fi
     
    mkdir $ob_folder
     
    for file_name in $c_List ; do 
    	if [ $file_name != "sales.dat" ] ; then
    	echo "Starting Neutralizing $file_name ..." >> $Log_file
    	ob_file_name=$ob_folder/"ob_"$file_name
    	cp $file_name $ob_file_name
    	cat $Ref_file | while read line ; do
    		old_string=`echo $line | cut -f1 -d "," `
    		new_string=`echo $line | cut -f2 -d "," `
    		old_count=`echo $old_string | wc -m`
    		new_count=`echo $new_string | wc -m`
    		count=$(expr $old_count - $new_count)
     
    		s=`echo $old_string | grep '\.'`
    		if [ $? -eq 0 ] ; then old_string=`echo $old_string | sed 's/\./\\\./g'` ; fi
     
    		s=`echo $old_string | grep '\*'`
    		if [ $? -eq 0 ] ; then old_string=`echo $old_string | sed 's/\*/\\\*/g'` ; fi
     
    		j=0
    		while [ $j -lt $count ] ; do
    			new_string="$new_string "
    			j=$(expr $j + 1) ; 
    		done
     
    		grep -i "$old_string" "$file_name" > grep_temp
    		if [ $? -eq 0 ] ; then perl -pe "s/$old_string/$new_string/gi" $ob_file_name > TEMP && mv TEMP $ob_file_name ; fi ; 
    	done 
    	echo "Done with Neutralizing $file_name \n" >> $Log_file ;
    	fi ; 
    done
    rm grep_temp
    }
     
    echo Neutralisation Task started at `date +"%Y%m%d_%H%M%S"` "\n" >> $Log_file
     
    echo "Processing folder $1 ... \n" >> $Log_file
    _neutralize $1
    echo "Done with folder $1 \n" >> $Log_file
     
    echo "Start Substitution of columns to hide ... " >> $Log_file
    awk -f $1/Scripts/promo.awk $2"_ob"/ob_PromotionHeader.dat > TEMP && mv TEMP $2"_ob"/ob_PromotionHeader.dat
     
    echo "Done with Substitution of columns to hide \n" >> $Log_file
     
    echo Neutralisation Task ended at `date +"%Y%m%d_%H%M%S"` "\n" >> $Log_file
    J'ai l'impression que àchaque fois il me sort une nouvelle erreur..

    Peux tu m'aider à réécrire le code stp..

    Je dois livrer ce scripts d'ici 1h max


    Merci Merci Merci

  9. #9
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    Comme prévu, cela n'avait rien à voir avec le "type" du shel ou l'écriture du code.

    Le message d'erreur sur les lignes vides m'a mis sur la piste. Il s'agit du formattage du fichier sous windows qui génait le shell sous unix.

    Il fallait donc juste faire un :
    pour convertir le fichier au format unix, et le tour est joué.

    Merci de bien vérifier vos sources avant de balancer des réponses ..juste pour balancer une réponse!

    Merci quand même..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/11/2008, 20h39
  2. différence de comportements entre JVM
    Par Nicaisse dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 30/08/2007, 11h41
  3. Réponses: 2
    Dernier message: 20/06/2007, 10h27
  4. Réponses: 5
    Dernier message: 10/04/2007, 09h37
  5. [JavaScript] Différence de comportement entre IE et FF
    Par YAMKI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/02/2007, 14h33

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