Il est également possible de rediriger uniquement les commandes situées à l'intérieur d'une structure de contrôle.
Les redirections doivent être écrites derrière le mot clé qui ferme la structure de contrôle.
A l'exécution, elles sont mises en place avant le traitement de la structure de contrôle.*
Exemple :
Dans le script suivant, seules les commandes situées à l'intérieur de la boucle while seront redirigées.
$ nl test7.sh
1 #!/bin/bash
2 echo "Lancement du script"
3 cpt=1
4 while read ligne
5 do
6 echo "Ecriture de la ligne $cpt"
7 echo $ligne
8 ((cpt+=1))
9 done </etc/passwd >/tmp/resultat.log
10 exit 0
$ ./test7.sh
Lancement du script
$ nl /tmp/resultat.log
1 Ecriture de la ligne 1
2 root:x:0:0:root:/root:/bin/bash
3 Ecriture de la ligne 2
4 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
5 Ecriture de la ligne 3
6 bin:x:2:2:bin:/bin:/bin/sh
$
Rediriger un bloc avec des fichiers ouverts en amont
$ nl test8.sh
1 #!/bin/bash
2 exec 3</etc/passwd 4>/tmp/resultat.log
3 echo "Lancement du script"
4 cpt=1
5 while read ligne
6 do
7 # Ecriture des données dans le fichier /tmp/resultat.log
8 # correspondant au descripteur 4
9 echo "Ecriture de la ligne $cpt"
10 echo $ligne
11 ((cpt+=1))
12 done <&3 >&4
13 echo "Fin du script"
14 exec 3<&-
15 exec 4>&-
16 exit 0
$ ./test8.sh
Lancement du script
Fin du script
$ nl /tmp/resultat.log
1 Ecriture de la ligne 1
2 root:x:0:0:root:/root:/bin/bash
3 Ecriture de la ligne 2
4 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
5 Ecriture de la ligne 3
6 bin:x:2:2:bin:/bin:/bin/sh
$