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 :

integer expression expected


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut integer expression expected
    Bonjour,
    Je passe la commande suivante sur un terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -eo comme,PID,estimes | grep hello | awk '{if ($3}>100} {printf $3}}' | wc -l
    Qui marche parfaitement mais quand je l'intègre à un script Bash

    J'ai une erreur de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [: : integer expression expected
    Que puis je faire svp?
    Dernière modification par N_BaH ; 24/02/2022 à 17h12.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    les Développement des paramètres (voir cette expression dans le man bash) doivent être toujours mis entre guillemets. TOUJOURS !
    à moins de savoir pourquoi.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Re bonjour,
    Je suis passé sur un PC ça va grandement nous simplifier vie

    Voilà ma commande de base jouée sur un terminal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ps -eo comm,pid,etimes | grep hello | awk '{if ($3 > 100) { print $3}}'
    7
    Dans mon script j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     control=$(sudo -u inspec bash -c 'ps -eo comm,pid,etimes | grep hello | awk '{if ($3 > 100)'')
            echo "test: "$control;
    Le retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    hello.sh: command substitution: line 23: syntax error near unexpected token `('
    hello.sh: command substitution: line 23: `sudo -u inspec bash -c 'ps -eo comm,pid,etimes | grep hello | { print $3}}'
    test:
    hello.sh: line 25: [: : integer expression expected
    Man bash "Les arguments nuls implicites, résultant du développement des paramètres n'ayant pas de valeurs, sont éliminés"

    Par contre je ne vois rien de choquant

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    pourquoi sudo ?
    pourquoi bash -c ?

    et pourquoi grep ? là, c'est pour chipoter parce que awk peut faire ce que fait ce grep.
    d'ailleurs, tu cherches quoi avec "hello" ?

    il est très compliqué, voire impossible, d'imbriquer des apostrophes.
    d'où mes deux premières questions ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Invité
    Invité(e)
    Par défaut
    pour le faire via un user précis, mais je pense que je peux l'enlever sans trop de problème

    Hello c'est un process, on doit donc regarder son occurrence

    Et le grep pour ne récupérer que ce process

    En modifiant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    control=$(ps -eo comm,pid,etimes | grep hello | awk '{if ($3 > 100) { print $1}}';)
            echo "test: "$control;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ bash hello.sh
    test:
    hello.sh: line 25: [: : integer expression expected
    Dernière modification par Invité ; 24/02/2022 à 18h09.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    si tu connais le nom du processus recherché tu devrais pouvoir simplifier la commande ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nomProcess='hello'
    control=$(ps h -C "$nomProcess" -o etimes) # si la variable n'est pas réutilisée, on peut mettre la Substitution de commandes directement dans le if
    if test $control -gt 100 # je ne mets pas de guillemets parce que etimes est forcément   un nombre entier (une valeur insécable)
    then
       : faire ce qu il y a à faire
    fi
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Filtre conditionnel en bash (awk ou autre commande)
    Par alberick dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 04/05/2020, 16h20
  2. bash, awk etc
    Par dg1234 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/04/2013, 14h35
  3. AWK : traitement de fichier
    Par zeus2005 dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 16/06/2007, 22h24
  4. probleme de récupération de variable en bash avec awk
    Par avogadro dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/12/2006, 01h31
  5. Réponses: 33
    Dernier message: 15/10/2004, 16h19

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