Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/11/2022, à 14:31

azer2010

[résolu] Erreur retour script bash

bonjour à tous,

vous un petite problème que j'ai avec un script.

le script est  codé en BASH afin de récupéré un/des processus (arguments) de son choix et
avoir le retour de la mémoire consommé en service.
mais il me retourne des erreurs (introuvable : que je trouve pas :} ) je pense qu'ils sont liers à ma structure de condition.je partage le bloc pour que vous puissez comprendre cette erreur et de m'expliqué par
une analyse de vos retour et surtout comprendre le problème (si simple smile à plusieurs...) ou avoir une/des alternatives de squelette pour le bloc je suis à l'écoute.

voici le structure @FILE ram.sh :

#!/bin/bash
#variable arguments
PROCESS="${@}"

 if [[ -z ${PROCESS} ]]; 
 then
        # au lancement du script.
        printf "%s\n" "Veuillez saisir un/des Noms de processus en paramètre "
 else
        # boucle pour lire l'ensemble de la variable
        for EXPRESSION in  $(echo ${PROCESS}) 
        do
                        RAMCONSUME=$(ps -ely | awk -v process=${EXPRESSION} '$13 == process' | \
awk '{SUM += $8/1024} END {print SUM}' | cut -d '.' -f1) 
                        if [[ -z ${RAMCONSUME} ]]; 
                        then
                                  printf "%s\n"  " [**Le Nom du processus est indisponible ou n'existe pas**] "
                        else
                                  printf "\n%s\n"  " RSS consommée pour  ${EXPRESSION} : ${RAMCONSUME} MB"
                        fi
        done
 fi
 

exécution du script sur le Terminal Exemple avec 1 Argument :

toto@toto$ sudo ./'ram.sh' nemo 

puis se que le script retourne une fois exécuté:

[sudo] Mot de passe de toto :

./ram.sh: 5: [[: not found
./ram.sh: 15: [[: not found
RSS consommée pour nemo : 123324 MB
 

à très vite de vous lire, bonne journée à tous.

Dernière modification par azer2010 (Le 22/12/2022, à 19:02)

Hors ligne

#2 Le 19/11/2022, à 16:04

bruno

Re : [résolu] Erreur retour script bash

Bonjour,

On peut reproduire cette erreur en faisant exécuter ton script par dash à la place de bash.

#3 Le 19/11/2022, à 16:24

azer2010

Re : [résolu] Erreur retour script bash

bonjour bruno,

je n'ai pas compris ta réponse, peut tu etre un peux plus explicite stp.

Hors ligne

#4 Le 19/11/2022, à 16:24

geole

Re : [résolu] Erreur retour script bash

Bonjour
Je n'ai pas le même style d'erreur

a@b:~$ ./ram.sh
./ram.sh: ligne 13: fin de fichier (EOF) prématurée lors de la recherche du « ) » correspondant
./ram.sh: ligne 23: erreur de syntaxe : fin de fichier prématurée

a@b:~$ ./ram.sh bbbbb
./ram.sh: ligne 13: fin de fichier (EOF) prématurée lors de la recherche du « ) » correspondant
./ram.sh: ligne 23: erreur de syntaxe : fin de fichier prématurée
cat -n ./ram.sh
     1	#!/bin/bash
     2	#variable arguments
     3	PROCESS="${@}"
     4	
     5	 if [[ -z ${PROCESS} ]]; 
     6	 then
     7	        # au lancement du script.
     8	        printf "%s\n" "Veuillez saisir un/des Noms de processus en paramètre "
     9	 else
    10	        # boucle pour lire l'ensemble de la variable
    11	        for EXPRESSION in  $(echo ${PROCESS}) 
    12	        do
    13	                        RAMCONSUME=$(ps -ely | awk -v process=${EXPRESSION} '$13 == process' | \
    14	                        
    15	                        if [[ -z ${RAMCONSUME} ]]; 
    16	                        then
    17	                                  printf "%s\n"  " [**Le Nom du processus est indisponible ou n'existe pas**] "
    18	                        else
    19	                                  printf "\n%s\n"  " RSS consommée pour  ${EXPRESSION} : ${RAMCONSUME} MB"
    20	                        fi
    21	        done
    22	 fi
a@b:~$
a@b:~$ 

Il faudrait mettre une parenthèse  fermante dans la ligne 13

Dernière modification par geole (Le 19/11/2022, à 18:58)


Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity

Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#5 Le 19/11/2022, à 16:34

azer2010

Re : [résolu] Erreur retour script bash

geole a écrit :

Bonjour
Je n'ai pas le même style d'erreur

a@b:~$ ./ram.sh
./ram.sh: ligne 13: fin de fichier (EOF) prématurée lors de la recherche du « ) » correspondant
./ram.sh: ligne 23: erreur de syntaxe : fin de fichier prématurée

a@b:~$ ./ram.sh bbbbb
./ram.sh: ligne 13: fin de fichier (EOF) prématurée lors de la recherche du « ) »...

bonjour geole merci de ton retour mais j'avais oublier un bout de code sur la ligne 13,
que je vien de réctifié suite a ton observation relance le et donne moi ton avis.

voici le rajout :

awk '{SUM += $8/1024} END {print SUM}' | cut -d '.' -f1) 

