Problème de shell script avec awk

Illuvatar

Membre actif
28 Décembre 2004
148
5
38
Hello,

Apres avoir mis à jour ma version de geek tool, l'idée m'est venue d'ameliorer la commande "df -k /" qui s'affichait sur mon bureau depuis des lustres afin d'obtenir un affichage plus convivial :).
J'ai donc créé un fichier shell script ( disque.sh ) :

Bloc de code:
#! /bin/tcsh

df -k / | tail -1 | awk '{ valeur = $5}'

echo "Etat du disque :" $valeur

# Fin du script

mais on me retourne un "tcsh: valeur: Undefined variable.".

Je n'avais quasiment jamais fait de script shell avant ce test infructueux donc j'imagine que j'ai commis une erreur basique de débutant.
Si quelqu'un pouvait m'aider :)

Merci d'avance.

@+
 
Pour les scripts, mieux vaut utiliser bash plutôt que tcsh:
Bloc de code:
#!/bin/sh
Ensuite, pour déterminer un nombre pour la commande tail, il faut utiliser l'option « -n »: tail -n 1.
Pour ce qui concerne awk, je ne suis pas assez expérimenté avec son langage.
Le script:
Bloc de code:
#!/bin/sh                                                                                      

df -k / | tail -n 1                                                  
echo "Etat du disque :" $valeur
# Fin du script
me donne ce résultat:
Bloc de code:
% source disque.sh                                       
/dev/disk0s3  62953624 23964528 38733096    38%    /
Etat du disque :
 
Thx pour ta réponse mais c'est justement au niveau de awk que ca coince pour moi car à la limite si je met
Bloc de code:
df -k / | tail -1 | awk '{ print $5}'
J'ai la sortie
Bloc de code:
94%

Mais je voulais remplacer le print par un stockage dans une variable ce qui apparemment ne marche pas...

N.B. : Pourquoi sh plutot que tcsh plz ?

@+
 
tu ne peux pas utiliser une variable interne du script awk, a l'extérieur de celui ci !
pourquoi ne pas mettre l'affichage directement dans awk ?
Bloc de code:
df -k / | tail -1 | awk '{ print "etat du disque :" $5 }'
 
Thx BooBoo c vraiment pas con ^^^
Je vais faire comme ca pour le moment.
Mais il faudra quand même se renseigner comment definir une variable globale dans un script awk car à y mieux réflechir le problème que j'avais avec l'ancien script doit être un problème de niveau de variable.

@+
 
Illuvatar a dit:
Thx BooBoo c vraiment pas con ^^^
Je vais faire comme ca pour le moment.
Mais il faudra quand même se renseigner comment definir une variable globale dans un script awk car à y mieux réflechir le problème que j'avais avec l'ancien script doit être un problème de niveau de variable.

@+
Pour cela, outre le site d'Isabelle Volant, il y a l'excellent Scripts sous Linux de Christophe Blaess. Je suis dedans depuis quelque temps.

En tout cas, cela m'aura donné des petites idées:
Bloc de code:
#!/bin/sh                                                                                      
df -h | grep $1 | awk '{  print "Espace disponible sur le disque " $6 ":  " $4 ", soit "$5\
  " utilisés."}'
exit 0
# Fin du script
ce qui donne:
Bloc de code:
% source disque.sh Audio 
Espace disponible sur le disque /Volumes/Audio_Video:  37G, soit 38% utilisés.
 
FjRond a dit:
Pour cela, outre le site d'Isabelle Volant, il y a l'excellent Scripts sous Linux de Christophe Blaess. Je suis dedans depuis quelque temps.

En tout cas, cela m'aura donné des petites idées:
Bloc de code:
#!/bin/sh                                                                                      
df -h | grep $1 | awk '{  print "Espace disponible sur le disque " $6 ":  " $4 ", soit "$5\
  " utilisés."}'
exit 0
# Fin du script
ce qui donne:
Bloc de code:
% source disque.sh Audio 
Espace disponible sur le disque /Volumes/Audio_Video:  37G, soit 38% utilisés.

enfin un qui a donné le -h ...

human readable c'est mieux :) mais perso df -h c'est bien aussi tout seul :)
 
tatouille a dit:
enfin un qui a donné le -h ...

human readable c'est mieux :) mais perso df -h c'est bien aussi tout seul :)
On est tout à fait d'accord. C'est ce que j'ai mis dans mon GeekTool:
Voir mon écran ;)