logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:programmation:shell:scripts [30/09/2013 23:29]
captnfab [Scripts Bash]
doc:programmation:shell:scripts [23/12/2015 19:16] (Version actuelle)
milou [Rédaction de scripts Shell]
Ligne 1: Ligne 1:
 ====== Rédaction de scripts Shell ====== ====== Rédaction de scripts Shell ======
  
-===== Le #=====+  * 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 ​!))
  
-===== Récupération des arguments ===== 
  
-===== Boucles et instructions conditionnelles ===== 
  
-Une instruction conditionnel (souvent appelé //bloc if-then-else//​ ou //bloc si-alors-sinon//​ se construit via une condition, et exécute une série de commandes ou une autre suivant le résultat de la condition. 
  
-==== Les conditions ​====+===== #! et exécution =====
  
-En shell, ​les conditions s'expriment ​de la manière suivante ​:+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 ​: 
 +<code bash>#​!/​bin/​sh</​code>​
  
-=== Sur les fichiers et les dossiers ===+Si vous voulez pouvoir exécuter votre script, n'​oubliez pas de donner ​les droits correspondant à l'​utilisateur devant l'​exécuter.
  
-| Condition ​         | Description ​                                    | Exemple ​                                | +Par exemple : 
-| ''​[ -e fichier ]''​ | //vrai// si ''​fichier''​ existe ​                 | <​code ​bash>[ -e /​etc/​network/​interfaces ]</​code> ​     | +<​code ​user>chmod a+x monscript.sh</​code>​
-| ''​[ -d dossier ]''​ | //vrai// si ''​dossier''​ est un répertoire ​      | <code bash>[ -d /​etc/​network ]</​code> ​                | +
-| ''​[ -f fichier ]''​ | //vrai// si ''​fichier''​ est un fichier régulier | <code bash>[ -f /etc/resolv.conf ]</​code> ​            | +
-| ''​[ -L fichier ]''​ | //vrai// si ''​fichier''​ est un lien symbolique ​ | <code bash>[ -L /​usr/​bin/​x-terminal-emulator ]</​code>​ | +
-| ''​[ -r fichier ]''​ | //vrai// si fichier est lisible (r)             | <code bash>[ -r /bin/bash ]</​code>​ | +
-| ''​[ -w fichier ]''​ | //vrai// si fichier est modifiable (w)          | <code bash>[ -w /tmp ]</​code>​ | +
-| ''​[ -x fichier ]''​ | //vrai// si fichier est exécutable (x)          | <code bash>[ -x /​sbin/​ifconfig ]</​code>​ | +
-| ''​[ f1 -nt f2 ]'' ​ | //vrai// si f1 plus récent que f2               | <code bash>[ /tmp/bla -nt /tmp/bli ]</​code>​ | +
-| ''​[ f1 -ot f2 ]'' ​ | //vrai// si f1 plus ancien que f2               | <code bash>[ /tmp/bla -ot /tmp/bli ]</​code> ​|+
  
-=== Sur les chaînes de caractères ===+Ou encore : 
 +<code root>​chmod root:admin monscript.sh</​code>​ 
 +<code root>​chmod 750 monscript.sh</​code>​
  
-| Condition ​        | Description ​                                              | Exemple ​                  | +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]
-''​[ ​-z chaîne ]''​ | //vrai// si ''​chaîne''​ est vide                           | <​code ​bash>[ -z "​$VAR"​ ]</​code> ​        | +===== Récupération des arguments =====
-| ''​[ ​-n chaîne ]''​ | //vrai// si ''​chaîne''​ est non-vide                       | <code bash>​[ ​-n "​$VAR" ​]</​code> ​        | +
-| ''​[ c1 c2 ]'' ​  | //vrai// si les chaînes ''​c1''​ et ''​c2''​ sont identiques ​ | <code bash>[ "​$ARG1" ​"​$VAR"​ ]</​code> ​ | +
-| ''​[ c1 !c2 ]'' ​ | //vrai// si les chaînes ''​c1''​ et ''​c2''​ sont différentes | <code bash>[ "​plouf"​ !"​$VAR"​ ]</​code>​ |+
  
-=== Sur les nombres entiers ===+L'​argument 0 est le chemin utilisé pour exécuter le programme.
  
-| Condition ​        | Description ​                                              ​| ​Exemple ​                  | +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''​. 
-| ''​[ n1 -eq n2 ]'' ​ ​| ​//vrai// si les nombres ​''​n1'' ​et ''​n2'' sont égaux ​  | <code bash>[ "​$num"​ -eq 42 ]</​code> ​ | +Il est accessible via la variable ​''​$0''​.
-| ''​[ n1 -ne n2 ]'' ​ ​| ​//vrai// si les nombres ''​n1''​ et ''​n2''​ sont inégaux | <code bash>[ "​$num" ​-ne 42 ]</​code>​ | +
-| ''​[ n1 -lt n2 ]'' ​ | //vrai// si les ''​n1''​ est strictement inférieur à ''​n2''​ | <code bash>[ "​$num" ​-lt 42 ]</​code>​ | +
-| ''​[ n1 -le n2 ]'' ​ | //​vrai// ​si les ''​n1'' ​est inférieur ou égal à ''​n2''​ | <code bash>[ "​$num"​ -le 42 ]</​code>​ | +
-| ''​[ n1 -gt n2 ]'' ​ | //vrai// si les ''​n1'' ​est strictement supérieur à ''​n2''​ | <code bash>[ "$num" -gt 42 ]</​code>​ | +
-''​[ n1 -ge n2 ]'' ​ | //vrai// si les ''​n1''​ est supérieur ou égal à ''​n2''​ | <code bash>[ "​$num"​ -ge 42 ]</​code>​ |+
  
-==== Instruction conditionnelle ​''​if'' ​====+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]]
  
-Pour exécuter ​''​commande1'' ​si ''​condition'' ​est vraieet ''​commande2''​ sinon, la syntaxe est la suivante :+La commande ​''​shift'' ​permet de décaler tous les arguments vers la gauche (''​$1'' ​désigne le secondetc.).
  
-<​code ​user>if condition;​ +Exemple : 
-then +<​code ​bash script>#!/bin/sh
-  commande1;​ +
-else +
-  commande2;​ +
-fi</code>+
  
-''​condition''​ est en fait un programme. On considère que ''​condition''​ est //vrai// s'il se termine bien et retourne un code de retour ''​0'',​ et //faux// sinon.+echo "​Commande initiale : $$@"
  
-Par exemple, ''/​bin/​true''​ est un programme fournissant une condition toujours vrai : +N=0 
-<code user>if /​bin/​true;​ +while [ -"$1" ];
-then +
-  echo 'Je suis dans le vrai'​ +
-else +
-  echo 'Je suis dans le faux'​ +
-fi</​code>​ +
-<​code>​Je suis dans le vrai.</​code>​ +
- +
-D'​autres exemples utilisant les conditions prédéfinies : +
- +
-Cette commande vérifie s'il existe un fichier ''/​bin/​echo''​ qui soit exécutable. Si c'est le cas, il l'​utilise pour afficher « Bonjour le monde. », sinon il utilise la commande ''​echo''​ intégrée au shell. +
-<code user>​if ​[ -e /bin/echo ] && [ -x /bin/echo ]; +
-then +
-  /bin/echo '​Bonjour le monde.'​ +
-else +
-  echo '​Bonjour le monde.'​ +
-fi</​code>​ +
- +
- +
-<code user>if [ "$USER" = "​smolski" ]+
-then +
-  echo 'Salut chef !' +
-else +
-  echo "​Bonjour $USER."​ +
-fi</​code>​ +
- +
-==== Boucle tant que ''​while''​ ==== +
- +
-<code user>​while condition;+
 do do
-  ​commande;+  ​N=$(($N+1)) 
 +  echo "​Argument $N : $1"; 
 +  shift;
 done</​code>​ done</​code>​
  
-Les conditions sont les mêmes que pour la commande ''​if''​. +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
-==== Boucle pour tout ''​for''​ ==== +===== Liens à visiter ​=====
- +
-<code user>for i in "les fleurs"​ "le lapin" "le choux" "la salade"​ "le staff DF"; +
-do +
-  echo "​J'​aime $i." +
-done</​code>​ +
- +
- +
-===== Quelques liens ===== +
- +
-Des scripts en cascade commentés en anglais. +
- +
-La page documentation ​: +
-  * http://​mywiki.wooledge.org/​BashGuide +
- +
-La page scripts ​+
-  * http://​mywiki.wooledge.org/​BashFAQ/​ +
- +
-//Merci //​**cthuluh** ! :-) +
- +
-===== Références ​===== +
- +
-[[http://​abs.traduc.org/​abs-fr/​|Guide avancé d'​écriture des scripts Bash]]+
  
 +  * [[doc:​programmation:​scripts | Divers scripts disponibles.]]
doc/programmation/shell/scripts.1380576587.txt.gz · Dernière modification: 30/09/2013 23:29 par captnfab

Pied de page des forums

Propulsé par FluxBB