Programme
Ensemble d’instructions destinées à être exécutées par un ordinateur, 2 programmes?
Programmes binaires
Programmes scripts
Programmes binaires
Programmes scripts
Programmes binaires
* Programme en langage machine
* Spécifique à une architecture (famille de processeurs)
* Nécessite souvent un environnement d’exécution spécifique
(bibliothèques, système d’exploitation)
Programmes scripts
* Programme en langage de script
* Sous forme textuelle
* Exécutés par un interpréteur (un autre programme)
Script shell → Programme destiné à être interprété par le shell
Langages de script
Spectre large
Spectre large
* Spécifique à un domaine (DSL)
* Généraliste
* Langage glue / langage d’extension
Rapide à apprendre et à utiliser
* Concis (moins de verbosité)
* Typage dynamique (moins de structures et de contraintes)
Environnement inclus
* Interprétés plutôt que compilés
* L’efficacité n’est pas un objectif
Programmes sous Unix
Un programme = un fichier exécutable
$ file /bin/bash /usr/bin/vimtutor
/bin/bash: ELF 64-bit LSB pie executable
/usr/bin/vimtutor: POSIX shell script
Droits nécessaires
* x pour les programmes binaires
* x et r pour les programmes scripts
Fichiers accessoires
La plupart des programmes ont besoin de fichiers supplémentaires
Un programme échouera si ces fichiers manquent
Les gestionnaires de paquets assurent la disponibilité et la cohérence
ce ces fichiers
Exécuter un programme ⋆
Chemin absolu ou relatif
Avec au moins un slash « / »
* /opt/INF1070/hello
* script/hello
* ./hello → exécute un programme du répertoire courant
Nom simple
Le nom d’un fichier d’un des répertoires d’exécutables
Habituellement au moins /bin, /usr/bin et /usr/local/bin
Script ou binaire ?
* /usr/bin/ts (timestamp) horodate l’entrée standard (extra)
* /usr/bin/chromium navigateur web de Google (extra)
* /usr/bin/ldd lister les bibliothèques partagées nécessaires (extra)
Tester avec file ou ouvrir avec vim
Shebang
Tout fichier texte lisible et exécutable (r-x) peut être exécuté
$ cat hello
#!/bin/sh
echo Heeeeeellllloooooo!!!!!!
$ ./hello
Heeeeeellllloooooo!!!!!!
Autres exécution de scripts
Script en ligne
Option sh -c exécute les instructions passées en argument
$ dash -c “echo hello | rev”
Utile pour profiter des fonctionnalités du shell quand une simple
commande est attendue
Sourçage
La commande interne « . » (point) exécute un script dans le
processus courant
$ . ./niceprompt
Utile pour importer des bibliothèques et fichiers de configuration
Pourquoi programmer en shell ?
Mais
* Ça requiert une connaissance spécialisée
* C’est risqué: le naïf fait facilement des bogues (voir INF600C)
* C’est bizarrement portable (POSIX vs. bash vs. utilitaires)
* Les structures de données et de contrôle sont très pauvres
* C’est lent
Commandements
Exécution de scripts
* Un script shell s’exécute ligne par ligne
Attention à l’échec
Quand une commande échoue le script continue (par défaut)
Séquences de commandes
Le point virgule « ; » enchaîne les commandes
Groupes de commandes
Les accolades « {} » et parenthèses « () » groupent des commandes
Cela permet de combiner les redirections et les conduites
Redirections de base (rappel)
* « > fichier » redirige la sortie standard en tronquant
* «»_space; fichier » redirige la sortie standard en ajoutant
* « < fichier » utilise fichier comme entrée standard
* « 2> fichier » redirige la sortie d’erreur
Le shell s’occupe
* D’ouvrir les fichiers
* De rapporter les problèmes d’ouverture
* En cas de problème, la commande n’est pas exécutée
Redirections de base (rappel)
La position des redirections n’est pas importante
Habituellement, on les met à la fin
« [n]opérateur mot » est la forme générale des redirections où
Les descripteurs 0, 1 et 2 ont une signification spéciale