linux:bash

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 [2023/12/19 14:20] – add how to color text phswlinux:bash [2025/10/26 14:47] (Version actuelle) – add how to generate random numbers phsw
Ligne 7: Ligne 7:
   * [[http://aral.iut-rodez.fr/fr/sanchis/enseignement/IntroProgBash_2022-06-03.pdf|Introduction à la programmation en Bash]]   * [[http://aral.iut-rodez.fr/fr/sanchis/enseignement/IntroProgBash_2022-06-03.pdf|Introduction à la programmation en Bash]]
   * [[https://mywiki.wooledge.org/ParsingLs|Why you shouldn't parse the output of ls(1)]]   * [[https://mywiki.wooledge.org/ParsingLs|Why you shouldn't parse the output of ls(1)]]
 +  * [[https://connect.ed-diamond.com/linux-pratique/lp-133/rendre-ses-scripts-bash-plus-fiables|Rendre ses scripts « Bash » plus fiables]]
 +  * [[https://nochlin.com/blog/6-techniques-i-use-to-create-a-great-user-experience-for-shell-scripts|6 Techniques I Use to Create a Great User Experience for Shell Scripts]]
 +  * [[https://blog.smarchal.com/bash-substitutions-variables|Les substitutions de variables en bash]]
 +
  
  
Ligne 155: Ligne 159:
     echo "Git folder doesn't exist"     echo "Git folder doesn't exist"
 fi fi
 +</code>
 +
 +
 +=== Comparer deux dates ===
 +
 +[[https://unix.stackexchange.com/questions/84381/how-to-compare-two-dates-in-a-shell|source]]
 +
 +<code bash>
 +todate=$(date -d 2013-07-18 +%s)
 +cond=$(date -d 2014-08-19 +%s)
 +
 +if [ $todate -ge $cond ];
 +then
 +    break
 +fi  
 </code> </code>
  
Ligne 259: Ligne 278:
 <code bash> <code bash>
 user=${SUDO_USER:-$(whoami)} user=${SUDO_USER:-$(whoami)}
-</code> 
- 
- 
- 
- 
-==== Quitter à la moindre erreur ==== 
- 
-<code bash> 
-set -e 
 </code> </code>
  
Ligne 292: Ligne 302:
  
 <code bash> <code bash>
-while [ "$1" != "" ]; do+set -u 
 + 
 +while [ $# -gt 0 ]; do
     case $1 in     case $1 in
         -f | --file )           shift         -f | --file )           shift
Ligne 411: Ligne 423:
 foo="abcde" foo="abcde"
 echo "${foo::-1}" # abcd echo "${foo::-1}" # abcd
 +</code>
 +
 +
 +=== Enlever un préfixe ===
 +
 +[[https://stackoverflow.com/questions/16623835/remove-a-fixed-prefix-suffix-from-a-string-in-bash|Source]]
 +<code bash>
 +v="/data/truc/foo"
 +prefix="/data/truc/"
 +
 +echo ${v#"$prefix"}
 </code> </code>
  
Ligne 447: Ligne 470:
  
  
-==== Récupérer le code de retour dans un pipe ====+==== Générer un nombre aléatoire ==== 
 + 
 +  * [[https://stackoverflow.com/questions/1194882/how-to-generate-random-number-in-bash]] 
 + 
 +<code bash> 
 +echo $((1 + $RANDOM % 10)) 
 +od -t u -N 4 /dev/urandom | head -n 1 | cut -f 2 -d ' ' 
 +</code> 
 + 
 + 
 + 
 +==== Options Bash ==== 
 + 
 + 
 + 
 +=== Récupérer le code de retour dans un pipe ===
  
 Pour récupérer le code de retour de la première commande qui échoue dans un pipe ([[https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another|source]]) : Pour récupérer le code de retour de la première commande qui échoue dans un pipe ([[https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another|source]]) :
Ligne 458: Ligne 496:
  
  
-==== Changer la couleur du texte affiché ====+=== Ne pas développer * ===
  
 +Pour éviter que ''*'' soit remplacé par tous les fichiers et dossiers du dossier courant, lancer ''bash -f'' ([[https://stackoverflow.com/a/13484149|source]]).
 +
 +
 +
 +=== Quitter à la moindre erreur ===
 +
 +<code bash>
 +set -e
 +</code>
 +
 +
 +=== Changer des options pour une portion de script ===
 +
 +Mettre la portion entre parenthèses ([[https://stackoverflow.com/questions/74525090/bash-set-x-only-for-the-duration-of-a-function|source]]) :
 +<code bash>
 +#!/bin/bash
 +
 +set -eu
 +
 +(
 +    set -o pipefail
 +    set +e
 +
 +    false | cat
 +    echo "after $?"
 +)
 +
 +echo "before second"
 +
 +false | cat
 +echo "after $?"
 +
 +false
 +echo "sould not print"
 +</code>
 +
 +
 +==== Couleurs ====
 +
 +Changer la couleur du texte affiché :
   * [[https://www.shellhacks.com/bash-colors/|Bash Colors]]   * [[https://www.shellhacks.com/bash-colors/|Bash Colors]]
 +
 +Visualiser le rendu de toutes les couleurs ([[https://askubuntu.com/questions/27314/script-to-display-all-terminal-colors|source]]) :
 +<code bash>
 +for x in {0..8}; do for i in {30..37}; do for a in {40..47}; do echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo ""
 +
 +msgcat --color=test
 +</code>
  
  
  • linux/bash.1702992056.txt.gz
  • Dernière modification : 2023/12/19 14:20
  • de phsw