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 :

Commande qui fonctionne en ligne de commande mais pas en script ((standard_in) 1: syntax error)


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut Commande qui fonctionne en ligne de commande mais pas en script ((standard_in) 1: syntax error)
    Bonjour,
    J'ai un script extrait des valeurs d'un fichier (speedtest) dont le contenu est du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ##"ORANGE FRANCE - Puteaux","23884","3.5467","0.32625","0","26577418","8390410","364999650","91138521","https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f","1","17.9035","26.4743","2.991","257.569","4.27329","2.50788","2.273","57.746","3.194","3.789"
    ##
    #!/bin/bash
    var=$(cat $1)
    Server_Name=$(echo $var | cut -d"," -f1-1)
    Server_ID=$(echo $var | cut -d"," -f2-2)
    Server_Ping=$(echo $var | cut -d"," -f3-3)
    Download=$(echo $var | cut -d"," -f6-6)
    Upload=$(echo $var | cut -d"," -f7-7)
    LienResultat=$(echo $var | cut -d"," -f10-10)
    ## problème sur cette ligne !
    Download=$(echo "scale=3; $Download/ 125000" | bc | awk '{printf "%.2f\n", $0}')
    #...
    si j'exécute le script j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bash trancheHoraire.sh file.cvs
    (standard_in) 1: syntax error
    Si je lance cette commande dans terminal, ça fonctionne !
    Avez-vous une idée sur le problème ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Et hop! Un p'tit coup de debug (trace) pour voir ce qu'il fait:

    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
    % bash -x trancheHoraire.sh file.cvs
    ++ cat file.cvs
    + var='##"ORANGE FRANCE - Puteaux","23884","3.5467","0.32625","0","26577418","8390410","364999650","91138521","https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f","1","17.9035","26.4743","2.991","257.569","4.27329","2.50788","2.273","57.746","3.194","3.789"'
    ++ echo '##"ORANGE' FRANCE - 'Puteaux","23884","3.5467","0.32625","0","26577418","8390410","364999650","91138521","https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f","1","17.9035","26.4743","2.991","257.569","4.27329","2.50788","2.273","57.746","3.194","3.789"'
    ++ cut -d, -f1-1
    + Server_Name='##"ORANGE FRANCE - Puteaux"'
    [je snippe un peu]
    ++ echo '##"ORANGE' FRANCE - 'Puteaux","23884","3.5467","0.32625","0","26577418","8390410","364999650","91138521","https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f","1","17.9035","26.4743","2.991","257.569","4.27329","2.50788","2.273","57.746","3.194","3.789"'
    ++ cut -d, -f6-6
    + Download='"26577418"'
    [je snippe encore un peu]
    ++ echo 'scale=3; "26577418"/ 125000'
    ++ bc
    ++ awk '{printf "%.2f\n", $0}'
    (standard_in) 1: parse error
    + Download=
    Je teste un peu à la mano pour voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    % echo 'scale=3; "26577418"/ 125000' | bc
    (standard_in) 1: parse error
    Ça se confirme ! bc n'aime pas qu'on divise une chaine par un nombre...

    PS: Par ailleurs, quelle drôle d'idée d'appeler "file.cvs" un fichier qui semble plus "comma separated values" que "Canvas format"

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut
    Merci Jack,
    Pourtant ça marche en ligne de commande.
    &Download converti mais pas en script.
    Comment convertir "1234567" en 1234567 dans le script ?

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 299
    Par défaut
    Bonjour

    Code bash : 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
    $ awk -F '","' '{sub(/^./,"");sub(/.$/,"");} {for (i=1;i<=NF;i++) print $i;}' <<eof
    > "ORANGE FRANCE - Puteaux","23884","3.5467","0.32625","0","26577418","8390410","364999650","91138521","https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f","1","17.9035","26.4743","2.991","257.569","4.27329","2.50788","2.273","57.746","3.194","3.789"
    > eof
    ORANGE FRANCE - Puteaux
    23884
    3.5467
    0.32625
    0
    26577418
    8390410
    364999650
    91138521
    https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f
    1
    17.9035
    26.4743
    2.991
    257.569
    4.27329
    2.50788
    2.273
    57.746
    3.194
    3.789

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F '","' '{sub(/^./,"");sub(/.$/,"");} {print $6/12500;}' <<eof
    "ORANGE FRANCE - Puteaux","23884","3.5467","0.32625","0","26577418","8390410","364999650","91138521","https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f","1","17.9035","26.4743","2.991","257.569","4.27329","2.50788","2.273","57.746","3.194","3.789"
    eof
    2126.19

    PS : l'erreur pointée précédemment vient de la différence entre le vide et zéro.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    Citation Envoyé par Flodelarab Voir le message

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ IFS=',' read -ra array <<<'"ORANGE FRANCE - Puteaux","23884","3.5467","0.32625","0","26577418","8390410","364999650","91138521","https://www.speedtest.net/result/c/c643aa2b-5046-4013-aefe-3fdf7044977f","1","17.9035","26.4743","2.991","257.569","4.27329","2.50788","2.273","57.746","3.194","3.789"'
    $ strip() { pat=$1; shift; expr=$@; out=${expr/#$pat/}; echo ${out/%$pat/};}
    $ strip '"' "${array[0]}" #par exemple, avec le premier élément du tableau
    ORANGE FRANCE - Puteaux
    $

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut
    Finalement grâce à vos conseils j'ai résolu le problème, peut-être d'une manière peu élégante, mais ça fait le job.
    Je commence par supprimer les guillemets, ce qui permet d'avoir directement des variables numériques lors des affectations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Jeux de travail
    "ORANGE FRANCE - Paris","24215","4.2742","0.334","0","24931854","9970410","300317462","138365570","https://www.speedtest.net/result/c/44ec3b6d-130a-49f6-90d1-e71335636d96","1","22.0343","29.4288","4.449","241.625","5.28687","1.84831","3.203","13.79","3.441","4.634"
    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
    #!/bin/bash
    #supprime les "	
    	sed -i 's/"\+//g' $1 
    	var=$(cat $1)
    #Création des variables à partir du fichier
    	Server_Name=$(echo $var | cut -d, -f1-1)
    	Server_ID=$(echo $var | cut -d, -f2-2)
    	Server_Ping=$(echo $var | cut -d, -f3-3)
    	Download=$(echo $var | cut -d, -f6-6)
    	Upload=$(echo $var | cut -d, -f7-7)
    	LienResultat=$(echo $var | cut -d, -f10-10)
    #Conversion Mbp et mise au format entier
    	Server_Name=$(echo $Server_Name| cut -c 1-23)
    	Server_Ping=$(echo "scale=3; $Server_Ping" | bc | awk '{printf "%.0f\n", $0}')
    	Download=$(echo "scale=3; $Download/ 125000" | bc | awk '{printf "%.0f\n", $0}')
    	Upload=$(echo "scale=3; $Upload/ 125000" | bc | awk '{printf "%.0f\n", $0}')
    #Création TimeStamp
    	Jour=$(date +%Y-%m-%d)
    	Heure=$(date +%H:%M:%S)
    #Calcul tranche horaire
    	HeureTranche=$(echo $Heure | cut -d":" -f1) #Heure premier champs délimité par " "
    	Minutes=$(echo $Heure | cut -d":" -f2 | cut -d":" -f1) #Les minutes sont entre les : 
    	if [ $Minutes -ge 45 ]
    	then MinTranche="45"
    	elif [ $Minutes -ge 30 ]
    	then MinTranche="30"
    	elif [ $Minutes -ge 15 ]
    	then MinTranche="15"
    	else MinTranche="00"
    	fi
    	Tranche=$(echo "$HeureTranche:$MinTranche:00")
    #Formatage du résultat
    	format="%s\t%-s\t%-s\t%-s\t%-s\t%-s-\t%-s\t%-s\t%-s\t%\n"
    	echo $Jour,$Heure,$Tranche,$Server_Name,$Server_ID,$Server_Ping,$Download,$Upload,$LienResultat>$1
    	sed -i 's/,\+/\t/g' $1 #remplace les virgules par tab
    Merci à tous pour vos conseils

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    sais-tu que awk peut faire des calculs arithmétiques ?

  9. #9
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Quelques astuces pour les futur scripts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Download=$(echo "scale=3; $Download/ 125000" | bc | awk '{printf "%.2f\n", $0}')
    Tu demandes à bc de te donner une précision de 3 décimaux après la virgule,
    puis tu convertis en 2 décimaux avec awk.
    suffit de demande à bc de te donner 2 décimaux à la base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ bc -q
    scale=2
    10/3
    3.33
    scale=29
    10/3
    3.33333333333333333333333333333
    $
    Autre remarque,
    tu utilises awk pour printf,
    tu peux utiliser printf pour printf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ echo 3.3333333 | xargs printf "%.2f\n"
    3.33
    $
    Pour les modos : est-il possible d'enlever le coloriage des balises CODE ?

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    est-il possible d'enlever le coloriage des balises CODE ?
    oui, il faut paramétrer la balise CODE en indiquant x : [ CODE = x ] (sans espaces)
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    avec du "code" sans coloration syntaxique
    ce qui peut être pratique pour du pseudo-code uniquement.

  11. #11
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Merci l'artiste !

  12. #12
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    Méthode sauvage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'scale=3; "26577418"/ 125000' | bc
    (standard_in) 1: syntax error
    $ echo 'scale=3; "26577418"/ 125000' | xargs echo | bc
    212.619

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

Discussions similaires

  1. Macro qui fonctionne dans un fichier Excel mais pas dans un autre
    Par Olivier2610 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 12/04/2020, 22h05
  2. Commande qui s'exécute en ligne de commande mais pas en script
    Par Kikibolderiz dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 15/02/2019, 10h20
  3. Réponses: 9
    Dernier message: 09/05/2013, 18h27
  4. Code qui fonctionne sur Matlab 7.1 mais pas sur R2009b?
    Par kariboubou dans le forum MATLAB
    Réponses: 1
    Dernier message: 19/06/2011, 20h11
  5. [CS5] Preloader qui fonctionne avec Le player V9 mais pas V10..
    Par ArC3Nik dans le forum Flash
    Réponses: 1
    Dernier message: 06/07/2010, 20h22

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