Outils pour utilisateurs

Outils du site


linux:bash (lu 64594 fois)

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édentes Révision précédente
Prochaine révision
Révision précédente
linux:bash [24-02-2020 14:35]
edmc73 [Problème d'affichage sur la ligne du prompt]
linux:bash [07-05-2023 20:38] (Version actuelle)
edmc73 [Date de fichier]
Ligne 343: Ligne 343:
 </code> </code>
  
 +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 "yes"
 +</code>
 +
 +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 "yes"
 +#           |^^^^^^^^ ^^^^^^ ^^^^^^  ^^^^^^ ^^^^^^^^^^ ^^^^^^ |
 +#                 ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^ |
 +#                      |                                |
 +#                                        |              |
 +#           | --year--   --month--           --day--          |
 +#                    either 01...09      either 01..09     end of line
 +# start of line            or 10,11,12         or 10..29
 +#                                              or 30, 31
 +</code>
 +
 +That is, you can define a regex in Bash matching the format you want. This way you can do:
 +
 +<code bash>
 +[[ $date =~ ^regex$ ]] && echo "matched" || echo "did not match"
 +</code>
 +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 "$date" | grep -Eq  ^regex$) && echo "matched" || echo "did not match"
 +</code>
 +In fish, which is not POSIX-compliant, you can do
 +
 +<code bash>
 +echo "$date" | grep -Eq "^regex\$"; and echo "matched"; or echo "did not match"
 +</code>
 ===== Boucle ===== ===== Boucle =====
  
Ligne 377: Ligne 417:
   for i in {1..5}; do COMMAND-HERE; done   for i in {1..5}; do COMMAND-HERE; done
  
 +  for X in /dev/sd*; do echo $X; smartctl -a $X | grep overall; done
 +<code>
 +~# 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
 +...
 +</code>
  
 ===== Suppression d'un grand nombre de fichiers ===== ===== Suppression d'un grand nombre de fichiers =====
Ligne 401: Ligne 450:
 Pour savoir combien de fichiers vont être effacés Pour savoir combien de fichiers vont être effacés
   find . -name "*" | wc -l   find . -name "*" | wc -l
 +  
 +
 +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'afficher la taille des répertoires du répertoire courant. Permet d'afficher la taille des répertoires du répertoire courant.
Ligne 428: Ligne 482:
 select CHOIX in "${LISTE[@]}" ; do select CHOIX in "${LISTE[@]}" ; do
     case $REPLY in     case $REPLY in
-        1|y)+        yes|y)
         echo ok         echo ok
         break         break
         ;;         ;;
-        2|n)+        no|n)
         echo ko         echo ko
         break         break
         ;;         ;;
 +        *) echo "invalid option $REPLY";;
     esac     esac
 done done
 </code> </code>
  
 +Demander de saisir un texte
 +<code bash>
 +echo Hello, who am I talking to?
 +read varname
 +echo It\'s nice to meet you $varname
 +</code>
 ===== echo ===== ===== echo =====
  
Ligne 783: Ligne 844:
 Modify: 2015-01-01 00:00:00.000000000 +0000 Modify: 2015-01-01 00:00:00.000000000 +0000
 Change: 2016-07-04 08:48:40.464863103 +0000  Change: 2016-07-04 08:48:40.464863103 +0000 
 +
 +On peut aussi utiliser la notation suivante
 +# touch -d "-1 day" toto.txt
 </code> </code>
  
Ligne 884: Ligne 948:
 Avec certain prompt fantaisiste, il peut y avoir des problème d'affichage notamment quand on remonte dans l'historique des commandes, ça peut vite devenir illisible. Avec certain prompt fantaisiste, il peut y avoir des problème d'affichage notamment quand on remonte dans l'historique des commandes, ça peut vite devenir illisible.
  
-D'où l'important d'entourer vos codes couleurs dans la variable PS1 par \[   et   \]+D'où l'importance d'entourer vos codes couleurs dans la variable PS1 par \[   et   \]
  
 Si vous appelez une fonction dans la variable PS1, il faudra entourer le code couleur par \001   et   \002 Si vous appelez une fonction dans la variable PS1, il faudra entourer le code couleur par \001   et   \002
linux/bash.1582551351.txt.gz · Dernière modification: 24-02-2020 14:35 de edmc73