Les shells

RETOUR

Shell : Environnement d'utilisation en ligne de commandes.

Exemples :

  • sh (Bourne shell)
  • bash (Bourne again shell)
  • csh (C shell)
  • ksh (Korn shell)
  • ...

Beaucoup de caractéristiques communes.

bash: Shell usuellement configuré par défaut avec Linux.

Existence d'un fichier de configuration pour chaque shell, commun à tous les utilisateurs, généralement sous /etc, modifiable par l'administrateur système et utilisé chaque fois qu'un shell est lancé.

Existence possible d'un fichier de configuration, pour chaque shell, pour chaque utilisateur, stocké sous la racine du répertoire de base de l'utilisateur, modifiable par lui et utilisé après le fichier de configuration commun.

Différents noms pour ces fichiers pour les différents shells et les différentes distributions.

Variable d'environnement

Variable gérée au sein d'un shell. Caractérisée par un nom et une valeur.

  • set : Commande d'affichage de la liste des variables d'environnement et de leurs valeurs.
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_COMPLETION=/etc/bash_completion
BASH_COMPLETION_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="1" [2]="17" [3]="1" [4]="release"
[5]="i486-pc-linux-gnu")
BASH_VERSION='3.1.17(1)-release'
COLORTERM=
COLUMNS=112
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Sg21DwlViV
,guid=2e97ed4427821775e98ecac831163200
DESKTOP_SESSION=default
DIRSTACK=()
DISPLAY=:0.0
DM_CONTROL=/var/run/xdmctl
EUID=1000
GROUPS=()
GS_LIB=/home/nico/.fonts
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/nico/.gtkrc-2.0:
/home/nico/.kde/share/config/gtkrc-2.0
GTK_RC_FILES=/etc/gtk/gtkrc:/home/nico/.gtkrc:
/home/nico/.kde/share/config/gtkrc
HISTCONTROL=ignoredups
HISTFILE=/home/nico/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/nico
HOSTNAME=agamemnon
HOSTTYPE=i486
IFS=$' \t\n'
KDE_FULL_SESSION=true
KDE_MULTIHEAD=false
KONSOLE_DCOP='DCOPRef(konsole-7429,konsole)'
KONSOLE_DCOP_SESSION='DCOPRef(konsole-7429,session-1)'
LANG=fr_FR.UTF-8
LANGUAGE=fr_FR:fr:en_GB:en
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LINES=33
LOGNAME=nico
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;
35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;
42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;
31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;
31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;
31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;
35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;
35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;
35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;
35:*.xcf=01;35:*.xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;
35:*.ogg=01;35:*.wav=01;35:'
MACHTYPE=i486-pc-linux-gnu
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/bin/X11:/usr/games
PIPESTATUS=([0]="0")
PPID=7429
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/nico
SESSION_MANAGER=local/agamemnon:/tmp/.ICE-unix/7371
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:interactive-comments:monitor
SHLVL=2
SSH_AGENT_PID=7314
SSH_AUTH_SOCK=/tmp/ssh-vZUzct7278/agent.7278
TERM=xterm
UID=1000
USER=nico
WINDOWID=41943047
XCURSOR_THEME=kubuntu
XDM_MANAGED=/var/run/xdmctl/xdmctl-:0,maysd,mayfn,sched,rsvd,method=classic
_=set
i=/etc/profile.d/which-2.sh
langfile=/root/.i18n

Exemple de résultat d'exécution de la commande set

Désignation de la valeur d'une variable par utilisation de son nom précédé d'un $.

capture2.png (14813 octets)

echo HOSTNAME -> HOSTNAME, le nom de la variable
echo $HOSTNAME -> agamemnon, la valeur de la variable

Configuration d'une variable en tapant son nom suivi d'un égal suivi de la valeur (sans espace).

capture3.png (15134 octets)

Quelques variables caractéristiques

  • HOME : Répertoire de base d'un utilisateur (dynamique)
  • LOGNAME : Login de l'utilisateur en session (dynamique)
  • PATH : Ensemble des chemins de recherche des applications lancées (séparés par des :)
  • PS1 : Prompt
  • PWD : Répertoire courant (dynamique)
  • SHELL : Nom du shell courant (dynamique)

~ : Répertoire de base d'un utilisateur (dynamique)

Caractères joker

Utilisation possible de caractères "joker" dans les lignes de commandes pour désigner plusieurs fichiers en une seule commande.

  • * : Toute suite de caractères
  • ? : Un seul caractère quel qu'il soit

