Shell - Utilisation de variable avec awk

Résolu/Fermé
gamerounet - 29 sept. 2011 à 09:48
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 30 sept. 2011 à 12:04
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:


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:

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 29/09/2011 à 09:57
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 :

#!/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
0
En effet, j'avais essayé l'opérateur "..." , mais sans échappant les bon "$".
Merci, ça marche !
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
29 sept. 2011 à 19:00
De rien, bonne continuation ;-)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 30/09/2011 à 12:05
hello
on peut aussi faire
ps -Af | awk -v  var=$VAR '/java/ && $3==var {print $0}'
0