workshop_shell
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 | ||
workshop_shell [2023/11/04 10:26] – bigMax | workshop_shell [2024/03/20 12:56] (Version actuelle) – bigMax | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
< | < | ||
- | # Workshop Shell Unix (Interpréteur de commandes) | + | # Workshop Shell Unix compatible |
## Guidelines pour l' | ## Guidelines pour l' | ||
Ligne 28: | Ligne 28: | ||
Retourne un " | Retourne un " | ||
- | - RC = O indique que tout s'est bien déroulé. | + | - RC = 0 indique que tout s'est bien déroulé. |
- RC > 0 indique qu'une erreur s'est produite. | - RC > 0 indique qu'une erreur s'est produite. | ||
## Navigation dans un FS (système de fichiers) : pwd ; cd ; ls | ## Navigation dans un FS (système de fichiers) : pwd ; cd ; ls | ||
*Présentation avec GUI ouvert.* | *Présentation avec GUI ouvert.* | ||
+ | - pwd: print working directory | ||
+ | - cd: change directory | ||
+ | - ls: list | ||
+ | |||
``` bash | ``` bash | ||
pwd | pwd | ||
Ligne 50: | Ligne 54: | ||
## Manipulation des fichiers : touch ; cp ; mv ; rm ; mkdir | ## Manipulation des fichiers : touch ; cp ; mv ; rm ; mkdir | ||
*Présentation avec GUI ouvert.* | *Présentation avec GUI ouvert.* | ||
+ | - touch: touche un fichier (le créé si il n' | ||
+ | - cp: copy files | ||
+ | - mv: move files | ||
+ | - rm: remove files | ||
+ | - mkdir: make directory | ||
+ | |||
``` bash | ``` bash | ||
touch foo | touch foo | ||
Ligne 61: | Ligne 71: | ||
## Permissions des fichiers : ls -l ; chmod ; chown | ## Permissions des fichiers : ls -l ; chmod ; chown | ||
+ | - chmod: change file mode | ||
+ | - chown: change file owner | ||
``` bash | ``` bash | ||
ls -l foo | ls -l foo | ||
Ligne 67: | Ligne 79: | ||
sudo chown root:root foo | sudo chown root:root foo | ||
ls -l | ls -l | ||
- | ``` | ||
- | |||
- | ## Historique des commandes | ||
- | ``` bash | ||
- | history | ||
- | ``` | ||
- | On peut utiliser les fleches haut et bas du clavier pour parcourir l' | ||
- | **Avec la combinaison de touch [CTRL]-[R] on peut rechercher dans l' | ||
- | |||
- | Avec la variable d' | ||
- | ``` bash | ||
- | echo " | ||
- | HISTCONTROL=ignoreboth | ||
- | echo " | ||
- | echo " | ||
- | echo " | ||
- | history | ||
``` | ``` | ||
Ligne 101: | Ligne 96: | ||
## Administration : ps ; top ; du ; df ; free ; mount | ## Administration : ps ; top ; du ; df ; free ; mount | ||
+ | - id: display user id | ||
+ | - last: display last logged in users | ||
+ | - ps: list process | ||
+ | - top: display top process | ||
+ | - du: disk usage | ||
+ | - df: disk free | ||
+ | - free: display RAM infos | ||
+ | - mount: display mounted file systems | ||
``` bash | ``` bash | ||
id | id | ||
Ligne 112: | Ligne 115: | ||
free -h | free -h | ||
mount | mount | ||
+ | ``` | ||
+ | |||
+ | ## Quelques autres commandes basiques | ||
+ | - echo: imprime les arguments sur la sortie standard (l' | ||
+ | - cat: concatene des fichiers et les imprime sur la sortie standard (l' | ||
+ | - read: lit l' | ||
+ | - which: localise le chemin absolu d'une commande | ||
+ | - grep: imprime les lignes d'un fichier qui match un pattern | ||
+ | - cut: extrait des colonnes d'un fichier | ||
+ | - paste: fusionne des lignes d'un ichier | ||
+ | |||
+ | ## Historique des commandes | ||
+ | ``` bash | ||
+ | history | ||
+ | ``` | ||
+ | On peut utiliser les fleches haut et bas du clavier pour parcourir l' | ||
+ | |||
+ | **Avec la combinaison de touch [CTRL]-[R] on peut rechercher dans l' | ||
+ | |||
+ | Avec la variable d' | ||
+ | ``` bash | ||
+ | echo " | ||
+ | HISTCONTROL=ignoreboth | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | history 10 | ||
+ | ``` | ||
+ | |||
+ | Généralement la commande history à des options pour allez supprimer des entrées dans l' | ||
+ | ``` bash | ||
+ | help history | ||
+ | echo "mon secret" | ||
+ | history 5 | ||
+ | history -d -3 | ||
+ | history 5 | ||
``` | ``` | ||
Ligne 128: | Ligne 167: | ||
## IO (Entrées Sorties) (redirection / pipelines) : 2> > >> | ## IO (Entrées Sorties) (redirection / pipelines) : 2> > >> | ||
- | **TODO**: Utiliser des schéma | + | |
### Configuration par défaut de STDIN STDOUT et STDERR | ### Configuration par défaut de STDIN STDOUT et STDERR | ||
Tous les programmes : | Tous les programmes : | ||
Ligne 138: | Ligne 177: | ||
- STDIN est relié au " | - STDIN est relié au " | ||
- STDOUT et STDERR sont reliés à " | - STDOUT et STDERR sont reliés à " | ||
+ | |||
+ | </ | ||
+ | {{ :: | ||
+ | < | ||
### Suppression des erreurs : 2> /dev/null | ### Suppression des erreurs : 2> /dev/null | ||
Ligne 194: | Ligne 237: | ||
### Pipeline (chaîner des programmes) : | | ### Pipeline (chaîner des programmes) : | | ||
+ | " | ||
+ | |||
``` bash | ``` bash | ||
cat bar | grep " | cat bar | grep " | ||
``` | ``` | ||
- | ## Logique : ; && || | + | </ |
+ | {{ :: | ||
+ | < | ||
+ | |||
+ | ## Logique : ; && || ! | ||
``` bash | ``` bash | ||
echo " | echo " | ||
Ligne 204: | Ligne 253: | ||
echo " | echo " | ||
false ; echo " | false ; echo " | ||
+ | ! false ; echo " | ||
true || echo " | true || echo " | ||
false || echo " | false || echo " | ||
Ligne 219: | Ligne 269: | ||
echo '" | echo '" | ||
echo "' | echo "' | ||
+ | echo " | ||
+ | echo " | ||
+ | echo ${USER^^} | ||
+ | TOUT_EN_MAJ=" | ||
export | export | ||
echo $PS1 | echo $PS1 | ||
Ligne 225: | Ligne 279: | ||
``` | ``` | ||
Il existe une priorité entre simple et double quotte. Une variable ne sera jamais interprété entre simple quottes sauf si englobé entre double quottes. | Il existe une priorité entre simple et double quotte. Une variable ne sera jamais interprété entre simple quottes sauf si englobé entre double quottes. | ||
+ | |||
+ | ## Bloc de commandes : { cmd1 ; cmd2 ; ... ; cmdN ; } ( cmd1 ; cmd2 ; ... ; cmdN ) | ||
+ | - Le bloc () est exécuté dans un sous processus. | ||
+ | - Le bloc {} doit se terminer par un ; | ||
+ | ``` bash | ||
+ | false || ( echo foo ; echo bar ; var=baz ) ; echo $var | ||
+ | false || { echo foo ; echo bar ; var=baz ; } ; echo $var | ||
+ | ``` | ||
## Un peu de recul : execution des commandes | ## Un peu de recul : execution des commandes | ||
Ligne 249: | Ligne 311: | ||
``` | ``` | ||
- | ## Scripts : philosophie tests loops fonctions | + | ## Scripts : philosophie tests loops fonctions |
- | ### Fil rouge : un script pour trier ses photos | + | ### Philosophie UNIX |
+ | - Écrivez des programmes qui effectuent une seule chose et qui le font bien. | ||
+ | - Écrivez des programmes qui collaborent. | ||
+ | - Écrivez des programmes pour gérer des flux de texte [en pratique des flux d' | ||
+ | |||
+ | ### Fil rouge : un script pour trier et compresser | ||
- shebang | - shebang | ||
+ | - fonctions | ||
+ | - return code (exit) | ||
- arguments | - arguments | ||
- variables | - variables | ||
- conditions | - conditions | ||
- | - fonctions | ||
- boucles | - boucles | ||
- | - return code (exit) | ||
- | ### Philosophie UNIX | + | Pour installer les packages nécéssaires sur debian/ |
- | - Écrivez des programmes qui effectuent une seule chose et qui le font bien. | + | ``` bash |
- | - Écrivez des programmes | + | sudo apt install imagemagick exiftool |
- | - Écrivez des programmes pour gérer des flux de texte [en pratique des flux d'octets], car c'est une interface universelle. | + | ``` |
+ | |||
+ | ### Initialisation du script : shebang usage() | ||
+ | - Nous éditons un nouveau fichier texte que nous allons " | ||
+ | - Première ligne du script : le shebang, | ||
+ | - Définition | ||
+ | |||
+ | ``` bash | ||
+ | vim gere_mes_photos.sh | ||
+ | |||
+ | #! /bin/bash | ||
+ | |||
+ | usage() { | ||
+ | >&2 echo " | ||
+ | >&2 echo " | ||
+ | exit 1 | ||
+ | } | ||
+ | |||
+ | >&2 echo " | ||
+ | |||
+ | ./ | ||
+ | chmod u+x gere_mes_photos.sh | ||
+ | ./ | ||
+ | ``` | ||
- | ### Séparation des arguments | + | ### Tester les arguments |
Un programme prend en paramètre des arguments séparés par des espaces (par défaut). | Un programme prend en paramètre des arguments séparés par des espaces (par défaut). | ||
+ | On vérifie que l' | ||
+ | On enrobe la variable $1 de double quottes ("" | ||
+ | ``` bash | ||
+ | test -n " | ||
+ | test -n " | ||
+ | |||
+ | ./ | ||
+ | |||
+ | ./ | ||
+ | ``` | ||
+ | |||
+ | ### Traiter chaque fichier fournit en entrée : for do done ; while do done ; les variables | ||
+ | On utilise une boucle pour parser tous les arguments un par un. | ||
+ | ``` bash | ||
+ | for file in " | ||
+ | >&2 echo " | ||
+ | done | ||
+ | ``` | ||
+ | |||
+ | ### Utiliser un bloc conditionnel : if then elif else | ||
+ | On peut utiliser un bloc conditionnel pour effectuer un traitement. | ||
+ | ``` bash | ||
+ | if ! [ -f " | ||
+ | usage " | ||
+ | fi | ||
+ | | ||
+ | ./ | ||
+ | ``` | ||
+ | |||
+ | ### Executer nos 2 programmes sur chaque fichier | ||
+ | - On utilise le programme exiftool pour renommer notre image en utilisant la metadata "date de création" | ||
+ | - On utilise le programme convert pour resize notre image. | ||
+ | |||
+ | ``` bash | ||
+ | tmpFile=" | ||
+ | >&2 echo " | ||
+ | convert -resize 50% " | ||
+ | |||
+ | >&2 echo " | ||
+ | exiftool ' | ||
+ | rm -- " | ||
+ | ``` | ||
+ | |||
+ | ### Script complet | ||
+ | ``` bash | ||
+ | #! /bin/sh | ||
+ | |||
+ | usage() { | ||
+ | >&2 echo " | ||
+ | >&2 echo " | ||
+ | exit 1 | ||
+ | } | ||
+ | |||
+ | test -n " | ||
+ | |||
+ | for file in " | ||
+ | >&2 echo " | ||
+ | |||
+ | if ! [ -f " | ||
+ | usage " | ||
+ | fi | ||
+ | |||
+ | tmpFile=" | ||
+ | >&2 echo " | ||
+ | convert -resize 50% " | ||
+ | |||
+ | >&2 echo " | ||
+ | exiftool ' | ||
+ | rm -- " | ||
+ | done | ||
+ | ``` | ||
+ | ## Retours | ||
+ | - Si focus sur les scripts, ne pas présenter les trucs non nécéssaires pour les scripts | ||
+ | - permissions ? | ||
+ | - admin ? | ||
+ | - files ? | ||
+ | - tldr comme manuel express ? | ||
</ | </ |
workshop_shell.1699093618.txt.gz · Dernière modification : 2023/11/04 10:26 de bigMax