En shell comme dans tous les langages on peut passer des arguments

ls -l  # -l est l'argument passé à ls 

Exemple avec le script test suivant:

fichier test.sh:

#!/bin/bash
echo "Bonjour le monde !"
echo "\$#:" $#
echo "\$1:" $1
echo "\$2:" $2
chmod +x file.sh  # pour rendre exécutable file
bruno@bruno-HP-250-G6-Notebook-PC:~/test$ bash test.sh 
Bonjour le monde !
$#: 0
$1:
$2:
bruno@bruno-HP-250-G6-Notebook-PC:~/test$ bash test.sh 5 6 9
Bonjour le monde !
$#: 3
$1: 5
$2: 6
bruno@bruno-HP-250-G6-Notebook-PC:~/test$

Ce qu’il faut retenir sur les arguments en shell

VariableSignificationExemple si on exécute ./script.sh A B C
$0Nom du script tel qu’invoqué./script.sh
$1, $2Arguments positionnels (1er, 2e, etc.)$1 = A, $2 = B, $3 = C
$#Nombre total d’arguments passés3
$*Tous les arguments sous forme d’une seule chaîne"A B C"
$@Tous les arguments sous forme séparée"A" "B" "C"
"$*"Tous les arguments dans une chaîne unique (entre guillemets)"A B C" (1 seule boucle)
"$@"Tous les arguments, chacun séparé, entre guillemets"A" "B" "C" (3 itérations en boucle)
$$PID (identifiant du processus) du scriptex. 12345
$?Code de retour de la dernière commande exécutée0 ou autre selon succès/échec
$!PID du dernier processus exécuté en arrière-planPID d’un command &
$-Options actuelles du shell (set)ex. himBH

Lister tous les arguments avec $@

#!/bin/bash
for arg in "$@"; do
  echo "Argument : $arg"
done