Shell

mardi 16 septembre 2008
par  Jerome ROBERT
popularité : 6%

VIII. Le shell :

Les Shells sont des interpréteurs de commandes qui permettent à un utilisateur de "dialoguer" avec le système d'exploitation de la machine (donner des ordres et récupérer les résultats).

Il existe plusieurs shells standards sous UNIX:

sh (Bourne Shell) le shell de référence

csh (C Shell ) syntaxe proche du langage C (+ alias + historique des commandes)

ksh (Korn Shell) (alias + historique) avec compatibilité sh

sh (Posix Shell) standard - peu de différence avec le ksh

les shells restreints, dérivés des précédents mais possédant des fonctionnalités fortement limitées (par exemple, la commande cd n'existe plus).

Lorsqu'il exécute une ligne de commande, un shell travaille en deux étapes : il interprète d'abord les caractères spéciaux, puis il cherche la commande qu'il doit exécuter.

 

A. Les variables

Une variable est une chaîne de caractère (définie dans l'espace de données d'un processus) à laquelle est associée une valeur.

Le shell utilise un certain nombre de variables qui déterminent en partie son comportement.

Le shell est dans sa configuration standard non déclaratif, c'est-à-dire qu'il n'est pas nécessaire de déclarer une variable avant de l'utiliser.

 

1. Initialiser/évaluer une variable

Par défaut, les variables sont de type chaîne ; elles peuvent néanmoins être interprétées comme des entiers dans certains cas (par exemple lors de calculs).

On peut les créer ou modifier leurs valeurs en utilisant l'opérateur d'affectation "=". Il ne faut surtout pas mettre de blanc de chaque coté du caractère "=" .

La valeur (ou le contenu) d'une variable peut être récupéré(e) en préfixant le nom de la variable par le symbole $. On parle de substitution de variable.

 

Exemples :

$ VAR="Unix est beau" # ' NE PAS METTRE D'ESPACE AUTOUR du "=" '

$ echo $VAR

Unix est beau

 

 

2. Variables locales / d’environnement

Comme tout processus Unix un shell possède un espace mémoire contenant entre autres des variables.

Ces variables sont rangées dans différents ensembles :

l'ensemble des variables locales, propres au processus,

l'ensemble des variables d'environnement : il s’agit de l’ensemble des variables qui seront héritées par les éventuels processus fils.

 

 

 

 

3. Manipulation de variables : les commandes set, unset et env<

 

$ unset VAR détruit la variable VAR.

$ set affiche toutes les variables (privée + env) du shell.

$ env affiche les variables de l'environnement.

$ export Toto transfère la variable Toto dans l'environnement.

 

4. Les principales variables du shell

 

Certaines variables du shell sont prépositionnées. Voici les principales, ainsi que leur signification :

 

 

TMOUT

 

si ¹ de 0, nombre de secondes avant logout automatique

HOME

 

répertoire de connexion

TZ

 

fuseau horaire

MANPATH

 

répertoires où man cherche les fichiers d'aides

LINES

 

nombre de lignes

COLUMNS

 

nombre de colonnes

MAIL

 

nom du fichier de stockage du courrier

MAILCHECK

 

fréquence (en secondes) de vérification de la boîte aux lettres

HISTFILE

 

nom du fichier de stockage des commandes

HISTSIZE

 

nombre de lignes de HISTSIZE

IFS

 

séparateurs de mots de la ligne de commande

SHELL

 

nom du shell de connexion

LOGNAME

 

login de connexion

PS1

 

prompt primaire (invite du shell) (# pour root=super user)

PS2

 

prompt secondaire (suite commande incomplete)

PWD

 

répertoire courant (mis à jour pour chaque cd avec ksh)

PATH

 

répertoires d'accès aux commandes

TERM

 

type de terminal

 

Pour connaître la signification des autres variables du shell telles que LANG , DISPLAY , TMOUT , ... , il suffit d'activer l'aide en ligne sur le shell (man sh-posix).

 

 

5. Caractères de protections

\

 Le caractère qui suit perd son rôle fonctionnel

' '  

Tous les caractères situés entre les simples quotes perdent leur rôle fonctionnel

" "

 Tous les caractères situés entre les doubles quotes perdent leur rôle fonctionnel sauf :

$

 Valeur de variable

`commande`

 Substitution  de commande

 

Exemples:

$ echo *

fifi loulou rep repbis riri

$ echo \*

*

$ echo "Type de terminal : $TERM "

Type de terminal : vt220

$ echo 'Type de terminal : $TERM '

Type de terminal : $TERM

$ echo "Type de terminal : \$ $TERM \$"

Type de terminal : $ vt220 $

$ echo "La date est `date`"

La date est Sat Dec 16 15:58:39 GMT 1995

$ echo 'La date est `date`'

La date est `date`

$

 

 

6. Affectation du résultat d'une commande

Substitutions de commandes peut-être utile de récupérer le résultat d'une commande dans une variable ; deux syntaxes sont possibles :

 

  • `commande` Le résultat de la commande est inséré dans la liste d'arguments
  • $(commande) Autre notation possible en Korn-shell. Permet les imbrications

 

L'ancienne : utilisation de `

Exemple : $ CPATH=`pwd`

$ echo $CPATH

/users/user1

La "nouvelle" (découlant des normes POSIX) : utilisation de $( )

Exemple : $ CPATH=$(pwd)

 

B. Evaluation d’expressions mathématiques

La commande let permet d’effectuer des calculs, en utilisant les opérateurs suivants :

+ addition
- soustraction
\* multiplication
/ division

 

 

Les syntaxes:

let expression est équivalent à (( expression ))

sont strictement équivalents.

Exemples :

$ x=4

$ let x=x+1 # pas d'utilisation du "$"

$ echo $x

5

$ (( y = x / 2 )) ; echo $y

2

$ let "z = x %2" ; echo $z

1

 

 

 

C. Fonctionnalités du Korn Shell

 

1. Substitution du "tilde"

~ est remplacé par le répertoire de connexion,

~user est remplacé par le répertoire de connexion de l'utilisateur user.

2. Les alias

alias permet de définir simplement de nouvelles commandes (abrégées)

 

Exemples :  

$ alias qui=’who | cut -c-8’ définit un nouvel alias

$ alias h=history

$ alias del='rm -i'

$ unalias h détruit l'alias h

$ alias affiche la liste des alias

 

3. Fichiers d'initialisation

Lors de la connexion d'un utilisateur utilisant un Korn shell, les fichiers lus successivement sont :

  • /etc/profile, contenant la configuration commune aux utilisateurs,

  • $HOME/.profile, où l'utilisateur peut personnaliser son environnement (umask, modification de PS1, ...)

 

De plus, si la variable ENV contient un nom de fichier lisible, ce dernier sera lu (ainsi qu'au lancement de shells fils). Conventionnellement, il s'agit de $HOME/.kshrc.

 

 

connecté...

 

4. Historique des commandes

a) Utilisation de la variable EDITOR

La variable EDITOR peut contenir le nom d'un éditeur (vi, emacs, ...) ; dans ce cas, le fichier .sh_history est édité à l'aide d'une version mono-ligne de l'éditeur spécifié après avoir appuyé sur la touche ESC. Cette édition s'effectue à partir de la dernière ligne de .sh_history (c'est-à-dire en rappelant les commandes les plus récentes d'abord). On utilise en général EDITOR=vi

 

$ ESC Edite le fichier .sh_history ligne par ligne avec vi. L'utilisation des commandes de cet éditeur permet de modifier une ligne de commande.

k récupérer les commande à partir de la plus récente,

l,h déplacement sur la ligne

a, i passage en mode insertion

...

 

5. Les méta caractères :

Une des premières fonctions du shell est d'interpréter un certain nombre de caractères avant l'appel des commandes.

Il est à noter que les commandes Unix ne traitent pas les caractères spéciaux.

Elles héritent d'une liste de paramètres déjà résolue et ne se préoccupent pas de mécanismes comme les redirections ou le «pipeline».

Ce principe de base favorise grandement l’activité de programmation et s’inscrit parfaitement dans la démarche «boîte à outils» modulaire voulue par les concepteurs du système.

Rappel des caractères déjà évoqués

< Redirection de l'entrée standard
> et >> Redirections de la sortie standard
2> et 2>>

 Redirections de l'erreur standard

Processus séquentiels

Mécanisme du «pipeline»

&

 Mode arrière-plan

( )

 Grouper des commandes

=

 Affectation de variable

$ Contenu d'une variable

 

Désignations abrégées de noms de fichiers

N'importe quelle chaîne dans un nom de fichier Utilisé seul, signifie : «Tous les fichiers du répertoire courant» ( Ne sélectionne pas les fichiers commençant par . ( point ) )
? Présence d’un caractère quelconque dans un nom de fichier
[ensemble_caractères]  Présence d’un caractère de l’ensemble

[!ensemble_caractères]  

Présence d’un caractère ne figurant pas dans l’ensemble

 

Exemple :

$ echo *

fifi loulou rep repbis riri

$ echo .??*

.exrc .profile .sh_history

$ ls -l .[!.]*

-rw-r--r-- 1 stage1 stage 38 Oct 16 18:51 .exrc

-rwxr-xr-x 1 stage1 stage 390 Oct 17 10:49 .profile

-rw------- 1 stage1 stage 2736 Dec 16 15:27 .sh_history

 

Résumé :

Caractères

 

Signification

" ' \

 

Déspécialisation des caractères interprétés par le shell.

< espace> < tab>

< retour chariot >

 

Séparateurs de mots.

; && ||

 

Enchaînement de commandes

* ? [! - ]

 

Génération automatique de noms de fichiers.

< << > >> >|

<& <- >& >-

 

Redirection et duplication des entrées / sorties.

$ ${ }

 

Substitution de variable.

$( ) `

 

Substitution de commande.

&

 

Lancement de commande en arrière plan

#

 

Commentaire.

( )

 

Sous-environnement.

~ ~login ~+ ~-

 

Substitution de répertoire.


Statistiques

Dernière mise à jour

mercredi 5 juillet 2017

Publication

264 Articles
Aucun album photo
Aucune brève
6 Sites Web
2 Auteurs

Visites

80 aujourd’hui
188 hier
549826 depuis le début
9 visiteurs actuellement connectés