Pipes

Le caractère | entre deux commandes permet d'exécuter la première commande en envoyant son résultat d'exécution en tant que paramètres d'entrée de la seconde.

capture4.png (24532 octets)

ls | sort
Liste des fichiers du répertoire courant envoyée
à la commande sort pour tri par ordre alphabétique puis affichage

Redirection des sorties et des entrées

Renvoi des résultats en sortie vers un fichier avec écrasement de celui-ci au moyen du caractère > placé entre la commande et le nom de fichier.

Renvoi des résultats en sortie en ajout à la fin d'un fichier au moyen des caractères >> placés entre la commande et le nom de fichier.

Obtention des données demandées au clavier par la commande depuis le contenu d'un fichier au moyen du caractère < placé entre la commande et le nom de fichier.

capture5.png (11411 octets)

Sauvegarde des résultats de la commande date dans le fichier Sortie.txt
Ajout à la fin du fichier Sortie.txt des résultats de la commande who

capture6.png (16286 octets)

Visualisation du contenu du fichier Sortie.txt

Exécution des commandes en arrière plan

Exécution d'une application en arrière plan en ajoutant un & à la fin de la ligne de commande de lancement.

capture7.png (11657 octets)

Lancement en arrière plan de l'éditeur de textes "kwrite"
Ligne de commande encore utilisable

capture8.png (6393 octets)

kwrite

capture10.png (10077 octets)

Lancement classique
Ligne de commande bloquée sur l'application jusqu'à sa terminaison

  • nohup : Commande permettant de lancer une application en arrière plan de manière à la rendre insensible aux déconnexions de session.

Interruption d'un shell

exit : Interruption du shell en exécution.

Scripts shell

Script shell : Fichier de commandes en langage shell (fichier texte rendu exécutable par exécution de la command chmod +x script_shell).

Syntaxe

  • # pour placer une ligne en commentaire.
  • Affectation d'une variable : var=valeur ou var="valeur" si la valeur comporte des espaces.
  • read pour lire une variable au clavier.
  • echo pour afficher une variable.
  • Récupération des items de la ligne de commande via les codes $0, $1, $2, $3, ... dans l'ordre de frappe et incluant le nom du shell.
    Récupération de la liste complète des items avec $*.
    Récupération du nombre d'items avec $#.
    Récupération du PID du shell avec $$.

capture11.png (18396 octets)

Exemple de script de commande : ScriptParametres

capture12.png (14882 octets)

Résultat à l'exécution

  • Récupération du résultat d'exécution de la dernière commande via le code $?.
    0 indique "Pas d'erreur d'exécution, sortie normale".

capture14.png (14053 octets)

Pas d'erreur d'exécution

capture13.png (12906 octets)

Erreur d'exécution

  • Existence des classiques instructions de structuration if, case, for et while.
if commande
  then
  ...
  else
  ..
  fi

Exemple

case variable in
  v1|v2|...|vn)
    ...;;
  w1|w2|...|wn)
    ...;;
  esac

Exemple

for variable in liste
  do
  ...
  done

Exemple

while commande
  do
  ...
  done

Exemple

  • test : Evaluation d'une expression.
    • Opérateurs sur les fichiers :
      • -d E : E répertoire
      • -e E : E existe
      • -r E : E lisible
      • -s E : E de taille non nulle
      • -w E : E peut être écrit
      • -x E : E exécutable
      • ...
    • Opérateurs de comparaison entre deux expressions de type chaine de caractères :
      • E : E non chaine vide
      • E1 == E2 : E1 égal à E2
      • E1 != E2 : E1 différent de E2
    • Opérateurs de comparaison sur expressions numériques :
      • E1 -eq E2 : E1 égal à E2
      • E1 -ne E2 : E1 différent de E2
      • E1 -ge E2 : E1 plus grand ou égal à E2
      • E1 -gt E2 : E1 strictement plus grand que E2
      • E1 -le E2 : E1 plus petit ou égal à E2
      • E1 -lt E2 : E1 strictement plus petit que E2
    • Opérateurs booléens :
      • (E) : E est vrai
      • !E : E est faux
      • E1 -a E2 : E1 et E2
      • E1 -o E2 : E1 ou E2

capture16.png (15070 octets)

Test d'égalité et test de différence
entre variable et constante numérique

test02.png (17642 octets)

Tests d'existence de fichiers

test03.png (17736 octets)

Tests de lisibilité de fichiers

test04.png (17898 octets)

Tests d'accès en écriture de fichiers

RETOUR