[gull] truc et astuce: Utiliser des array de 1 element pour encadrer les boucles

Félix Hauri felix at f-hauri.ch
Mon Mar 1 18:43:02 CET 2004


Bon cela manquait un peu de précision, de plus il fallait ne pas
manquer de lire le sujet...

J'utilise en l'occurence une propriété du shell qui n'est pas un
language ``strict'' et de fait autorise les références non définies:

En effet la commande
$ echo $UneVariableNonDefinie
ne répondra rien, de plus le code de retour sera 0 (Ok).

En effet, le shell s'accomode très bien de l'inexistance d'une variable, à
tel point que le test ``[ $i -gt 0 ]'' générera une erreure si $i n'est
pas défini.

Autre particularité: Toute variable est potentiellement la première
entrée d'une ``array'' (ou chaîne de variables)
$ first=-first
$ echo ${first[0]}
-first
$ echo ${first[1]}

$ echo ${first[999]}

.

On Mon, 23 Feb 2004, Félix Hauri wrote:

> Dans la série bash (ver >= 2.04)
> 
> Pour répéter une commande en spécifiant des arguement pour la première et
> pour la dernière opération:
> 
#! /bin/sh
first=-first
unset nfirst
last=-last
nlast=-notlast
for (( i=10 ; i-- ;))           # syntaxe sympatique par excellence! ;)
do
   echo cmde ${last[$i]} ${nlast[$((i==0))]} $first $nfirst -permanent
   unset first
   nfirst=-notfirst
   done
>...

En remplacant ligne ``echo cmde...'' dans l'exemple précédant par:
   printf "cmde 1:%s 2:%s 3:%s 4:%s 5:%s\n" \
      ${last[$i]} ${nlast[$((i==0))]} $first $nfirst -permanent
puis, par:
   printf "cmde 1:%s 2:%s 3:%s 4:%s 5:%s\n" \
      "${last[$i]}" "${nlast[$((i==0))]}" "$first" "$nfirst" -permanent

on comprend à quel point une variable inexistante n'existe pas  :-b

On Mon, 23 Feb 2004, Marc SCHAEFER wrote:

>
> Et de plus, ton shred ne marchera pas forcément mieux :)
 
> > Application: la commande ``shred'' ne fonctionnant pas correctement
> > sur des filesystems journalisés ou raids (cf manpage):
> >
> > $ a=-u;for ((i=25;i--;));do shred -n1 ${a[$i]} fichier-ou-* ;sync;done

Juste!
Ne pas trop compter sur cette commande pour tout ce qui n'est pas local,
ainsi que les filesystemes trop complexes, jounalisé, raid, etc.

En fait, je crois qu'il n'y a que les vieux fs en brut sur le disque-dur
avec lesquels cette commande est efficace à coup sûr...

...Ou alors peut-être ``shred /dev/hda'' mais ça je n'ai pas encore
essayé...

--
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch




More information about the gull mailing list