Outils pour utilisateurs

Outils du site


linux:bash (lu 64543 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 [12-08-2019 11:03]
edmc73 [Taille de plusieurs répertoires]
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 880: Ligne 944:
  
  
 +===== Problème d'affichage sur la ligne du prompt =====
 +
 +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'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
 +
 +(voir le code dans le chapitre suivant)
 + 
 +source: http://mywiki.wooledge.org/BashFAQ/053
 +
 +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 '\001\033[0;32m\002✔\001\033[0;0m\002'
 +  else
 +    echo -e '\001\033[0;31m\002✘ '$es'\001\033[0;0m\002'
 +  fi
 +}
 +
 +PS1='$(get_exit_status) \[\033[1;34m\]\u:\[\033[0;36m\]\W\[\033[0;0m\] $ '
 +</code>
linux/bash.1565600630.txt.gz · Dernière modification: 12-08-2019 11:03 de edmc73