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, à 13: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, à 18:02)

Hors ligne

#2 Le 19/11/2022, à 15: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.

Hors ligne

#3 Le 19/11/2022, à 15: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, à 15: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, à 17:58)


Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit,  utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir  https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#5 Le 19/11/2022, à 15: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, à 16: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, à 11:15)


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

Hors ligne

#7 Le 19/11/2022, à 16: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
"gedit admin:///etc/fstab" est proscrit,  utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir  https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#8 Le 19/11/2022, à 17: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

Hors ligne

#9 Le 19/11/2022, à 18: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, à 02: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, à 11: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, à 12: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, à 13: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


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#14 Le 20/11/2022, à 19: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, à 08: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, à 14: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.


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

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

azer2010

Re : [résolu] Erreur retour script bash

Merci de vos Informations et du partage.

Hors ligne