Scripting
TBD getopts.
Le scripting c'est l'exécution de fichiers textes pour résoudre un problème spécifique.
TBD si fichier exécutable et pas shebang alors on l'exécute avec
/bin/sh(faire un exemple)
Un langage de script est un langage interprété. Cela peut-être :
- du shell
- mais aussi python
- ou d'autres langage de script comme awk, perl, ruby, …
Shebang
Le fonctionnement est divinement simple. Lors de 'exécution du fichier, le noyau vérifie s'il commence par #!, appelé shebang ("hash-bang" raccourci).
Si oui la fin de la ligne correspond au chemin absolu d'un programme auquel on passe en 1er paramètre le fichier à exécuter.
Par exemple si on a le fichier exécutable suivant, nommé bonjour :
#! /usr/bin/python
print("Coucou monde !")
Les deux commandes suivantes sont équivalente (si on est dans le dossier contenant le fichier) :
bonjour/usr/bin/python bonjour
C'est la raison fondamentale pour laquelle les commentaires dans un langage de script est toujours le #, la première ligne contenant le shebang n'est pas interprétée lors de l'exécution du script.
Il y a deux moyens classique d'utiliser le shebang :
- appeler directement le programme :
/usr/bin/python - passer via env :
/usr/bin/env python
La différence est que pour le deuxième appel, c'est le bash du PATH qui est pris et pas celui dans /bin. Ces deux programmes pouvant être différent. bash peut être dans /bin, dans /usr/bin, dans /usr/local/bin ou encore ailleurs selon le système et la méthode d'installation, pour python il est courant d'avoir plusieurs versions d'installées. En revanche, tous les systèmes ont /usr/bin/env.
Shell scripting
Un script shell n'est pas un programme compliqué, c'est fait pour automatiser des choses simples executer des commandes qui elles font le travail. Enfin, un script shell doit pouvoir être utilisé sur toute machine unix.
Si vous devez faire des choses plus compliquée, préférer utiliser un langage de programmation comme python
Plusieurs sortes de shell (sh : shell historique, bash : shell par défaut dans Linux, zsh : shell par défaut macos, ...)
perso : mon shell c'est zsh mais les script je les écris en (ba)sh. Si vous êtes administrateur système et que vous voulez que vos scripts fonctionnent partout, il existe des machines sans bash, utilisez juste sh.
- sh ou bash pour nos scripts ?
- le script se fait avec le shell présent sur tous les systèmes : sh (si vous n'arrivez pas à faire votre script en sh parce que trop compliqué, c'est peut-être parce que vous devriez utiliser un langage de programmation (comme python) pour le faire)
- histoire du design sh
Interpréteurs de script
Tout programme qui peut exécuter un fichier texte passé en paramètre fonctionne. Le plus classique étant bien sur le shell mais, comme on vient de le voir on peut le faire en python.
python
- https://dev.to/husseinalamutu/bash-vs-python-scripting-a-simple-practical-guide-16in : manipulation fichier, bash plus utile que python.
sed/awk
Une autre alternative courante est d'utiliser des commandes permettant de traiter des données comme sed ou encore awk :
Bibliographie
Créez un fichier nommé bonjour contenant :
#! /usr/bin/env python
print("bonjour !")
Placez le dans votre dossier $HOME/.local/bin et faites en sorte de pouvoir l'exécuter de partout en modifiant le path.
solution
solution
- créer le fichier au bon endroit
- modifier les droits pour le rendre exécutable
- dans le fichier
.profile, modifier le$PATHpour qu'il accepte le cheminexport PATH=${PATH}:${HOME}/.local/bin