19
0
Fork 0
wiki/HowtoBash.md

3.1 KiB

Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.

Astuces Bash

function hello { echo Hello; echo $1; }

Raccourcis

Ctrl+d : quitte le terminal courant
Ctrl+a : aller en début de ligne
Ctrl+e : aller en fin de ligne
Ctrl+k : effacer (coupe) du curseur à la fin de la ligne
Ctrl+u : effacer (coupe) du début de ligne au curseur
Ctrl+y : colle la partie précédemment coupée
Ctrl+r : rechercher parmi l'historique
Ctrl+s : freeze l'affichage de l'output
Ctrl+q : défreeze l'affichage de l'affichage de l'output
Ctrl+t : inverse les caractères autour du curseur
Ctrl+c : annule la ligne en cours et passer sur une nouvelle ligne vide
Ctrl+z : suspend la tâche en cours
ctrl+l : efface/rafraichit l'écran
ctrl+w : efface les mots qui précède le curseur
ctrl+x ctrl+e : édite la ligne dans $EDITOR
alt+effacer : Efface un mot à gauche du curseur
alt+d : Efface un mot à droite du curseur

Script

Variables

Environnement

$PPID
$BASHPID
$!
$$
$PIPESTATUS

Initialiser

var=

En readonly <=> constante

readonly var="pas touche"

Protéger

[ -n "${var}" ] && true
#et surtout pas
[ -n $var ] && false
#car si var est vide, l'expression sera équivalente à [ -n ] => erreur de syntaxe
echo $var "joue au ${foot}"
#et surtout pas
echo $var "joue au $foot"
#car sinon c'est bien le contenu de la variable $foot qui sera remplacé et non $foo

Conditions

true && echo "C'est toujours vrai"
false || echo "Ça sera toujours vraiment faux"
[ $? -eq 0 ] && { echo "tâche"; sleep 1; echo -e "\e'a plus!!" }

test

Boucles

«Liste» :

for i in "valeur1 valeur2prisavec1" valeur3 valeurn; do echo $i; done

«Incrémentale» :

for ((i=0; i<10; i++)); do echo $i; done
#ou
for i in $(seq 1 10); do echo $i; done
#ou
for i in {1..10}; do echo $i; done

«Conditionnelle» :

file=; while [ -f "$file" ]; do sleep 10; touch $file; done

Processus

( echo "Je suis un fils du script principal, mais on attend que je meurs."; exit 0; )
( echo "Libreee !"; yes "Libre je dis !"; ) &
sleep 10 && kill $! #on tue le dernier fils créé

Note: Dans une boucle, ne pas créer de process via ( ) sinon un usage comme break ou continue, ... ne fonctionnera pas :

while :
do
   : && { echo "Stop !"; break; }
done
# ( echo "Stop !"; break; ) dans cet exemple ne quittera pas la boucle -car break dans un process fils-, et donc restera infini

Astuces [concrètes]

Récupérer tout stdin dans une variable

Complet

var="$(cat <&0)"
#ou
var="$(cat -)"

Ligne par ligne

var=
while read ligne
do
  var="${var}${ligne}"
done <&0

autrement :

cat <&0 | (while read ligne; do ... done)

Écrire un fichier temporaire [unique]

nomfichier=$(mktemp)
#pour un répertoire
nomrep=$(mktemp -d)

Note: La création d'un fichier temporaire n'implique pas côté système une suppression automatique de ce dernier.