mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

HowtoBash.md 4.8 KiB

2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. # Astuces Bash
  2. ~~~
  3. function hello { echo Hello; echo $1; }
  4. ~~~
  5. ## Raccourcis
  6. ~~~
  7. Ctrl+d : quitte le terminal courant / supprime le caractère sous le curseur si la ligne n'est pas vide
  8. Ctrl+h : supprime le caractère avant curseur
  9. Ctrl+a : aller en début de ligne
  10. Ctrl+e : aller en fin de ligne
  11. Ctrl+k : effacer (coupe) du curseur à la fin de la ligne
  12. Ctrl+u : effacer (coupe) du début de ligne au curseur
  13. Ctrl+y : colle la partie précédemment coupée
  14. Ctrl+r : rechercher parmi l'historique
  15. Ctrl+s : freeze l'affichage de l'output
  16. Ctrl+q : défreeze l'affichage de l'affichage de l'output
  17. Ctrl+t : inverse les caractères autour du curseur
  18. Ctrl+c : annule la ligne en cours et passer sur une nouvelle ligne vide
  19. Ctrl+z : suspend la tâche en cours
  20. ctrl+l : efface/rafraichit l'écran
  21. ctrl+w : efface le mot qui précède le curseur jusqu'au séparateur de mot (une espace en général)
  22. ctrl+x ctrl+e : édite la ligne dans $VISUAL ou $EDITOR si non définie
  23. alt+effacer : Efface un mot à gauche du curseur
  24. alt+d : Efface un mot à droite du curseur
  25. alt+t : Inverse les deux mots à gauche du curseur
  26. ~~~
  27. # Script
  28. ## Variables
  29. ### Environnement
  30. ~~~{.bash}
  31. $PPID
  32. $BASHPID
  33. $!
  34. $$
  35. $PIPESTATUS
  36. ~~~
  37. ### Initialiser
  38. ~~~{.bash}
  39. var=
  40. ~~~
  41. En readonly <=> constante
  42. ~~~{.bash}
  43. readonly var="pas touche"
  44. ~~~
  45. ### Protéger
  46. ~~~{.bash}
  47. [ -n "${var}" ] && true
  48. #et surtout pas
  49. [ -n $var ] && false
  50. #car si var est vide, l'expression sera équivalente à [ -n ] => erreur de syntaxe
  51. ~~~
  52. ~~~{.bash}
  53. echo $var "joue au ${foo}t"
  54. #et surtout pas
  55. echo $var "joue au $foot"
  56. #car sinon c'est bien le contenu de la variable $foot qui sera remplacé et non $foo
  57. ~~~
  58. ## Conditions
  59. ~~~{.bash}
  60. true && echo "C'est toujours vrai"
  61. false || echo "Ça sera toujours vraiment faux"
  62. [ $? -eq 0 ] && { echo "tâche"; sleep 1; echo -e "\e'a plus!!" }
  63. ~~~
  64. ### test
  65. ## Boucles
  66. «Liste» :
  67. ~~~{.bash}
  68. for i in "valeur1 valeur2prisavec1" valeur3 valeurn; do echo $i; done
  69. ~~~
  70. «Incrémentale» :
  71. ~~~{.bash}
  72. for ((i=0; i<10; i++)); do echo $i; done
  73. #ou
  74. for i in $(seq 1 10); do echo $i; done
  75. #ou
  76. for i in {1..10}; do echo $i; done
  77. ~~~
  78. «Conditionnelle» :
  79. ~~~{.bash}
  80. file=; while [ -f "$file" ]; do sleep 10; touch $file; done
  81. ~~~
  82. ## Processus
  83. ~~~{.bash}
  84. ( echo "Je suis un fils du script principal, mais on attend que je meurs."; exit 0; )
  85. ( echo "Libreee !"; yes "Libre je dis !"; ) &
  86. sleep 10 && kill $! #on tue le dernier fils créé
  87. ~~~
  88. > Note: Dans une boucle, ne pas créer de process via *(* *)* sinon un usage comme **break** ou **continue**, ... ne fonctionnera pas :
  89. >
  90. > ~~~{.bash}
  91. > while :
  92. > do
  93. > : && { echo "Stop !"; break; }
  94. > done
  95. > # ( echo "Stop !"; break; ) dans cet exemple ne quittera pas la boucle -car break dans un process fils-, et donc restera infini
  96. > ~~~
  97. ## Astuces [concrètes]
  98. ### Récupérer tout stdin dans une variable
  99. #### Complet
  100. ~~~{.bash}
  101. var="$(cat <&0)"
  102. #ou
  103. var="$(cat -)"
  104. ~~~
  105. #### Ligne par ligne
  106. ~~~{.bash}
  107. var=
  108. while read ligne
  109. do
  110. var="${var}${ligne}"
  111. done <&0
  112. ~~~
  113. autrement :
  114. ~~~{.bash}
  115. cat <&0 | (while read ligne; do ... done)
  116. ~~~
  117. ### Écrire un fichier temporaire [unique]
  118. ~~~{.bash}
  119. nomfichier=$(mktemp)
  120. #pour un répertoire
  121. nomrep=$(mktemp -d)
  122. ~~~
  123. > Note: La création d'un fichier temporaire n'implique pas côté système une suppression automatique de ce dernier.
  124. ### Gérer arguments donné au script
  125. Exemple :
  126. ~~~{.bash}
  127. #!/bin/bash
  128. DELAY=
  129. NUMARG=0
  130. FICHIER=
  131. while :
  132. do
  133. [ $# == 0 ] && break
  134. OPTIND=1
  135. while getopts ":d:n" opt "$@"
  136. do
  137. case "$opt" in
  138. d) DELAY=$OPTARG; (( NUMARG+=1 )) ;;
  139. n) NOMAIL=true; (( NUMARG+=1 )) ;;
  140. :) >&2 echo "Manque un argument avec cette option." ;;
  141. *) >&2 echo "$0 [-d DELAY] [-n] [FILE]"; exit 1 ;;
  142. esac
  143. done
  144. shift $((OPTIND-1))
  145. #Savoir si après toutes les options, une chaîne de caractère présente pour FILE
  146. [ -z "$1" ] && break
  147. #FICHIER=$1 si FICHIER non initialisé
  148. [ -z "$FICHIER" ] && FICHIER=$1 || { >&2 echo "Fichier en trop."; break; }
  149. shift
  150. done
  151. echo
  152. echo "==RESULTAT=="
  153. echo "ARG " $NUMARG
  154. echo "FICHIER=" $FICHIER
  155. echo "DELAY=" $DELAY
  156. echo "NOMAIL=" $NOMAIL
  157. exit 0
  158. ~~~
  159. Permettra par exemple :
  160. ~~~
  161. ./cmd -d 2 -n monfichier
  162. ./cmd -d2 monfichier
  163. ./cmd monfichier -d 2 -n
  164. ./cmd -n monfichier -d2
  165. ~~~
  166. ### Passer arguments de facon optionelle
  167. ${var:+..} peut etre utile
  168. ~~~{.bash}
  169. $ in_uid=1009 in_login=app_user adduser \
  170. --gecos "User $in_login" \
  171. --disabled-password "$in_login" \
  172. ${in_uid:+'--uid' "$in_uid"}
  173. ~~~
  174. ### Lire les commandes intégrés dans BASH
  175. #### Lister fonctions
  176. ~~~{.bash}
  177. $ typeset -F
  178. $ typeset -f #pour lister contenu de la fonction avec
  179. ~~~
  180. #### Voir contenu
  181. ~~~{.bash}
  182. $ type FUNCTION
  183. ~~~
  184. Pour ceux «built-in», pas possible :
  185. ~~~{.bash}
  186. $ type getopts
  187. getopts is a shell builtin
  188. ~~~
  189. ## Utiliser résultat xargs en milieu de commande
  190. ~~~{.bash}
  191. $ echo coucou | xargs -i echo {} c\'est moi!
  192. ~~~