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 26/05/2023, 10:18] – ====== Introduction aux scripts shell ====== 193.178.219.33tutoriel: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 880: Ligne 885:
 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 d'éléphants verts + éléphants violets+  * calculer le nombre d'éléphants bleus + éléphants blancs
 ou ou
   * calculer le nombre total d'éléphants - nombre d'éléphants roses   * calculer le nombre total d'éléphants - nombre d'éléphants roses