Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine 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.230 | tutoriel:script_shell [Le 18/05/2026, 23:29] (Version actuelle) – [Méthode dans un terminal] typos krodelabestiole | ||
|---|---|---|---|
| Ligne 5: | Ligne 5: | ||
| ====== Introduction aux scripts shell ====== | ====== Introduction aux scripts shell ====== | ||
| - | Un script shell permet d' | + | Un script shell permet d' |
| <code bash> | <code bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| Ligne 56: | Ligne 56: | ||
| ==== Méthode dans un terminal ==== | ==== Méthode dans un terminal ==== | ||
| - | Il suffit de se placer dans le dossier où est le script, | + | Pour utiliser un |
| - | mais pas toujours | + | < |
| - | ou si vous voulez | + | La commande est à adapter selon l'application et selon le [[: |
| + | <code bash>bash script.sh</ | ||
| - | Puis vous pouvez exécuter le script en faisant : <code bash>./ | + | Grâce au [[# |
| - | mais pourquoi | + | Il faut avant tout le rendre exécutable avec '' |
| + | Pour ceci entrer la commande : | ||
| + | <code bash>chmod +x script.sh</ | ||
| + | |||
| + | Puis exécuter | ||
| + | <code bash>./script.sh</ | ||
| === Le chemin ./ === | === Le chemin ./ === | ||
| - | Il peut être intéressant d'ajouter un répertoire au " | + | Ce ''./'' dépend du [[: |
| - | Je m'explique, quand vous tapez une commande ("ls" | + | |
| - | Pour voir à quoi ressemble | + | === $PATH === |
| + | |||
| + | La [[: | ||
| + | |||
| + | En plaçant un fichier exécutable (comme un script) dans l'un de ces répertoires, | ||
| + | Ubuntu dispose d'un répertoire des [[: | ||
| + | |||
| + | Pour voir à quoi ressemble | ||
| echo $PATH | echo $PATH | ||
| - | Cette commande | + | Cette commande |
| / | / | ||
| - | C'est à dire que le shell va aller voir si la définition de la commande tapée (" | + | C'est à dire que le système |
| - | Ajouter | + | On peut aussi ajouter |
| - | Pour pouvoir utiliser vos scripts en tapant directement leur nom (sans le " | + | Pour ceci, il suffit |
| - | Pour ceci, il suffit | + | |
| export PATH=$PATH: | export PATH=$PATH: | ||
| + | où '' | ||
| La commande | La commande | ||
| Ligne 87: | Ligne 99: | ||
| / | / | ||
| - | et je peux lancer le script appelé | + | et on peut lancer le script appelé |
| + | | ||
| - | <note tip> | + | <note tip> |
| + | Cette modification du '' | ||
| + | Pour rendre la modification permanente, ajouter | ||
| + | </ | ||
| - | <note important> | + | <note important> |
| + | En l' | ||
| + | </ | ||
| === Les différents types de shells === | === Les différents types de shells === | ||
| - | Comme vous avez sûrement dû l' | + | Il existe différents types de //shells//, ou interpréteurs de commandes : |
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Il existe encore beaucoup d' | ||
| + | |||
| + | La commande '' | ||
| + | |||
| + | < | ||
| + | On peut aussi écrire des scripts dans d' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * etc. | ||
| + | </ | ||
| - | * [[wpfr> | + | === Shebang === |
| - | * [[:bash]] (//Bourne Again SHell//) : conçu par le projet GNU, shell linux ; le shell par défaut sur Ubuntu ; | + | |
| - | * rbash : un shell restreint basé sur bash. Il existe de nombreuses variantes de bash ; | + | |
| - | * csh, tcsh : shells C, créés par Bill Joy de Berkeley ; | + | |
| - | * zsh, shell C écrit par Paul Falstad ; | + | |
| - | * ksh (<=> ksh88 sur Solaris et équivaut à ksh93 sur les autres UNIX/Linux cf.[[http:// | + | |
| - | * rc : shell C, lui aussi conçu par le projet GNU ; | + | |
| - | * tclsh : shell utilisant Tcl ; | + | |
| - | * wish : shell utilisant Tk . | + | |
| - | Il existe bien entendu beaucoup d' | + | Le [[wpfr> |
| - | La commande **sh** est en fait un lien symbolique vers l'interpréteur | + | Pour '' |
| + | < | ||
| ===== Les variables ===== | ===== Les variables ===== | ||
| - | Il faut savoir | + | Il faut savoir |
| 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' | il suffit de lui donner un nom et une valeur avec l' | ||
| Ligne 252: | Ligne 286: | ||
| echo "Bien joué !" | echo "Bien joué !" | ||
| else | else | ||
| - | echo "Non mais quand même !!! SAPERLIPOPETTE | + | echo "Non mais quand même !!! C' |
| - | sleep 3 # Juste pour le fun du script qui enrage | + | sleep 3 # Juste pour le fun du script qui rage ;-p |
| - | echo "Désolé, | + | 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 300: | ||
| 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 318: | ||
| ^ Syntaxe ^ Fonction réalisée ^ | ^ Syntaxe ^ Fonction réalisée ^ | ||
| - | | -e fichier | + | | -e fichier |
| - | | -d fichier | + | | -d répertoire |
| - | | -f fichier | + | | -f fichier |
| - | | -w fichier | + | | -w fichier |
| - | | -x fichier | + | | -x fichier |
| - | | f1 -nt f2 | + | | f1 -nt f2 |
| - | | f1 -ot f2 | + | | f1 -ot f2 |
| + | <note tip>Si vous préférez vérifier que votre // | ||
| === Opérateurs de comparaison numérique === | === Opérateurs de comparaison numérique === | ||
| Ligne 385: | Ligne 420: | ||
| ls -la | ls -la | ||
| elif [ " | elif [ " | ||
| - | echo " | + | echo " |
| else | else | ||
| echo "Il faut taper Y ou N!! Pas $ouinon" | echo "Il faut taper Y ou N!! Pas $ouinon" | ||
| fi | fi | ||
| </ | </ | ||
| + | <note tip> | ||
| + | Les crochets simples [] correspondent à des tests de condition conformes au shell POSIX.\\ | ||
| + | Les doubles permettent d' | ||
| + | Préférez les crochets simples pour une meilleure compatibilité. | ||
| + | </ | ||
| === Explication === | === Explication === | ||
| Ligne 413: | Ligne 452: | ||
| Exemple : | Exemple : | ||
| - | créer le répertoire | + | créer le répertoire |
| <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 |
| </ | </ | ||
| Ligne 535: | Ligne 574: | ||
| | | ||
| case " | case " | ||
| - | oui | o | O | Oui | OUI ) echo " | + | oui | o | O | Oui | OUI ) echo " |
| non | n | N | Non | NON ) echo " | non | n | N | Non | NON ) echo " | ||
| * ) echo "Ah bon ?";; | * ) echo "Ah bon ?";; | ||
| Ligne 547: | Ligne 586: | ||
| <code bash> | <code bash> | ||
| case " | case " | ||
| - | [nN] *) echo "Blablablabla...";; | + | [nN] *) echo "Blablabla...";; |
| n* | N* ) echo " | n* | N* ) echo " | ||
| </ | </ | ||
| Ligne 732: | Ligne 771: | ||
| # | # | ||
| if [ ${LANG:0:2} = " | if [ ${LANG:0:2} = " | ||
| - | echo "Vous aimez la choucroute | + | echo "Vous aimez les moules frites |
| elif [ ${LANG:0:2} = " | elif [ ${LANG:0:2} = " | ||
| - | echo "You love the... | + | echo "You love the... |
| elif [ ${LANG:0:2} = " | elif [ ${LANG:0:2} = " | ||
| - | echo "Te gusta el pata negra !" | + | echo "Te gusta el jamón |
| else | else | ||
| echo ":' | echo ":' | ||
| Ligne 745: | Ligne 784: | ||
| <code bash> | <code bash> | ||
| $ ./ | $ ./ | ||
| - | Vous aimez la choucroute | + | Vous aimez les moules frites |
| $ env LANG=en ./ | $ env LANG=en ./ | ||
| - | You love the... | + | You love the... |
| $ env LANG=es ./ | $ env LANG=es ./ | ||
| - | Te gusta el pata negra! | + | Te gusta el jamón |
| $ env LANG=it ./ | $ env LANG=it ./ | ||
| :'-( | :'-( | ||
| Ligne 826: | Ligne 865: | ||
| <code bash> | <code bash> | ||
| - | echo -e ' | + | echo -e ' |
| </ | </ | ||
| Ligne 877: | Ligne 916: | ||
| Exemple : | Exemple : | ||
| supposons que vous ayez une base de données, avec 3 catégories d' | supposons que vous ayez une base de données, avec 3 catégories d' | ||
| - | canard | + | éléphant |
| Votre script doit compter le nombre d' | Votre script doit compter le nombre d' | ||
| Deux possibilités s' | Deux possibilités s' | ||
| - | * calculer le nombre | + | * calculer le nombre |
| ou | ou | ||
| - | * calculer le nombre total de canard | + | * calculer le nombre total d' |
| Quel algorithme choisissez-vous ? | Quel algorithme choisissez-vous ? | ||
| - | Résultat : le premier car dans le deuxième il faut d' | + | Résultat : le premier car dans le deuxième il faut d' |
| ===== Liens ===== | ===== Liens ===== | ||
