**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+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 ~~~{.bash} $PPID $BASHPID $! $$ $PIPESTATUS ~~~ ### Initialiser ~~~{.bash} var= ~~~ En readonly <=> constante ~~~{.bash} readonly var="pas touche" ~~~ ### Protéger ~~~{.bash} [ -n "${var}" ] && true #et surtout pas [ -n $var ] && false #car si var est vide, l'expression sera équivalente à [ -n ] => erreur de syntaxe ~~~ ~~~{.bash} echo $var "joue au ${foo}t" #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 ~~~{.bash} 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» : ~~~{.bash} for i in "valeur1 valeur2prisavec1" valeur3 valeurn; do echo $i; done ~~~ «Incrémentale» : ~~~{.bash} 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» : ~~~{.bash} file=; while [ -f "$file" ]; do sleep 10; touch $file; done ~~~ ## Processus ~~~{.bash} ( 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 : > > ~~~{.bash} > 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 ~~~{.bash} var="$(cat <&0)" #ou var="$(cat -)" ~~~ #### Ligne par ligne ~~~{.bash} var= while read ligne do var="${var}${ligne}" done <&0 ~~~ autrement : ~~~{.bash} cat <&0 | (while read ligne; do ... done) ~~~ ### Écrire un fichier temporaire [unique] ~~~{.bash} 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.