- Le Shell
- Fonctionnalités Générales
- Les Shells
- Comparaison des Shells
- Algorithme du shell
- Caractères de contrôle au clavier
- Format d'une commande
- Pipelines, Listes
- Enchaînement de commandes
- Les entrées-sorties
- Redirection des entrées-sorties
- Méta-caractères d'expansion
- Variables d'environnement prédéfinies
- Variables de substitution prédéfinies
- Variables utilisateur
- Instructions conditionnelles
- Instructions de boucle
- Instructions de rupture de boucle
- Instructions d'aiguillage
- Expansion de commande
- Expansion de paramètre
- Quotage
- Déroutements
- Commandes internes au Shell
- Commandes de test
- Arithmétique
- Fonctions
- Fichier de commande, Script
- Fichiers d'initialisation
- /etc/profile
- (sous System V uniquement)
- .profile
- .zshrc, .bashrc
- (en zsh ou bash uniquement)
- .login, .cshrc, .tcshrc, .logout
- (en csh ou tcsh uniquement)
- Fonctionnalités spécifiques ENST
- Schéma de fonctionnement
- Personalisation de l'environnement
- Description générale
- L'interpréteur de commandes
- lancement d'une commande
- redirection des entrées/sorties
- enchaînement des commandes et pipelines
- méta-caractères d'expansion
- variables prédéfinies
- Programmation en shell
- fichier de commandes, shell-script
- variables formelles
- variables utilisateur, exportation et héritage
- instructions de contrôle
- substitutions
- quotage et évaluation
- déroutements
- commandes internes
- arithmétique en shell
- fonctions
- fichiers d'environnement et spécificités ENST
- Processus premier d'une session
- user:password:uid:gid:comment:homedir:shell
- attaché au terminal console (login) ou à un pseudo-terminal (remote login, activation d'une fenêtre)
- xterm (X11), cmdtool et shelltool (openwin)
- Interpréteur de commandes
- lecture et exécution de commandes
- redirection des entrées/sorties
- expansion des noms de fichiers
- interface utilisateur (historique, aliasing, contrôle des jobs,
complétion, édition de lignes de commandes.
- Langage de programmation
- programmation interactive (en ligne)
- programmation non-interactive (fichier de commandes)
- intructions conditionnelles et itératives, fonctions
- variables prédéfinies et variables utilisateur
- mécanismes de substitution de paramètres
- commandes internes (builtin)
- sh ("Bourne shell", Steve Bourne)
- shell historique (disponible sur tous les Unix)
- csh ("C-shell", Bill Joy)
- shell BSD (disponible sur tous les Unix)
- ksh ("Korn shell")
- shell normalisé POSIX (P1003.2) et ISO (HP, Solaris)
- bash ("Bourne again shell" de Brian Fox et Chet Ramey)
- Ksh du domaine public (installé sur toutes les machines)
- zsh ("Zero shell")
- Ksh du domaine public (installé sur toutes les machines)
- tcsh ("Toronto C-shell")
- rc (Plan9, Tom Duff)
Shell progr jobs histo aliases édition flèche extens
ligne
POSIX
sh std non non non non non non
csh non std oui oui oui non non non
tcsh non std oui oui oui oui oui non
ksh norme oui oui oui oui non non
bash norme oui oui oui oui oui non
zsh norme oui oui oui oui oui oui
Shell interface utilisateur programmation
sh inexistante sûre (standard)
csh moyenne à déconseiller
tcsh bonne à déconseiller
ksh bonne normalisée
bash bonne normalisée
zsh excellente normalisée + extensions
- Ouverture initiale de 3 fichiers standard
- entrée standard (stdin, fd=0), par défaut le clavier
- sortie standard (stdout, fd=1), par défaut l'écran
- sortie erreur standard (stderr, fd=2), par défaut l'écran
- Le shell lit sur son entrée standard
- lecture de la commande
jusqu'à la fin de ligne (\n) et interprétation des
métacaractères et opérateurs
- lecture des lignes de commandes jusqu'à la fin de fichier (^D)
- Lancement d'une commande
- recherche du nom de la commande à l'aide du PATH (path)
- en premier plan : fork() exec(commande) wait() prompt
- en arrière plan : fork() exec(commande) prompt
- Caractères de contrôle non gérés par le
shell
- <cr> fin de ligne (retour chariot) mappé en
<cr><lf>
- <lf> fin de ligne (nouvelle ligne) mappé en
<cr><lf>
- <tab> tabulation
- <bs> ^H, backspace, effacement du caractère
précédent
- <del> ^?, souvent identique à <bs>
- <^C> interruption d'un processus attaché au terminal
- <^\> arrêt d'un processus avec vidage mémoire
(core)
- <^Z> suspension d'un processus en premier plan
- <^U> effacement de la ligne complète
- <^W> effacement du mot qui précède
- <^D> fin de fichier => si le shell lit, fin d'un shell
- <^S> suspension de l'affichage écran (Xoff)
- <^Q> reprise de l'affichage écran (Xon)
- Gestion des caractères de contrôle par
stty
- stty erase ^H kill ^U intr ^C susp ^Z quit ^\ eof ^D
- Métacaractères
- | & ; ( ) < > <espace> <tab>
- Opérateurs de contrôle
- || & && ; ;; ( ) | <newline>
- Invite (le prompt) principale
- $ en mode utilisateur
- # en mode super-utilisateur
- <user@host: num> défini tel quel à l'ENST
- variable PS1
- Invite secondaire
- > en mode interactif
- variable PS2
- Commande simple
- une commande simple est une séquence de mots
séparés par un séparateur blanc et de redirections.
Le premier mot désigne le nom de la commande à
exécuter,
les mots suivants sont passés en arguments à la commande.
- la valeur retournée d'une commande est celle de son exit.
- Chemin de recherche du nom d'une commande : PATH ou path
(csh)
- PATH=/usr/ucb:/bin:/usr/bin:/usr/local/bin:~/bin:.
- Pipeline
- un pipeline est une séquence d'une ou plusieurs commandes
séparées par le caractère |.
- format : [!] command1 [ | command2 ... ]
- la sortie standard de la première commande est connectée
à l'entrée standard de la commande suivante, et ainsi de suite.
- Liste
- une liste est une séquence d'un ou plusieurs pipelines
séparés par un des opérateurs : ;,
&, &&, ||.
- une liste est optionnellement terminée par un ;,
&, <newline>.
- précédences des opérateurs: && >
|| > ; = &
- si une commande est terminée par l'opérateur
&, ls shell exécute la commande un arrière plan
(backgroud)dans un sous-shell.
- les commandes séparées par un ; sont
exécutées séquentiellement, le shell attend la fin de
chaque commande.
- Commande simple (en premier plan)
- Commande simple (en arrière plan)
- Pipeline (tube de communication)
- $ commande1 [ arg ... ] | commande2 [ arg ...] | ...
- Séquencement de commandes (en premier plan)
- $ commande1 [ arg ... ]; commande2 [ arg ... ]; commande3 ...
- Exécution par un nouveau shell ()
- $ sh commande [ arg ... ]
- $ (commande [ arg ... ])
- $ (commande [ arg ... ]) &
- Regroupement de commandes
- $ (com1 [ arg ... ]; com2 [ arg ... ]; com3 ...)
- $ (com1 [ arg ... ]; com2 [ arg ... ]; com3 ...)&
- Interruptions clavier
- <^C> interruption d'un processus
attaché au terminal
- <^\> arrêt d'un processus avec vidage mémoire (core)
- <^Z> suspension d'un processus en premier plan
- Fichiers standard
- entrée standard (stdin, fd=0), par
défaut le clavier
- sortie standard (stdout, fd=1), par défaut l'écran
- sortie erreur standard (stderr, fd=1), par défaut l'écran
- Redirection de l'entrée standard
- < fichier ou périphérique
- <<marque texte qui suit jusqu'à la marque (here documents)
- Redirection de la sortie standard
- > fichier ou périphérique
- 1> fichier ou périphérique
- >> fichier ou périphérique (en ralongement)
- Redirection de la sortie erreur standard
- >& &> fichier ou périphérique
- 2> fichier ou périphérique
- Autres redirections
- <> fichier ou
périphérique (en mise à jour)
- Exemples
- cat fichier1 >fichier2 copie
- cat fichier3 >>fichier2 ajout
- cat >fichier4 saisie de texte
- cat <fichier4 listage
- cat <fichier4 >fichier5 copie
- cat <fichier6 >>fichier5 ajout
- cat <<!EOF >fichier7 copie
ligne1
ligne2
...
autres lignes
!EOF
- rm *.o *% *~ core >& /dev/null nettoyage silencieux
- appli 1>/dev/null 2>&1 & silence total en
background
- Expansion des noms de fichiers
- HOME chemin d'accès au répertoire initial de
l'utilisateur
- PATH suite de chemins d'accès aux répertoires des
exécutables
- PS1 invite principale du shell en mode interpréteur
- PS2 invite secondaire du shell en mode programmation
- IFS séparateurs de champ des arguments
- MAIL chemin d'accès à la boîte aux lettres utilisateur
- MAILCHECK intervale en sec au bout duquel le mail est
contrôlé
- CDPATH liste de chemins d'accès pour la commande cd
- ENV nom du fichier des variables d'environnement
- TERM nom du type de terminal
- $0 nom du script (pathname)
- $1, ..., $9 arguments (du 1er au 9ème)
- $# nombre d'arguments
- $* liste de tous les arguments
- $@ liste de tous les arguments
- $? code retourné par la dernière commande
- $$ numéro de processus de ce shell
- $! numéro du dermier processus en arrière plan
- $- drapeaux fournis au shell par set
- Condition simple: if then ... fi
if commande ;
then
liste de commandes
fi
- Condition avec alternative: if then ... else ... fi
if commande ; then
liste de commandes
else
liste de commandes
fi
- Condition multiple: if then ... elif then ... fi
if commande ; then
liste de commandes
elif commande ; then
liste de commandes
else
liste de commandes
fi
- Boucle for: for in do ... done
for variable
[ in liste d'arguments ]
do
liste de commandes
done
- Boucle while: while do ... done
while commande
do
liste de commandes
done
- Boucle until: until do ... done
until commande
do
liste de commandes
done
- continuation de boucle: continue [n]
- Sortie de boucle : break [n]
- sortir d'une ou n boucles for, while, until
- n = niveau de boucle à partir de la boucle la plus externe
- Sortie de programme: exit n
- sortir d'un script-shell avec un code de retour (n)
- Aiguillage case: case in ... esac
case
$variable in
motif1) liste de commandes ;;
motif2) liste de commandes ;;
*) liste de commandes ;;
esac
- Exemple :
case $# in
1) arg1=$1;;
2) arg1=$1; arg2=$2 ;;
0) echo "usage: $0 arg1 [ arg2 ]
exit 1;;
esac
- Rôle
- le quotage est utilisé pour supprimer les
fonctionnalités de certains caractères spéciaux du shell, dont les métacaractères.
- Méta-caractères
- Caractère d'échappement \
- le caractère
\ préserve la valeur littérale du caractère qui le suit immédiatement.
- Simples quotes '...'
- les caractères inclus
entre 2 simples quotes ne sont pas évalués, ils conservent leur valeur littérale.
- Doubles quotes "..."
- les caractères inclus
entre 2 doubles quotes conservent leur valeur littérale à
l'exception de $ ` et \.
- Exemple
echo "usage: `basename $0` '$DISPLAY'"
- Séquence d'exception
- Ignorance des signaux
- trap 'l' liste de signaux
Exemple :
trap '' 1 2 3 15
- Réinitialisation
- trap liste de signaux
Exemple :
trap 2 3
- Liste des signaux
- :
- . filename
- alias [nom[=commande] ...]
- bg [jobnum]
- cd [dir]
- echo [-ne] [arg ...]
- eval [arg ...]
- exec [[-] commande[arg ...]]
- exit [n]
- export [variable ...]
- fg [jobnum]
- job [jobnum]
- kill [-signal] [pid|jobnum]
- popd
- pushd [dir]
- pwd
- read [variable ...]
- readonly [variable ...]
- return [n]
- set [-aefhknotuvxldCH] [arg ...]
- shift [n]
- test expression
- times
- trap [arg] [signaux]
- type [-all|-type|-path] [commande]
- ulimit [-SHacdfmstpn [limite]]
- umask [mode]
- unalias [nom ...]
- unset [variable ...]
- wait [pid|jobnum]
- test sur les fichiers
- Comparaisons alphanumériques
- test "$str1" = "chaine1"
- test "$str1" != "chaine1"
- test "$str1" > "chaine1"
- test "$str1" < "chaine1"
- test "$str1" >= "chaine1"
- test "$str1" <= "chaine1"
- Comparaisons algébriques
- Comparaisons booléennes
- Autres opérateurs
- /etc/profile
- .profile
- .login
- .cshrc
- .logout
- .bash_profile
- .bashrc
- .bash_alias
- .inputrc
- .zshrc
- .tcshrc
- Shell initial par défaut : /bin/sh
- interprète~/.profile chez l'utilisateur
- ~/.profile ressource /usr/local/startup/profile
- .profile déroule /usr/local/startup/shenv qui
initialise les variables d'environnement par défaut
- .profile déroule ~./.shenv qui initialise les variables
d'environnement privées de l'utilisateur
- Shell de travail choisi (défaut ou préférence)
- .profile détermine un shell de travail (par défaut: zsh), sinon prend le 1er de la variable SHELLPREF dans le
fichier ~/.shenv.preload
- Détermination du système de multifenêtrage
- .profile lance automatiquement(ou non) le système de multifenêtrage par défaut ou choisi avec les variables
WINDOWSYSTEM et WINDOWMANAGER de ~/.shenv.preload

- Procédure d'installation : install-startup
- menus proposés
- lire la FAQ (Frequently Asked Questions)
- choisir l'installation par défaut
- vérifier le contenu du fichier ~/.shenv.preload
- Fichiers modèles
- .profile:/usr/local/startup/profile
- .shenv: /usr/local/startup/shenv
- .zshrc: /usr/local/startup/zshrc
- .bashrc: /usr/local/startup/bashrc
- Modification des fichiers d'environnement
- éditer et compléter le fichier ~/.shenv
- selon le shell choisi, supprimer ~/.zshrc ou ~/.bashrc,
recopier leur modèle /usr/local/startup/{zshrc,bashrc}
dans ~/.{zshrc,bashrc} dans le but de les modifier
© (Copyright) Philippe Dax - 1994-2005
visitors since Dec 1995.