Salut tout le monde , je comprend pas le rôles de ces variables.
Même si je sais que
$# contient le nombre de paramètres
$0 contient le script
$1 à $9 = les 9 Paramètres
Mais la question est: on s'en sert à quel moment dans le script?
Merci
Mais la question est: on s'en sert à quel moment dans le script ?
Y a une quantité industrielle de moyens d'utiliser tous ces paramètres dans un script
Dès que tu veux que le script agisse en fonction de ce que tu lui passes comme argument ou qu'un programme lui passe en argument, en fait
Pareil pour une fonction d'ailleurs
Si je fais un
read -p 'quel est votre nom' name
echo "Votre nom est $name"
Le "$" est considéré comme un de ces paramètres ?
Le 09 février 2018 à 14:00:57 Mr_Linstit a écrit :
Si je fais unread -p 'quel est votre nom' name
echo "Votre nom est $name"
Le "$" est considéré comme un de ces paramètres ?
Non, read va stocker ce qui a été saisi dans la variable $name et echo va l'afficher
Par exemple, si tu lances le script "mon_script.sh" avec la commande "./mon_script.sh foo bar" :
$1 vaudra foo
$2 vaudra bar
$@ vaudra foo bar
$# vaudra 2
Non, read va stocker ce qui a été saisi dans la variable $name et echo va l'afficher
Par exemple, si tu lances le script "mon_script.sh" avec la commande "./mon_script.sh foo bar" :
$1 vaudra foo
$2 vaudra bar
$@ vaudra foo bar
$# vaudra 2
je comprend mieux merci
Mais pourquoi appliquer des paramètres au lancement du script?
On va prendre un exemple hypothétique à la con
Mettons que tu veuilles renommer incrémentalement des fichiers
Tu peux le faire manuellement mais ça va très rapidement devenir chiant, et ça va devenir encore plus rapidement chiant si tu veux le faire sur beaucoup de fichiers (faudra le faire avec une boucle etc.)
Une solution potentielle serait de faire un script (en l'occurrence en bash vu que c'est le language que tu as mentionné)
#!/usr/bin/env bash
compteur=0
# tant que le nombre d'arguments restants est supérieur à 0, faire...
while [[ $# -gt 0 ]]; do
mv "$1" "$compteur"
# incrémenter le compteur de 1
(( compteur++ ))
# passer à l'argument suivant
# $2 devient $1 au prochain passage de la boucle (par exemple)
shift
done
Et maintenant (en admettant que le script soit dans ton PATH), lancer "mon_script *" va renommer incrémentalement tous les fichiers dans le répertoire courant
Merci Sepaclure pour toute ces infos qui vont mettre utile
Si tu veux un autre exemple trivial, mettons que tu trouves que la commande pour changer le volume sur ton système est trop chiante à taper et pas super intuitive (par exemple pour augmenter le volume de 10% avec pactl ça serait un truc infect dans le genre pactl set-sink-volume <le nom de ta carte son> +10%
) et que tu veux juste te faire un petit script pour le monter et le descendre de 10%
#!/usr/bin/env bash
case "$1" in
up) <la longue commande à la con> +10%
down) <la longue commande à la con> -10%
esac
TL;DR : en gros ces variables sont essentielles dès que tu veux que ton script soit un peu interactif directement via la ligne de commande
Tiens, j'avais fait ça pour le son chez moi
mixerctl -w outputs.master=$1,$1
mixerctl -w outputs.master2=$1,$1
Dans un fichier que j'ai nommé "VolumeLaptop"
Quand j'ouvre rapidement mon dmenu, je fais "Vol", il me sort VolumeLaptop et plus qu'à entrer le niveau de volume que je veux et voilà, ça me prend 2 secondes et j'ai le son qui est au niveau que je veux
Dans le même genre, aussi :
youtube-dl -o "%(playlist_index)s-%(title)s" "$1"
Dans un script que j'ai appelé youtube-playlist parce que j'en avais marre d'avoir les vidéos dans un ordre alphabétique quand celles-ci se suivaient chronologiquement à la base. Du coup j'ai youtube-dl (le classique), youtube-mp3 (il récupère uniquement le son et le met au format mp3) et youtube-playlist (pour garder le même ordre que sur le site).
Mon setup personnel est assez majoritairement composé de scripts en tous genres, donc c'est pas moi qui vais te contredir quant à leur utilité potentielle