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 31/12/2020, 17:19] – [Introduction aux scripts shell] 84.101.133.79 | tutoriel:script_shell [Le 24/04/2026, 14:08] (Version actuelle) – [La structure : `if`] note [] vs [[]] bcag2 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| {{tag> | {{tag> | ||
| - | --- | + | |
| + | ---- | ||
| ====== 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 33: | Ligne 34: | ||
| done | done | ||
| </ | </ | ||
| - | =====Pour faire qu'un script soit exécutable ===== | ||
| + | =====Pour faire qu'un script soit exécutable ===== | ||
| ==== Méthode graphique ==== | ==== Méthode graphique ==== | ||
| Votre script est un simple fichier texte, par défaut il s' | Votre script est un simple fichier texte, par défaut il s' | ||
| - | Pour qu'il soit autorisé à se lancer en tant que programme, il faut modifier ses propriétés.\\ | + | Pour qu'il soit autorisé à se lancer en tant que programme, il faut modifier ses propriétés. |
| Pour cela faites un clic droit sur son icône, et dans l' | Pour cela faites un clic droit sur son icône, et dans l' | ||
| Ligne 62: | Ligne 63: | ||
| Puis vous pouvez exécuter le script en faisant : <code bash> | Puis vous pouvez exécuter le script en faisant : <code bash> | ||
| mais pourquoi le ./ ? | mais pourquoi le ./ ? | ||
| + | |||
| === Le chemin ./ === | === Le chemin ./ === | ||
| Ligne 76: | Ligne 78: | ||
| Ajouter un répertoire au PATH peut donc être très pratique. Par convention, ce répertoire s' | Ajouter un répertoire au PATH peut donc être très pratique. Par convention, ce répertoire s' | ||
| - | Pour pouvoir utiliser | + | Pour pouvoir utiliser |
| Pour ceci, il suffit de faire : | Pour ceci, il suffit de faire : | ||
| export PATH=$PATH: | export PATH=$PATH: | ||
| Ligne 102: | Ligne 104: | ||
| * ksh (<=> ksh88 sur Solaris et équivaut à ksh93 sur les autres UNIX/Linux cf.[[http:// | * 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 ; | * rc : shell C, lui aussi conçu par le projet GNU ; | ||
| - | * tclsh : shell utilisant Tcl ; | + | * tclsh : shell utilisant Tcl ; |
| - | * wish : shell utilisant Tk . | + | * wish : shell utilisant Tk . |
| Il existe bien entendu beaucoup d' | Il existe bien entendu beaucoup d' | ||
| La commande **sh** est en fait un lien symbolique vers l' | La commande **sh** est en fait un lien symbolique vers l' | ||
| + | |||
| ===== 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' | ||
| <code bash> | <code bash> | ||
| Ligne 177: | Ligne 180: | ||
| </ | </ | ||
| - | Exemple: un sleep interactif pour illustrer $! (Cf. [[: | + | Exemple: un sleep interactif pour illustrer $! (Cf. [[: |
| - | + | ||
| Pour déclarer un tableau, plusieurs méthodes : | Pour déclarer un tableau, plusieurs méthodes : | ||
| - | |||
| première méthode (compatible bash, zsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par " | première méthode (compatible bash, zsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par " | ||
| <code bash> | <code bash> | ||
| Ligne 194: | Ligne 194: | ||
| <code bash> | <code bash> | ||
| len=${# | len=${# | ||
| - | |||
| </ | </ | ||
| Ligne 208: | Ligne 207: | ||
| ou encore ( C style ) : | ou encore ( C style ) : | ||
| <code bash>for (( i=0; i < ${#tab[@]}; i++ )); do echo ${tab[i]}; done</ | <code bash>for (( i=0; i < ${#tab[@]}; i++ )); do echo ${tab[i]}; done</ | ||
| - | |||
| Ligne 217: | Ligne 215: | ||
| renverront la même réponse. | renverront la même réponse. | ||
| - | NB2 : les tableaux sont séparés par un séparateur défini : l'IFS. | + | NB2 : les tableaux sont séparés par un séparateur défini : l' |
| - | Par défaut l'IFS est composé des trois caractères : $' \t\n' soit espace, tabulation, saut de ligne. | + | Par défaut l'IFS est composé des trois caractères : $' \t\n' soit espace, tabulation, saut de ligne. |
| Il peut être forcé sur un autre caractère. | Il peut être forcé sur un autre caractère. | ||
| <code bash> | <code bash> | ||
| Ligne 225: | Ligne 223: | ||
| * une ponctuation (pe : ',', | * une ponctuation (pe : ',', | ||
| * un caractère spécial : ($' | * un caractère spécial : ($' | ||
| + | |||
| ==== Les arguments en ligne de commande ==== | ==== Les arguments en ligne de commande ==== | ||
| Ligne 267: | 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 274: | Ligne 273: | ||
| done | done | ||
| </ | </ | ||
| + | |||
| ===== Vocabulaire ===== | ===== Vocabulaire ===== | ||
| ==== La commande test ==== | ==== La commande test ==== | ||
| Ligne 284: | Ligne 284: | ||
| ^ 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 376: | Ligne 377: | ||
| Pour pouvoir voir la valeur d'une variable il faut faire précéder son nom du caractère « $ ». | Pour pouvoir voir la valeur d'une variable il faut faire précéder son nom du caractère « $ ». | ||
| - | |||
| - | |||
| <code bash> | <code bash> | ||
| Ligne 392: | Ligne 391: | ||
| 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 453: | Ligne 456: | ||
| -n $A # Vérifie si A existe (contient une chaîne). | -n $A # Vérifie si A existe (contient une chaîne). | ||
| </ | </ | ||
| + | |||
| ==== Les structures while et until ==== | ==== Les structures while et until ==== | ||
| Ligne 554: | Ligne 558: | ||
| Et plein d' | Et plein d' | ||
| - | == On mélange tout ça == | + | === On mélange tout ça === |
| Pour vous donner une idée précise de ce que peuvent réaliser toutes ces instructions, | Pour vous donner une idée précise de ce que peuvent réaliser toutes ces instructions, | ||
| Ligne 612: | Ligne 616: | ||
| </ | </ | ||
| - | == Remarque == | + | === Remarque |
| Comme vous l'avez remarqué, l' | Comme vous l'avez remarqué, l' | ||
| Ligne 695: | Ligne 699: | ||
| </ | </ | ||
| | | ||
| - | Comme vous l'avez sans doute remarqué, quand on appelle la fonction, on exécute simplement ce qu'on lui a défini au début, dans notre exemple, echo... et ls -l, on peut donc faire exécuter n' | + | Comme vous l'avez sans doute remarqué, quand on appelle la fonction, on exécute simplement ce qu'on lui a défini au début, dans notre exemple, echo... et ls -l, on peut donc faire exécuter n' |
| - | Les fonctions peuvent être définies n' | + | Les fonctions peuvent être définies n' |
| Exemple: un sleep interactif : | Exemple: un sleep interactif : | ||
| Ligne 832: | Ligne 836: | ||
| ===== Exemples et exercices ===== | ===== Exemples et exercices ===== | ||
| - | Comme indiqué dans la [[script_shell# | + | Comme indiqué dans la [[script_shell# |
| - | [[http:// | + | [[https:// |
| Aux structures décrites ci-dessus, il est nécessaire, | Aux structures décrites ci-dessus, il est nécessaire, | ||
| - | La programmation de script shell étant ouverte à tous, cela permet de bénéficier de nombreux scripts pour des applications très variées ; cependant, **la plupart sont proposés sans aucune garantie**.\\ | + | La programmation de script shell étant ouverte à tous, cela permet de bénéficier de nombreux scripts pour des applications très variées ; cependant, **la plupart sont proposés sans aucune garantie**. |
| Vous pourrez trouver une liste de scripts pouvant servir d' | Vous pourrez trouver une liste de scripts pouvant servir d' | ||
| - | Une fois vos armes faites, proposez vos contributions sur le topic du forum [[http:// | + | Une fois vos armes faites, proposez vos contributions sur le topic du forum [[https:// |
| ===== L'art d' | ===== L'art d' | ||
| Ligne 850: | Ligne 854: | ||
| * Commencer par : <code bash># | * Commencer par : <code bash># | ||
| # Version du script</ | # Version du script</ | ||
| - | * Créer des fonctions pour des actions précises : | + | * Créer des fonctions pour des actions précises :<code bash> |
| - | <code bash> | + | |
| - | nom_de_la_fonction() | + | |
| { | { | ||
| ... | ... | ||
| - | } | + | }</ |
| - | </ | + | |
| * Utiliser des chemins absolus pour les dossiers et des chemins relatifs pour les noms de fichiers : <code bash> | * Utiliser des chemins absolus pour les dossiers et des chemins relatifs pour les noms de fichiers : <code bash> | ||
| * Utiliser les entrées de commandes pour les fonctions :<code bash> | * Utiliser les entrées de commandes pour les fonctions :<code bash> | ||
| Ligne 876: | Ligne 877: | ||
| exit 100 | exit 100 | ||
| fi | fi | ||
| - | }</ | + | }</ |
| <note tip> | <note tip> | ||
| Ligne 894: | Ligne 895: | ||
| ===== Liens ===== | ===== Liens ===== | ||
| - | * (fr) http:// | + | * (fr) https:// |
| - | * (fr) [[http:// | + | * (fr) [[https:// |
| * (fr) https:// | * (fr) https:// | ||
| * (en) [[http:// | * (en) [[http:// | ||
| * (fr ) [[ftp:// | * (fr ) [[ftp:// | ||
| - | * (fr ) [[http:// | + | * (fr ) [[http:// |
| * (en) [[https:// | * (en) [[https:// | ||
| + | |||
| ---- | ---- | ||
| + | |||
| // | // | ||
