1.3. Commandes internes et externes

Le shell distingue deux sortes de commandes :

1.3.1. Commandes internes

Une commande interne est une commande dont le code est implanté au sein de l’interpréteur de commande. Cela signifie que, lorsqu’on change de shell courant ou de connexion, par exemple en passant de bash au C-shell, on ne dispose plus des mêmes commandes internes.

Exemples de commandes internes : cd , echo , for , pwd

Sauf dans quelques cas particuliers, l’interpréteur ne crée pas de processus pour exécuter une commande interne.

Les commandes internes de bash peuvent se décomposer en deux groupes :

  • les commandes simples (ex : cd, echo)

  • les commandes composées (ex : for, ((, {).

  1. Commandes simples

    Parmi l’ensemble des commandes internes, echo est l’une des plus utilisée :

    echo :

    Cette commande interne affiche ses arguments sur la sortie standard en les séparant par un espace et va à la ligne.

    $ echo bonjour     tout  le                         monde
    bonjour tout le monde
    $

    Dans cet exemple, echo est invoquée avec quatre arguments : bonjour, tout, le et monde.

    On remarquera que les espacements entre les arguments ne sont pas conservés lors de l’affichage : un seul caractère espace sépare les mots affichés. En effet, le shell prétraite la commande, éliminant les blancs superflus.

    Pour conserver les espacements, il suffit d’entourer la chaîne de caractères par une paire de guillemets :

    $ echo “bonjour    tout le            monde”
    bonjour    tout le            monde
    $

    On dit que les blancs ont été protégés de l'interprétation du shell.

    Pour afficher les arguments sans retour à la ligne, on utilise l’option -n de echo.

    $ echo -n bonjour
    bonjour$

    La chaîne d’appel $ est écrite sur la même ligne que l’argument bonjour.

  2. Commandes composées

    Les commandes composées de bash sont :

    • case ... esac
    • if ... fi
    • for ... done
    • select ... done
    • until ... done
    • while ... done
    • [[ ... ]]
    • ( ... )
    • { ... }
    • (( ... ))

    Seuls le premier et le dernier mot de la commande composée sont indiqués. Les commandes composées sont principalement des structures de contrôle.

1.3.2. Commandes externes

Une commande externe est une commande dont le code se trouve dans un fichier ordinaire. Le shell crée un processus pour exécuter une commande externe. Parmi l’ensemble des commandes externes que l’on peut trouver dans un système, nous utiliserons principalement les commandes unix (ex : ls, mkdir, cat, sleep) et les fichiers shell.

La localisation du code d'une commande externe doit être connue du shell pour qu'il puisse exécuter cette commande. A cette fin, bash utilise la valeur de sa variable prédéfinie PATH. Celle-ci contient une liste de chemins séparés par le caractère : (ex : /bin:/usr/bin). Par exemple, lorsque l’utilisateur lance la commande unix ps, le shell est en mesure de l’exécuter et d’afficher les processus attachés à la fenêtre courante de l'utilisateur car le code de ps est situé dans le répertoire /usr/bin présent dans PATH.

$ ps
   PID TTY          TIME CMD    
  4160 pts/2    00:00:00 bash  
  4207 pts/2    00:00:00 ps 
$

Remarque : pour connaître le statut d’une commande, on utilise la commande interne type.

$ type –t sleep
file			=> sleep est une commande externe
$ type –t echo
builtin 		=> echo est une commande interne du shell
$