# Problème de shell script avec awk



## Illuvatar (28 Août 2005)

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 ) :


```
#! /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.

@+


----------



## FjRond (29 Août 2005)

Pour les scripts, mieux vaut utiliser bash plutôt que tcsh:

```
#!/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:

```
#!/bin/sh                                                                                      

df -k / | tail -n 1                                                  
echo "Etat du disque :" $valeur
# Fin du script
```
me donne ce résultat:

```
% source disque.sh                                       
/dev/disk0s3  62953624 23964528 38733096    38%    /
Etat du disque :
```


----------



## Illuvatar (29 Août 2005)

Thx pour ta réponse mais c'est justement au niveau de awk que ca coince pour moi car à la limite si je met 

```
df -k / | tail -1 | awk '{ print $5}'
```
J'ai la sortie

```
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 ?

@+


----------



## geoffrey (29 Août 2005)

le sh sera present partout (et sur tous les unix), pas le tcsh.


----------



## BooBoo (29 Août 2005)

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 ?

```
df -k / | tail -1 | awk '{ print "etat du disque :" $5 }'
```


----------



## Illuvatar (29 Août 2005)

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.

@+


----------



## FjRond (29 Août 2005)

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:

```
#!/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:

```
% source disque.sh Audio 
Espace disponible sur le disque /Volumes/Audio_Video:  37G, soit 38% utilisés.
```


----------



## tatouille (29 Août 2005)

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:
> 
> ...



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

human readable c'est mieux  mais perso df -h c'est bien aussi tout seul


----------



## FjRond (29 Août 2005)

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


----------

