Dans cette documentation, vous allez apprendre le concept d'argument en Bash.
Un "argument" en langage script est une élément que vous allez ajouter à l'exécution du script afin de pouvoir "préciser" ce que vous souhaitez faire avec.
Les arguments sont utilisez quotidiennement dès que vous utilisez un terminal (Windows comme Linux ou MacOS), par exemple après la commande "ls" vous allez rentrer comme argument le nom du dossier que vous souhaitez afficher !
La synthaxe est la suivante :
[ilan@machine-bash ~]$ [commande] [argument]
[ilan@machine-bash ~]$ ls /etc
Nous pouvons faire de même avec nos script ce qui me permet alors d'intéragir directement avec lui sans avoir besoin d'utiliser la commande read
Pour appeler un argument, nous utiliserons des variables "spéciales" qui ont le format suivant :
Par exemple le premier argument sera $1, le second $2, le 42ème $42, etc...
Prenons le script suivant en exemple
#!/bin/bash
echo "bonjour $1"
echo "ton second argument est $2"
Si j'exécute ce script en lui donnant 2 arguments toto
et tata
[ilan@machine-bash ~]$ chmod +x script.sh
[ilan@machine-bash ~]$ ./script.sh toto tata
Voici le résultat
bonjour toto
ton second argument est tata
Le script ne plantera pas si vous rentrez un seul argument, il retournera simplement une chaine de caractères vide (= " ")
[ilan@machine-bash ~]$ ./script.sh toto
bonjour toto
ton second argument est
Je peux donc a partir de la utiliser mes arguments afin d'intéragir directement avec mon script.
Je veux créer un script qui me permet d'afficher plusieurs dossiers en même temps. (même si ls le fait déjà)
Comme d'habitude, je commence par créer mon script multiple-ls.sh
[ilan@machine-bash ~]$ vim multiple-ls.sh
Je créer le script en précisant ici 3 arguments
#!/bin/bash
firstLS=$(ls $1)
echo $firstLS
secondLS=$(ls $2)
echo $secondLS
thirdLS=$(ls $3)
echo $thirdLS
A l'exécution avec les arguments /etc
/var
& /home
j'ai l'affichage suivant
[ilan@machine-bash ~]$ ./multiple-ls.sh /etc /var /home
abrt dnsmasq.conf iproute2 modprobe.d qemu-ga subgid-
acpi dnsmasq.d ipsec.conf modules-load.d rc0.d subuid
adjtime dracut.conf ipsec.d motd rc1.d subuid-
aliases dracut.conf.d ipsec.secrets motd.d rc2.d sudo.conf
alsa egl iscsi mtab rc3.d sudoers
[...] [...] [...] [...] [...]
account adm cache crash db empty ftp games kerberos lib local lock log mail named nis opt preserve run spool tmp www yp
ilan toto
Super ! Mon script fonctionne et l'affichage de mes 3 arguments s'effectue bien !
Si je voulais rendre ça visuellement "plus sympa", je pourrais ajouter une ligne juste au dessus de chacun des mes commandes echo
précisant le nom du dossier
#!/bin/bash
firstLS=$(ls $1)
echo $1 :
echo $firstLS
secondLS=$(ls $2)
echo $2 :
echo $secondLS
thirdLS=$(ls $3)
echo $3 :
echo $thirdLS
Qui donne l'affichage suivant
[ilan@machine-bash ~]$ ./multiple-ls.sh /etc /var /home
/etc :
abrt dnsmasq.conf iproute2 modprobe.d qemu-ga subgid-
acpi dnsmasq.d ipsec.conf modules-load.d rc0.d subuid
adjtime dracut.conf ipsec.d motd rc1.d subuid-
aliases dracut.conf.d ipsec.secrets motd.d rc2.d sudo.conf
alsa egl iscsi mtab rc3.d sudoers
[...] [...] [...] [...] [...]
/var :
account adm cache crash db empty ftp games kerberos lib local lock log mail named nis opt preserve run spool tmp www yp
/home :
ilan toto
Vous savez maintenant comment utiliser les arguments en Bash.
Vous pouvez aller plus loin, si vous le souhaitez, n’hésitez pas à me contacter dans ce cas ou à vous renseigner sur les autres tutos présents sur mon wiki ou directement sur Google !
Si vous souhaitez avoir plus d’informations ou si vous avez découvert une coquille sur ce tutoriel, merci de me contacter à l’adresse i.martel@imweb.ovh
v1 - Version initiale