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 | ||
| linux:bash [27-09-2017 08:52] – edmc73 | linux:bash [07-05-2023 18:38] (Version actuelle) – [Date de fichier] edmc73 | ||
|---|---|---|---|
| Ligne 49: | Ligne 49: | ||
| echo $toto | echo $toto | ||
| echo ${toto} | echo ${toto} | ||
| + | cpt=1 | ||
| + | echo $((cpt++)) | ||
| + | echo $((cpt+15)) | ||
| Tableau associatif ( http:// | Tableau associatif ( http:// | ||
| Ligne 84: | Ligne 87: | ||
| $ echo ${# | $ echo ${# | ||
| 2 | 2 | ||
| + | </ | ||
| + | |||
| + | Faire une liste simple | ||
| + | < | ||
| + | list=( | ||
| + | aaa | ||
| + | bbb | ||
| + | ccc | ||
| + | ddd | ||
| + | ) | ||
| + | |||
| + | $ echo $list | ||
| + | aaa | ||
| + | |||
| + | $ echo ${list[@]} | ||
| + | aaa bbb ccc ddd | ||
| + | |||
| + | $ echo ${list[1]} | ||
| + | bbb | ||
| + | |||
| + | $ for i in ${list[@]}; do echo $i; done | ||
| + | aaa | ||
| + | bbb | ||
| + | ccc | ||
| + | ddd | ||
| + | |||
| </ | </ | ||
| ===== Manipuler du texte ===== | ===== Manipuler du texte ===== | ||
| Ligne 314: | Ligne 343: | ||
| </ | </ | ||
| + | Tester le contenu d'une chaine avec du regex | ||
| + | Tester une date yyyymmdd de facon très simple | ||
| + | |||
| + | <code bash> | ||
| + | [[ $date =~ ^[0-9]{8}$ ]] && echo " | ||
| + | </ | ||
| + | |||
| + | ou plus complet | ||
| + | |||
| + | <code bash> | ||
| + | [[ $date =~ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ]] && echo " | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | --year-- | ||
| + | # | ||
| + | # start of line or 10, | ||
| + | # or 30, 31 | ||
| + | </ | ||
| + | |||
| + | That is, you can define a regex in Bash matching the format you want. This way you can do: | ||
| + | |||
| + | <code bash> | ||
| + | [[ $date =~ ^regex$ ]] && echo " | ||
| + | </ | ||
| + | where commands after && are executed if the test is successful, and commands after || are executed if the test is unsuccessful. | ||
| + | |||
| + | Note this is based on the solution by Aleks-Daniel Jakimenko in User input date format verification in bash. | ||
| + | |||
| + | In other shells you can use grep. If your shell is POSIX compliant, do | ||
| + | |||
| + | <code bash> | ||
| + | (echo " | ||
| + | </ | ||
| + | In fish, which is not POSIX-compliant, | ||
| + | |||
| + | <code bash> | ||
| + | echo " | ||
| + | </ | ||
| ===== Boucle ===== | ===== Boucle ===== | ||
| Ligne 348: | Ligne 417: | ||
| for i in {1..5}; do COMMAND-HERE; | for i in {1..5}; do COMMAND-HERE; | ||
| + | for X in /dev/sd*; do echo $X; smartctl -a $X | grep overall; done | ||
| + | < | ||
| + | ~# for X in {a..z}; do smartctl -a /dev/sd$X | grep overall; done | ||
| + | SMART overall-health self-assessment test result: PASSED | ||
| + | SMART overall-health self-assessment test result: PASSED | ||
| + | SMART overall-health self-assessment test result: PASSED | ||
| + | SMART overall-health self-assessment test result: PASSED | ||
| + | ... | ||
| + | </ | ||
| ===== Suppression d'un grand nombre de fichiers ===== | ===== Suppression d'un grand nombre de fichiers ===== | ||
| Ligne 372: | Ligne 450: | ||
| Pour savoir combien de fichiers vont être effacés | Pour savoir combien de fichiers vont être effacés | ||
| find . -name " | find . -name " | ||
| + | | ||
| + | |||
| + | Garder les 5 fichiers les plus récents et supprimer le reste | ||
| + | ls -c *.txt | tail -n +5 | xargs rm | ||
| + | |||
| ===== Taille de plusieurs répertoires ===== | ===== Taille de plusieurs répertoires ===== | ||
| Permet d' | Permet d' | ||
| Ligne 380: | Ligne 463: | ||
| Affiche la taille des répertoires en ignorant les autres disques (sans compter les /mnt, /media..) et trie du plus petit au plus grand. | Affiche la taille des répertoires en ignorant les autres disques (sans compter les /mnt, /media..) et trie du plus petit au plus grand. | ||
| - | du -x -h --max-depth=1 | sort -h | + | du -xhcs --max-depth=1 | sort -h |
| Compter le nombre de fichier récursivement sans compter les répertoires | Compter le nombre de fichier récursivement sans compter les répertoires | ||
| Ligne 387: | Ligne 470: | ||
| Compter le nombre de répertoire | Compter le nombre de répertoire | ||
| ls -dR repertoire/ | ls -dR repertoire/ | ||
| + | | ||
| + | |||
| + | Un petit programme nommé **ncdu** dispo dans les dépots permet d' | ||
| ===== Faire un prompt ===== | ===== Faire un prompt ===== | ||
| Ligne 396: | Ligne 482: | ||
| select CHOIX in " | select CHOIX in " | ||
| case $REPLY in | case $REPLY in | ||
| - | | + | |
| echo ok | echo ok | ||
| break | break | ||
| ;; | ;; | ||
| - | | + | |
| echo ko | echo ko | ||
| break | break | ||
| ;; | ;; | ||
| + | *) echo " | ||
| esac | esac | ||
| done | done | ||
| </ | </ | ||
| + | Demander de saisir un texte | ||
| + | <code bash> | ||
| + | echo Hello, who am I talking to? | ||
| + | read varname | ||
| + | echo It\'s nice to meet you $varname | ||
| + | </ | ||
| ===== echo ===== | ===== echo ===== | ||
| Ligne 751: | Ligne 844: | ||
| Modify: 2015-01-01 00: | Modify: 2015-01-01 00: | ||
| Change: 2016-07-04 08: | Change: 2016-07-04 08: | ||
| + | |||
| + | On peut aussi utiliser la notation suivante | ||
| + | # touch -d "-1 day" toto.txt | ||
| </ | </ | ||
| Ligne 848: | Ligne 944: | ||
| + | ===== Problème d' | ||
| + | |||
| + | Avec certain prompt fantaisiste, | ||
| + | |||
| + | D'où l' | ||
| + | |||
| + | Si vous appelez une fonction dans la variable PS1, il faudra entourer le code couleur par \001 | ||
| + | |||
| + | (voir le code dans le chapitre suivant) | ||
| + | |||
| + | source: http:// | ||
| + | |||
| + | Mots clés pour recherche sur le web: Line wrapping issues in Bash | ||
| + | |||
| + | ===== Afficher le status de la dernière commande dans le prompt ===== | ||
| + | |||
| + | Ajoutez dans votre .bashrc ce petit bout de code | ||
| + | |||
| + | <code bash> | ||
| + | get_exit_status(){ | ||
| + | es=$? | ||
| + | if [ $es -eq 0 ] | ||
| + | then | ||
| + | echo -e ' | ||
| + | else | ||
| + | echo -e ' | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | PS1=' | ||
| + | </ | ||