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édentesRévision précédente
Prochaine révision
Révision précédente
tutoriel:script_shell [Le 19/09/2023, 14:21] – [L'art d'écrire un script] 146.0.160.230tutoriel:script_shell [Le 24/04/2026, 14:08] (Version actuelle) – [La structure : `if`] note [] vs [[]] bcag2
Ligne 5: Ligne 5:
 ====== Introduction aux scripts shell ====== ====== Introduction aux scripts shell ======
  
-Un script shell permet d'automatiser une série d'opérations. Il se présente sous la forme d'un fichier contenant une ou plusieurs commandes qui  seront exécutées de manière séquentielle. Fantastique.+Un script shell permet d'automatiser une série d'opérations. Il se présente sous la forme d'un fichier contenant une ou plusieurs commandes qui  seront exécutées de manière séquentielle.
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Ligne 112: Ligne 112:
  
 ===== Les variables ===== ===== Les variables =====
-Il faut savoir que en bash les variables sont toutes des chaînes de caractères.\\+Il faut savoir qu'en bash les variables sont toutes des chaînes de caractères.\\
 Cela dépendra de son USAGE, pour une opération arithmétique prochaine voir : let ma_variable sinon pour conserver une valeur : Cela dépendra de son USAGE, pour une opération arithmétique prochaine voir : let ma_variable sinon pour conserver une valeur :
 il suffit de lui donner un nom et une valeur avec l'affectation égale : il suffit de lui donner un nom et une valeur avec l'affectation égale :
Ligne 252: Ligne 252:
     echo "Bien joué !"     echo "Bien joué !"
   else   else
-    echo "Non mais quand même !!! SAPERLIPOPETTE C'ÉTAIT $1 ET NON PAS $Reslt ESPECE DE NOUILLE !!!" +    echo "Non mais quand même !!! C'ÉTAIT $1 ET NON PAS $Reslt PETIT FRIPON !!!" 
-    sleep 3 # Juste pour le fun du script qui enrage ;-p +    sleep 3 # Juste pour le fun du script qui rage ;-p 
-    echo "Désolé, je te bannis de ubuntu-fr.org ! Et schbim !! Dommage tu ne peux rien contre moi !!!"+    echo "Donc je te bannis de ubuntu-fr.org ! Et toc !! Tu ne peux rien contre moi !!!"
     exit 1     exit 1
   fi   fi
Ligne 266: Ligne 266:
 Exemple: besoin de définir des plages de valeurs (1 à 500 puis 501 à 1000 puis 1001 à 1500…) Exemple: besoin de définir des plages de valeurs (1 à 500 puis 501 à 1000 puis 1001 à 1500…)
 <code bash> <code bash>
-id_per_step = 500+id_per_step=500
 for (( i=0; i<8; i++ )); do for (( i=0; i<8; i++ )); do
  (( min_step_id = 1 + $i * $id_per_step ))  (( min_step_id = 1 + $i * $id_per_step ))
Ligne 284: Ligne 284:
  
 ^ Syntaxe ^ Fonction réalisée ^ ^ Syntaxe ^ Fonction réalisée ^
-| -e fichier      | renvoie 0 si fichier existe.                           | +| -e fichier (ou répertoire)      | renvoie 0 si fichier/répertoire existe.                           | 
-| -d fichier      | renvoie 0 si fichier existe et est un répertoire.      +| -d répertoire                 | renvoie 0 si fichier existe et est un répertoire.                 
-| -f fichier      | renvoie 0 si fichier existe et est un fichier 'normal'.| +| -f fichier                    | renvoie 0 si fichier existe et est un fichier (pas un répertoire).| 
-| -w fichier      | renvoie 0 si fichier existe et est en écriture.        +| -w fichier                    | renvoie 0 si fichier existe et est en écriture.                   
-| -x fichier      | renvoie 0 si fichier existe et est exécutable.         +| -x fichier                    | renvoie 0 si fichier existe et est exécutable.                    
-| f1 -nt f2       | renvoie 0 si f1 est plus récent que f2.                +| f1 -nt f2                     | renvoie 0 si f1 est plus récent que f2.                           
-| f1 -ot f2       | renvoie 0 si f1 est plus vieux que f2.                 |+| f1 -ot f2                     | renvoie 0 si f1 est plus vieux que f2.                            | 
 +<note tip>Si vous préférez vérifier que votre //fichier/répertoire// N’existe PAS, //-e// -> //! -e//</note>
  
 === Opérateurs de comparaison numérique === === Opérateurs de comparaison numérique ===
Ligne 385: Ligne 386:
     ls -la     ls -la
 elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then elif [ "$ouinon" = "n" ] || [ "$ouinon" = "N" ]; then
