La commande shift permet de décaler la liste des arguments d'une ou plusieurs positions vers la gauche.
Cette commande est utilisée dans le cas où le premier argument n'a pas à subir le même traitement que les suivants.
Dans ce cas, le premier argument doit être sauvegardé dans une variable et l'exécution de la commande shift entraine le remplacement du premier argument par le second et ainsi de suite.
$ nl monTroisiemeScript.sh
1 #! /bin/bash
2 # Ce script doit recevoir en premier argument le nom d'un dossier puis des noms de fichiers pour les suivants
3 # Affichage des variables avant l'utilisation de la commande shift
4 echo -e "Affichage avant exécution de la commande shift\n"
5 echo "1er argument \$1 : $1"
6 echo "1er argument \$2 : $2"
7 echo "1er argument \$3 : $3"
8 echo "1er argument \$4 : $4"
9 echo "Tous les arguments \$* : $*"
10 echo -e "Le nombre d'argument \$# : $#\n"
11 # On sauvegarde le premier argument dans la variable rep
12 rep=$1
13 # On décale tous les arguments avec la commande shift
14 shift
15 # Affichage des variables après l'exécution de la commande shift
16 echo -e "Affichage après exécution de la commande shift\n"
17 echo "1er argument \$1 : $1"
18 echo "1er argument \$2 : $2"
19 echo "1er argument \$3 : $3"
20 echo "1er argument \$4 : $4"
21 echo "Tous les arguments \$* : $*"
22 echo -e "Le nombre d'argument \$# : $#\n"
23 # Création du répertoire
24 mkdir $rep
25 # On se positionne dans le nouveau répertoire
26 cd $rep
27 # Création des fichiers dans le nouveau répertoire
28 for fichier in $*
29 do
30 touch $fichier
31 done
$ chmod u+x monTroisiemeScript
Exécution du script :
$ ./monTroisiemeScript.sh test fic1 fic2 fic3 fic4 fic5 fic6
Affichage avant exécution de la commande shift
1er argument $1 : test
1er argument $2 : fic1
1er argument $3 : fic2
1er argument $4 : fic3
Tous les arguments $* : test fic1 fic2 fic3 fic4 fic5 fic6
Le nombre d'argument $# : 7
Affichage après exécution de la commande shift
1er argument $1 : fic1
1er argument $2 : fic2
1er argument $3 : fic3
1er argument $4 : fic4
Tous les arguments $* : fic1 fic2 fic3 fic4 fic5 fic6
Le nombre d'argument $# : 6
$ ls -l ./test/
total 0
-rw-r--r-- 1 toto toto 0 2011-10-25 09:01 fic1
-rw-r--r-- 1 toto toto 0 2011-10-25 09:01 fic2
-rw-r--r-- 1 toto toto 0 2011-10-25 09:01 fic3
-rw-r--r-- 1 toto toto 0 2011-10-25 09:01 fic4
-rw-r--r-- 1 toto toto 0 2011-10-25 09:01 fic5
-rw-r--r-- 1 toto toto 0 2011-10-25 09:01 fic6
$