BASH

Bash est un surdoué, un shell plein de ressources.

De façon native (built-in on dit), bash sait faire beaucoup de choses sympas. Si on lui adjoint des commandes efficaces, on arrive à un traitement d’une puissance très honorable !

La base

CTRL+A : aller au début de la ligne
CTRL+R : retrouver une commande que vous avez tapez avant en tapant quelques lettres
CTRL+E : aller à la fin de la ligne
export a=2

Les combos

Pour faire des choses amusantes, il nous faut utiliser des “pipes”. (prononcer païpes)
Les symboles > pour créer et cat >> pour “appender”.

cat toto.txt | less

on envoie le contenu de toto.txt à la commande less qui elle va l’afficher page par page. En l’occurrence aucun intéret puisque faire directement less toto.txt fera la même chose en moins de texte.

Par contre ça :

cat toto.txt | sort | uniq | less

C’est intéressant, car on liste le contenu du fichier toto.txt, on en envoie le résultat à la commande sort qui va trier par ordre alphabétique, ensuite ce résultat trié va vers la commande uniq qui dédoublonne le résultat et enfin vers la commande less qui affiche le résultat page par page. Tout ca en une ligne.

On aurait d’ailleurs pu finir cette chaine de flux par un > pour l’écrire dans un fichier :

cat toto.txt | sort | uniq > toto_trié_et_dédoublonné.txt

la plupart du temps | sert à chainer les commandes et > à écrire dans un fichier (ou à la fin de celui-ci avec >>).

Allons-y un peu plus franchement. Admettons qu’un fichier liste.txt contienne plein de prénoms les uns à la suite des autres en vrac, même pas un par ligne, juste séparés par des espaces et que l’on veuille les trier dans l’ordre alphabétique.

Une petite boucle bash :
export a=`cat liste.txt`
for i in $a; do echo $i | sort >liste_triée.txt; done

On insère le résultat de la commande “cat liste.txt” dans la variable a. Ensuite on fait une boucle sur un compteur i au sein de la variable a, on affiche le résultat et ensuite on trie et on insère dans le fichier.

Parfois le séparateur n’est pas pratique et un utilitaire très puissant, appelé AWK, peut vous aider. La synthaxe est complexe mais le résultat est sympa, voici un exemple :

awk -F : ‘{print $1 ” ” $4}’ /etc/passwd

on considère “:” comme le séparateur et on affiche $1 (le premier item) puis un espace ” ” puis $4 (le 4° item selon le séparateur “:”.

Créer un script bash

Le “shebang”, pour sh bang, lancer un shell. C’est comme cela qu’on appel le fait de lancer Bash, tout script bash commence par :

#!/bin/bash

Ensuite on insère son traitement, si on veut prendre en compte les paramètres de la ligne de commande,

$0 = nom du script, $1 = 1° paramètre, $2 = 2° paramètres etc…

# !/bin/bash
PATH=/usr/local/bin;/bin;/sbin;/usr/local/sbin;/usr/bin
echo $0 est lancé avec les paramètres $1 et $2

case “$1″ in
start)
echo starting
;;

case “$1″ in
stop)
echo stopping
;;

case “$1″ in
*)
echo rien à faire je ne comprends que start ou stop
;;

Evidemment, là ça manque d’intérêt, il faut lui faire faire des vraies choses au script mais bon, c’est un squelette qui fonctionne, à vous de le peupler.

Faire démarrer un script au moment du boot et le couper à son arrêt

Le placer dans /etc/init.d et ensuite faire un lien dans /etc/rc3.d et un autre dans /etc/rc6.d :

cp script.sh /etc/init.d
ln -s /etc/init.d/script.sh /etc/rc3.d/S99_myscript
ln -s /etc/init.d/script.sh /etc/rc3.d/K99_myscript
ln -s /etc/init.d/script.sh /etc/rc6.d/S99_myscript
ln -s /etc/init.d/script.sh /etc/rc6.d/K99_myscript

si vous avez le case avec les start et stop dans le script, le système lancera automatiquement le start tout à la fin du boot et stoppera juste au redémarrage.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *