Bash & Shell
De BlaxWiki
Révision datée du 5 septembre 2011 à 16:26 par 217.174.199.129 (discussion)
[Doc très interessante en anglais sur les quote en shell]
[Doc Général pour débutant en shell]
- Ordre de lecture et d'interprétation.
Il faut savoir que le shell lit plusieurs fois la ligne avant d'exécuter la commande. Cette lecture se fait dans l'ordre suivant :
1. substition de variables : le shell remplace les variables par leurs valeurs 2. substitution de commandes : le shell remplace une variable par son contenu qui est le résultat d'une commande 3. interprétation des pipes et des redirections 4. expansion des noms de fichiers : interprétation des caractères spéciaux pour compléter un nom de fichier et/ou de répertoire 5. exécution de la commande
- Dans un script shell ou dans une console :
$? C'est la valeur de sortie de la dernière commande. Elle vaut 0 si la commande s'est déroulée sans pb. $0 Cette variable contient le nom du script $1-$9 Les (éventuels) premiers arguments passés à l'appel du script $# Le nombre d'arguments passés au script $* La liste des arguments à partir de $1 $$ le n° PID du processus courant $! le n° PID du processus fils
( cmde ) exécute la commande dans un sous-shell
read a lecture d'une entrée pendant l'exécution d'un script
exit num renvoie le status de la commande (en général 0 la commande s'est bien exécutée)
return num code d'erreur
. script exécution du script dans le shell courant
eval arg interprète arg avant de l'exécuter
cmd1 && cmd2 séparateur conditionnel (cmd2 sera exécuté si cmd1 s'est exécuté correctement)
cmd1 || cmd2 séparateur conditionnel (cmd2 sera exécuté si cmd1 ne s'est pas exécuté correctement)
nom_fonction ()
{ liste_commandes ;} définition d'une fonction
exec arg exécute la commande dans un nouveau shell
set var initialisation d'une variable
unset var raz d'une variable
type cmde indique la localisation d'une commande
readonly var empêche la modification d'une variable
- Les expressions
expr exp op exp exécute des opérations arithmétiques (op vaut : + , - , \* , / , % , = , \> , \< , \> = , \< = , !=) expr exp1 \| exp2 renvoie exp1 si l'expression n'est pas nulle, sinon exp2 expr exp1 \& exp2 renvoie exp1 si l'expression n'est pas nulle, sinon exp2 expr exp1 : exp2 comparaison des deux arguments (renvoie le nombre de caractères en commun) expr length exp retourne le nombre de caractères de exp expr substr exp n1 n2 retourne une sous chaîne de exp commençant a la place n1 et de n2 caractères expr index exp car retourne la position du caractère car dans la chaîne exp
- Utilisation des quotes
\c banalise le caractère c `cmd` substitution de commande "whatever" banalise tous les caractères sauf $ ` \ 'whatever' banalise tous les caractères Example: match=`ls *.bak` #Puts names of .bak files into shell variable match. echo \* #Echos * to screen, not all filename as in: echo * echo '$1$2hello' #Writes literally $1$2hello on screen. echo "$1$2hello" #Writes value of parameters 1 and 2 and string hello.
- Dans les man pages ou les aides :
- Tout texte isolé, sans [] (crochet), {} (accolade), <> (chevron), est à taper tel qu'il apparaît
- le texte entre crochets [] est facultatif
- le texte entre accolades {} contient les choix à faire.
- les choix sont séparées par | (pipe) ou par une virgule , commande -{a|b} veut dire commande -a ou commande -b mais pas commande -ab
- le texte entre chevrons <> doit être remplacé par le texte approprié
- les parenthèses (...), utilisées pour les paramètres tels que les noms de fichiers
- les crochets [] et les chevrons <> peuvent être combinés [<nom_fichier>] - facultatif mais si vous les utilisez alors il faut écrire le nom du fichier
- les crochets [] et les accolades {} peuvent être combinés [--option={a|b|c}]
- Raccourcis clavier
TAB : auto-complète un mot à partir de la position du curseur.
CTRL + a : déplace le curseur en début de ligne (équivalent à la touche début).
CTRL + c : envoie le signal SIGINT à la tâche au premier plan, ce qui a pour effet de l'interrompre.
CTRL + d : ferme le shell courant (équivalent de la commande exit).
CTRL + e : (end) déplace le curseur en fin de ligne (équivalent à la touche fin).
CTRL + p : (previous) rappelle la commande précédente (équivalent à la touche flèche du haut).
CTRL + n : (next) rappelle la commande suivante (équivalent à la touche flèche du bas).
CTRL + r : (research) rappelle la dernière commande contenant les caractères spécifiés (équivalent à vim ~/.bash_history). Un 2e CTRL + r rappelle la prochaine commande
antérieure correspondant à la recherche. CTRL + s : rappelle la commande suivante de la recherche (attention à ne pas l'exécuter depuis un terminal car cette commande déclencherait
son XOFF). CTRL + o : exécute la commande trouvée dans la recherche.
CTRL + l : efface le contenu de l'écran (équivalent à la commande clear).
CTRL + u : efface le contenu de la ligne avant le curseur et le place dans le presse-papier.
CTRL + k : efface le contenu de la ligne après le curseur et le place dans le presse-papier.
CTRL + w : efface le mot avant le curseur et le place dans le presse papier.
CTRL + y : (yank) ajoute le contenu du presse-papier à partir de la position du curseur.
CTRL + z : envoie le signal SIGTSTP à la tâche au premier plan ce qui a pour effet de la suspendre. Pour la réafficher on peut entrer fg 'nom du processus'.
CTRL + x CTRL + x : (car x est en forme de croisement) alterne le curseur avec son ancienne position.
CTRL + x CTRL + e : (editor car reprend la variable $EDITOR du shell) édite la ligne courante dans votre éditeur de texte.
ALT + f : (forward) avance le curseur d'un mot.
ALT + b : (backward) recule le curseur d'un mot.
ALT + del : coupe le mot avant le curseur.
ALT + d : couper le mot après le curseur.
ALT + u : transforme le mot courant en majuscules à partir du curseur et avance d'un mot.
ALT + l : transforme le mot courant en minuscules à partir du curseur et avance d'un mot.
ALT + c : met la lettre sous le curseur en majuscule et avance d'un mot.
ALT + r : annule les changements et remet la ligne telle qu'elle était dans l'historique.