-    echo "Ok, Aurevoir! "+    echo "Ok, bye! "
 else else
     echo "Il faut taper Y ou N!! Pas $ouinon"     echo "Il faut taper Y ou N!! Pas $ouinon"
 fi fi
 </code> </code>
 +<note tip>Simple ou double crochets ?(((EN) https://stackoverflow.com/questions/13542832/what-is-the-difference-between-single-and-double-square-brackets-in-bash et \\ (FR) https://blog.stephane-robert.info/docs/admin-serveurs/linux/exploiter/scripts/conditions-bash/#--vs---vs-))\\  
 +Les crochets simples [] correspondent à des tests de condition conformes au shell POSIX.\\  
 +Les doubles permettent d'avantage d'opérations dont les expressions rationelles ([[wpfr>Expression_régulière|REGEX]])\\  
 +Préférez les crochets simples pour une meilleure compatibilité. 
 +</note>
 === Explication === === Explication ===
  
Ligne 413: Ligne 418:
  
 Exemple : Exemple :
-créer le répertoire titi s'il n' existe pas+créer le répertoire toto s'il n' existe pas
 <code bash> <code bash>
-[ ! -d /tmp/titi ] && mkdir /tmp/titi +[ ! -d /tmp/toto ] && mkdir /tmp/toto 
-[ -d /tmp/titi ] || mkdir /tmp/titi +[ -d /tmp/toto ] || mkdir /tmp/toto 
-test ! -d /tmp/titi && mkdir  /tmp/titi +test ! -d /tmp/toto && mkdir  /tmp/toto 
-rm -rf /tmp/titi;mkdir /tmp/titi+rm -rf /tmp/toto;mkdir /tmp/toto
 </code> </code>
  
Ligne 535: Ligne 540:
      
 case "$on" in case "$on" in
-    oui | o | O | Oui | OUI ) echo "Allez boire un Thé !";;+    oui | o | O | Oui | OUI ) echo "Allez faire du café !";;
     non | n | N | Non | NON ) echo "Programmez !";;     non | n | N | Non | NON ) echo "Programmez !";;
     * ) echo "Ah bon ?";;     * ) echo "Ah bon ?";;
Ligne 547: Ligne 552:
 <code bash> <code bash>
 case "$truc....." in case "$truc....." in
-    [nN] *) echo "Blablablabla...";;+    [nN] *) echo "Blablabla...";;
     n* | N* ) echo "Bla....";;     n* | N* ) echo "Bla....";;
 </code> </code>
Ligne 732: Ligne 737:
 #favoritefood #favoritefood
 if [ ${LANG:0:2} = "fr" ]; then if [ ${LANG:0:2} = "fr" ]; then
-    echo "Vous aimez la choucroute !"+    echo "Vous aimez les moules frites !"
 elif [ ${LANG:0:2} = "en" ]; then elif [ ${LANG:0:2} = "en" ]; then
-    echo "You love the... raclette !"+    echo "You love the... pudding !"
 elif [ ${LANG:0:2} = "es" ]; then elif [ ${LANG:0:2} = "es" ]; then
-    echo "Te gusta el pata negra !"    +    echo "Te gusta el jamón !"    
 else else
     echo ":'-("     echo ":'-("
Ligne 745: Ligne 750:
 <code bash> <code bash>
 $ ./favoritefood $ ./favoritefood
-Vous aimez la choucroute !+Vous aimez les moules frites !
 $ env LANG=en ./favoritefood $ env LANG=en ./favoritefood
-You love the... raclette!+You love the... pudding !
 $ env LANG=es ./favoritefood $ env LANG=es ./favoritefood
-Te gusta el pata negra!+Te gusta el jamón !
 $ env LANG=it ./favoritefood $ env LANG=it ./favoritefood
 :'-( :'-(
Ligne 826: Ligne 831:
  
 <code bash> <code bash>
-echo -e '\033[1;30;47m titi \033[0;32m est sur \033[1;33m un bateau \033[0m'+echo -e '\033[1;30;47m toto \033[0;32m est sur \033[1;33m un bateau \033[0m'
 </code> </code>
  
Ligne 877: Ligne 882:
 Exemple : Exemple :
 supposons que vous ayez une base de données, avec 3 catégories d'enregistrements possibles : supposons que vous ayez une base de données, avec 3 catégories d'enregistrements possibles :
-canard bleu, canard blanc, canard rose ayant chacun 30 individus.+éléphant bleu, éléphant blanc, éléphant rose ayant chacun 30 individus.
 Votre script doit compter le nombre d'éléphants bleus et blancs. Votre script doit compter le nombre d'éléphants bleus et blancs.
 Deux possibilités s'offrent à vous : Deux possibilités s'offrent à vous :
-  * calculer le nombre de canard verts canard violets+  * calculer le nombre d'éléphants bleus éléphants blancs
 ou ou
-  * calculer le nombre total de canard - nombre de canard roses+  * calculer le nombre total d'éléphants - nombre d'éléphants roses
  
 Quel algorithme choisissez-vous ? Quel algorithme choisissez-vous ?
  
-Résultat : le premier car dans le deuxième il faut d'abord calculer le nombre total de canard.+Résultat : le premier car dans le deuxième il faut d'abord calculer le nombre total d'éléphants, donc un calcul en plus :-P .
  
 ===== Liens ===== ===== Liens =====