Hors ligne

#6 Le 19/11/2022, à 17:12

Watael

Re : [résolu] Erreur retour script bash

#!/bin/bash

if (($#))
then
    for commande do
        consoRAM=( $(ps h -C $commande -o rss) )
        test -n "${consoRAM[0]}" || { >&2 echo "$commande non trouvée"; continue;}
        totalConsoRAM=$(( $(IFS='+'; echo "${consoRAM[*]}") ))
        LC_NUMERIC=C printf '%s : %.0fMB\n' "$commande" $(bc -l <<<"rslt=$totalConsoRAM/1024; scale=2; rslt/1")
    done
else
    >&2 echo "il faut indiquer au moins un nom de commande"
    exit 1
fi

je voulais seulement corriger la ligne ps, et tout le reste est aussi parti à la poubelle.

Dernière modification par Watael (Le 20/11/2022, à 12:15)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 19/11/2022, à 17:52

geole

Re : [résolu] Erreur retour script bash

Après rectification, je ne sais pas reproduire.

a@b:~$ ./ram.sh
Veuillez saisir un/des Noms de processus en paramètre 
a@b:~$ ./ram.sh top

 RSS consommée pour  top : 4,30469 MB
a@b:~$ ./ram.sh top top

 RSS consommée pour  top : 4,30469 MB

 RSS consommée pour  top : 4,30469 MB
a@b:~$ cat ram.sh
#!/bin/bash
#variable arguments
PROCESS="${@}"

 if [[ -z ${PROCESS} ]]; 
 then
        # au lancement du script.
        printf "%s\n" "Veuillez saisir un/des Noms de processus en paramètre "
 else
        # boucle pour lire l'ensemble de la variable
        for EXPRESSION in  $(echo ${PROCESS}) 
        do
                        RAMCONSUME=$(ps -ely | awk -v process=$EXPRESSION '$13 == process' | awk '{SUM += $8/1024} END {print SUM}' | cut -d '.' -f1)  \
                                           
                        if [[ -z ${RAMCONSUME} ]]; 
                        then
                                  printf "%s\n"  " [**Le Nom du processus est indisponible ou n'existe pas**] "
                        else
                                  printf "\n%s\n"  " RSS consommée pour  ${EXPRESSION} : ${RAMCONSUME} MB"
                        fi
        done
 fi
a@b:~$

Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity

Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#8 Le 19/11/2022, à 18:31

bruno

Re : [résolu] Erreur retour script bash

azer2010 a écrit :

bonjour bruno,

je n'ai pas compris ta réponse, peut tu etre un peux plus explicite stp.

L'utilisation des doubles crochets [[ est spécifique à certains interpréteurs de commandes, bash entre autres, et n'est pas dans la norme POSIX.

Si tu exécutes ton script avec un interpréteur qui ne prend pas en charge les [[, comme dash  cela provoque une erreur.

Il faut t'assurer que tu utilise bien bash avant de lancer ton script :

echo $SHELL
ls -l /bin/bash

#9 Le 19/11/2022, à 19:49

Watael

Re : [résolu] Erreur retour script bash

$SHELL, par défaut, indique le shell de connexion de l'utilisateur.
le shell utilisé dans un script dépend du shebang inscrit sur la première ligne du script.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 20/11/2022, à 03:17

MicP

Re : [résolu] Erreur retour script bash

Bonjour Watael

Dans ton message #6, Il manque un double guillemets juste après la variable

"${consoRAM[*]}

Hors ligne

#11 Le 20/11/2022, à 12:15

Watael

Re : [résolu] Erreur retour script bash

corrigé.
merci.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 20/11/2022, à 13:47

Hizoka

Re : [résolu] Erreur retour script bash

Salut,

perso quand je galère avec des erreurs que je ne trouve pas, j'utilise : https://www.shellcheck.net/


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#13 Le 20/11/2022, à 14:41

Tawal

Re : [résolu] Erreur retour script bash

Shellcheck est aussi installable sur le PC, plutôt que de passer par le navigateur.
https://packages.ubuntu.com/jammy/shellcheck

Hors ligne

#14 Le 20/11/2022, à 20:36

Hizoka

Re : [résolu] Erreur retour script bash

Ah, je ne connaissais pas !

Merci


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#15 Le 21/11/2022, à 09:36

matrix-bx

Re : [résolu] Erreur retour script bash

Comme beaucoup j'utilisais souvent "echo" au début, puis on m'a montré "set -xv", je n'utilise plus que ça depuis (à de très rares exceptions près).


Utilisations des balises de mises en formes.

Hors ligne

#16 Le 21/11/2022, à 15:50

Tawal

Re : [résolu] Erreur retour script bash

shellcheck et set -xv sont complémentaires.
Le 1er vérifie la syntaxe du script.
Le 2ième permet de vérifier le déroulement du script.
Ce n'est pas pareil.

Hors ligne

#17 Le 09/12/2022, à 12:43

azer2010

Re : [résolu] Erreur retour script bash

Merci de vos Informations et du partage.

Hors ligne