« Bash basic » : différence entre les versions

De knowledge
Aller à la navigation Aller à la recherche
(Page créée avec « == Les boucles == === Boucle "for" === C'est la base on boucle sur une liste.<syntaxhighlight lang="bash"> for i in 1 2 3 4 5 do echo -n "$i " done </syntaxhighlight>écrit : 1 2 3 4 5 la liste peut être le résultat d'une commande:<syntaxhighlight lang="bash"> for i in $(seq 1 2 20) do echo -n "$i " done </syntaxhighlight>nous donne : 1 3 5 7 9 11 13 15 17 19 Ou encore :<syntaxhighlight lang="bash"> for i in `ls -a` do echo $i; done </syntaxhighlight>d... »)
 
mAucun résumé des modifications
Ligne 83 : Ligne 83 :
</syntaxhighlight>Je ne sais pas laquelle est la plus moche (ou la moins laide) mais les eux donnent :
</syntaxhighlight>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
  1 2 3 4 5 6 7 8 9 10
On peut aussi faire la classique boucle infinie:<syntaxhighlight lang="bash">
while [ 1 ]
do
  echo -en "\r$(date +%H:%M:%S)"
  sleep 1
done
</syntaxhighlight>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!

Version du 19 septembre 2025 à 17:59

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 "

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!