« Bash basic » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
mAucun résumé des modifications
 
Ligne 78 : Ligne 78 :


# Solution 2
# Solution 2
seq 1 10 | while read line; do echo -n "$line "
seq 1 10 | while read line; do echo -n "$line " done


                
                

Version actuelle datée du 19 septembre 2025 à 18:18

Les boucles

Boucle "for"

C'est la base on boucle sur une liste.

for i in 1 2 3 4 5
do
echo -n "$i "
done

écrit :

1 2 3 4 5

la liste peut être le résultat d'une commande:

for i in $(seq 1 2 20)
do
 echo -n "$i "
done

nous donne :

1 3 5 7 9 11 13 15 17 19 

Ou encore :

for i in `ls -a`
do 
echo $i; 
done

donne... l'équivalant de la -a!

.
..
.bash_history
.bash_logout
.bash_profile
.bashrc
... et la suite ...

Attention cependant

for i in `ls -la`
do 
echo $i; 
done

Ne donne pas :

total 220
drwxr-xr-x.  6 JP38C44N users  4096 Sep 19 19:25 .
drwxr-xr-x. 55 root     root   4096 Nov  4  2024 ..
-rw-------   1 JP38C44N users 68412 Sep 19 19:13 .bash_history
-rw-r--r--.  1 JP38C44N users    18 Jun 20  2022 .bash_logout
-rw-r--r--.  1 JP38C44N users   141 Jun 20  2022 .bash_profile

mais

total
220
drwxr-xr-x.
6
JP38C44N
users
4096
Sep
19
19:25
.
drwxr-xr-x.
55
root
root
4096
Nov
4
2024
..
.......... la suite

Oui le séparateur est le retour chariot mais aussi l'espace, la tabulation...

While

While fait une itération, non pas sur une liste de mots mais sur des lignes.

Dans le même esprit que pour le for ci dessus:

# Solution 1
while read line; do
    echo -n "$line "
done <<< "$(seq 1 10)"

# Solution 2
seq 1 10 | while read line; do echo -n "$line " done

Je ne sais pas laquelle est la plus moche (ou la moins laide) mais les eux donnent :

1 2 3 4 5 6 7 8 9 10

On peut aussi faire la classique boucle infinie:

while [ 1 ]
do 
  echo -en "\r$(date +%H:%M:%S)"
  sleep 1
done

le [1] indique que la condition du while est toujours vrai.

Ensuite on écrit la date avec un echo :

  • -e pour lui dire d'interprété les caractères étendus dont \r
  • -n pour lui dire de ne pas ajouter un retour à la ligne apres la chaîne écrite

Le programme nous fait une jolie horloge digitale!