====== Rédaction de scripts Shell ======
* Objet : Rédaction de scripts Shell
* Niveau requis : {{tag>avisé}}
* Commentaires : //Faire des choses compliquées avec votre shell.//
* Ce tuto est la suite logique du tuto [[doc:programmation:shell:|sur le shell]]. N'oubliez pas de lire également [[doc:programmation:shell:|sur l'utilisation avancée du shell]].
* Suivi : {{tag>à-tester}}
* Création par [[user>captnfab]] le 30/09/2013
* Testé par .... le ....
* Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=68350 | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
===== #! et exécution =====
La première ligne d'un script shell doit toujours commencer par ''#!'', suivi ensuite de l'interpréteur de commande à utiliser.
Si vous n'utilisez pas de commande propres à ''bash'' ou ''zsh'', vous pouvez laisser l'interpréteur de commande par défaut :
#!/bin/sh
Si vous voulez pouvoir exécuter votre script, n'oubliez pas de donner les droits correspondant à l'utilisateur devant l'exécuter.
Par exemple :
chmod a+x monscript.sh
Ou encore :
chmod root:admin monscript.sh
chmod 750 monscript.sh
Voir ce lien où il est expliqué trois méthodes d'exécution d'un script : [[doc:programmation:shells:bash-les-differents-caracteres-speciaux?comment-executer-ses-scripts]]
===== Récupération des arguments =====
L'argument 0 est le chemin utilisé pour exécuter le programme.
Exemple, cela peut-être ''./monscript'' ou ''monscript'' s'il est dans le PATH, ou même ''./un-lien-vers-mon-script'' si vous avec utilisé ''ln''.
Il est accessible via la variable ''$0''.
Le premier argument est ensuite accessible via ''$1'', le deuxième via ''$2'', etc.
L'ensemble des arguments est accessible via ''$@'' alors que la concaténation de tous les arguments (séparés par des espaces) est accessible via ''$*''.Le nombre d'arguments est accessible via ''$#''.\\
Voir : [[doc:programmation:shells:bash-les-differents-caracteres-speciaux?variables-de-substitution-predefinies-principalement-dans-les-scripts]]
La commande ''shift'' permet de décaler tous les arguments vers la gauche (''$1'' désigne le second, etc.).
Exemple :
#!/bin/sh
echo "Commande initiale : $0 $@"
N=0
while [ -n "$1" ];
do
N=$(($N+1))
echo "Argument $N : $1";
shift;
done
Pour tout comprendre de cet exemple voir les [[doc:programmation:shell:avancee|Fonctionnalités avancées du Shell]]
ainsi que les liens que vous y trouverez.
===== Liens à visiter =====
* [[doc:programmation:scripts | Divers scripts disponibles.]]