Shell - Utilisation de variable avec awk
Résolu
gamerounet
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je dois effectuer une recherche sur tous les processus fils d'un ID donné, et voir si un de ces fils est un processus Java (si il en existe un, il est unique). Voici mon script et mon problème:
Je suis donc faire appel à ma fonction avec comme paramètre l'ID du proc "père", que je stock dans une variable VAR. Cependant, elle n'est pas reconnu lorsque je l'utilise dans awk avec $VAR.
Je dois effectuer une recherche sur tous les processus fils d'un ID donné, et voir si un de ces fils est un processus Java (si il en existe un, il est unique). Voici mon script et mon problème:
script_awk ( ) { VAR=$1 ps -Af | awk {'if ( $3 == $VAR )print $0'} | grep java >file if [ -s file ] then IDJAVA='cat file' javafile="yes" echo "proc java" else echo "pas de fichier java" fi }
Je suis donc faire appel à ma fonction avec comme paramètre l'ID du proc "père", que je stock dans une variable VAR. Cependant, elle n'est pas reconnu lorsque je l'utilise dans awk avec $VAR.
A voir également:
- Awk shell
- Classic shell - Télécharger - Personnalisation
- Ssh secure shell download - Télécharger - Divers Web & Internet
- Shell startup windows 10 - Guide
- Shell infrastructure host c'est quoi - Guide
- Efi shell version 2.31 - Forum Programmation
2 réponses
C'est normal, avec l'opérateur '...' le shell n'évalue pas les valeurs de variables (typiquement $VAR). Il faut les échapper. On sent bien en plus qu'il y a quelque chose à faire car $0, $1... n'ont pas la même signification en shelle et en awk.
Bref, il faut utiliser l'opérateur "..." et échapper (avec \) les opérateurs awk pour qu'ils ne soient pas interprétés en tant qu'opérateurs shell.
Voici par exemple un script shell qui liste les processus de root et qui apparaissent dans ps -Af :
Pour éviter ce genre d'erreur, tu peux utiliser un éditeur texte qui propose de la coloration syntaxique (par exemple vim) et qui t'aidera à comprendre comment ta commande shell est évaluée.
Bonne chance
Bref, il faut utiliser l'opérateur "..." et échapper (avec \) les opérateurs awk pour qu'ils ne soient pas interprétés en tant qu'opérateurs shell.
Voici par exemple un script shell qui liste les processus de root et qui apparaissent dans ps -Af :
#!/bin/sh VAR="root" ps -Af | awk "{if ( \$1 == \"$VAR\" ) print \$0}"
Pour éviter ce genre d'erreur, tu peux utiliser un éditeur texte qui propose de la coloration syntaxique (par exemple vim) et qui t'aidera à comprendre comment ta commande shell est évaluée.
Bonne chance
Merci, ça marche !