Batch & Bash

Passons a CLI

CLI Tips

Detecter internet et jouer une wav / un mp3 cinq fois quand le pong revient.

Remplacez `/chemin/DAcces/AuFichier.wav` par un chemin d'acces vers un fichier valide.

beepwhenup () { echo 'Enter host you want to ping:'; read PHOST; if [[ "$PHOST" == "" ]]; then exit; fi; 
while true; do ping -c1 -W2 $PHOST 2>&1 >/dev/null; if [[ "$?" == "0" ]]; then for j in $(seq 1 5);
do aplay -f cd /chemin/DAcces/AuFichier.wav ; done; ping -c1 $PHOST; break; fi; done; }

Initiation a batch (Windows)

Ce tutoriel à été originalement été rédigé sur notre ancien wiki par Marc Vanlindt

Tous les systèmes d'exploitation permettent une utilisation en ligne de commande, que cela soit Windows, MacOS ou Linux.

Quasi inutilisée par la majorité des utilisateurs Windows depuis l'avènement de l'informatique "grand public" et l'arrivée de Windows 95, elle est toujours présente et continue d'évoluer.

Cela peut être utile, par exemple, si le système est planté ou que la carte graphique est défectueuse pour permettre de faire un diagnostique, réparer le problème, accéder aux fichiers, … sans qu'il ne soit besoin de faire appel à l'interface graphique.

Il existe ainsi, au sein de chacun de ces systèmes d'exploitations, des centaines de commandes accessibles uniquement en ligne de commande.

Nous ne verrons ici que le batch-script ou le langage permettant de scripter des événements en ligne de commande Windows.
Nous ne verrons pas Linux car les personnes sous Linux sont en général bien obligées à un moment ou l'autre d'aller y faire un tour et doivent donc déjà savoir tout ça et nous ne verrons pas MacOS car je n'aime pas MacOS.

Par exemple, la commande DIR permet dans la ligne de commande de Windows, de lister les fichiers d'un dossier :

image-1592320747719.png

Ces commandes acceptent des paramètres, permettant alors d'obtenir un autre résultat, par exemple DIR /S afficher le contenu des dossiers et sous-dossiers également :

image-1592320822822.png

Et il est, bien entendu, possible de faire appel à plusieurs paramètres pour affiner ou obtenir un résultat plus conforme à nos attentes, le paramètre /B dans DIR /S /B nous offrant une vue plus visible :

image-1592321155249.png

Il existe donc, pour cette commande, de très nombreux paramètres permettant aussi bien d'afficher ou non les attributs d'un fichier, les fichiers cachés, le nom court ou long, etc…

Néanmoins, si c'est "juste" pour lister les fichiers, cela peut être fait également via la commande TREE /F donnant alors le "même" résultat sous une autre forme :

image-1592321360561.png

Les commandes vues plus haut et incluses au système sont appelées, assez logiquement, commandes systèmes.

Nous n'allons pas rentrer dans le détail, mais il en existe en réalité de deux sortes :

  • Celles incluses directement au système : Par exemple DIR
  • Celles rajoutées nativement au système : Par exemple TREE

Ce que cela signifie est qu'il n'existe pas de "logiciel" DIR. Cette commande et toutes celles incluses au système sont chargées en mémoire lorsque l'on allume l'ordinateur. Cela permet ainsi d'avoir un "service minimum" de quelques commandes permettant la majorité des opérations.

A cela se rajoutent les autres commandes systèmes, présentes dans le dossier Windows comme des logiciels à part entière.
Toutes celles-ci sont "historiques" et étaient déjà présentes sous MS-DOS.

Au travers de ce tuto nous ferons appel à plusieurs d'entre elles pour lesquelles voici une courte explication :

CD Permet de rentrer ou sortir d'un dossier
CLS Efface l'écran
COPY Permet de copier un ou plusieurs fichiers
DEL Permet d'effacer un ou plusieurs fichiers
DIR Permet d'obtenir la liste des fichiers dans un dossier ainsi que dans toute son arborescence
MD Permet de créer un dossier
MOVE Permet de déplacer un fichier ou un dossier
PAUSE Affiche le message Appuyez sur une touche pour continuer… et attend que l'on le fasse
RD Permet de supprimer un dossier à la condition qu'il soit totalement vide
REN Permet de renommer un fichier ou un dossier

Exemple d'utilisation "pratique" :
Imaginons que Notepad, pour une raison inconnue, vous en veuille et décide de ne plus fonctionner, ralentissant le système, refusant de se fermer… (En général c'est plutôt Google Chrome à qui on pourrait reprocher ça, mais je me vois tuer le processus que j'utilise présentement pour écrire ce tuto…)
Windows est lent, il ne veut pas accéder au gestionnaire de tâches, mais néanmoins vous arrivez à lancer la console.

Il est alors possible via la commande TASKLIST d'obtenir la liste des tâches en cours :

image-1592321452121.png

Et il vous alors possible de "tuer" votre tâche en cours via la commande TASKKILL /IM NOTEPAD.EXE :

image-1592321490774.png

Nous voyons ici que nous avons réalisé "à la main" tout ce que nous aurions fait en lançant le gestionnaire de tâches et en mettant fin au processus via des click de souris.
Le gestionnaire de tâches de Windows est donc une interface graphique pour les deux logiciels en ligne de commande TASKLIST et TASKKILL.

Nous pouvons voir également que l'utilisation en ligne de commande permet plus de possibilités puisqu'il sera aussi bien possible de tuer un processus unique via son numéro d'identification (comme le permet le gestionnaire de tâches) que l'ensemble des processus ayant un même nom, un TASKKILL /IM CHROME.EXE fermant l'ensemble des navigateurs ouverts sans avoir besoin de les éliminer un à un en espérant tuer celui dont dépend les autres. (chose que le gestionnaire de tâches ne permet pas.)

Il faut donc se rendre compte que la "base" de tous les systèmes d'exploitation est une base en ligne de commande, sur laquelle à été ajoutée une interface graphique, parfois appelée interface de bureau lorsque cela s'applique directement à un système d'exploitation, afin de rendre tout cela plus facilement utilisable.

Contrairement à l'exemple du gestionnaire de tâches, l'interface graphique peut également permettre de faire plus de choses qu'un appel direct aux commandes utilisées au sein de cette GUI.

Ainsi, Explorer, qui est le navigateur de fichiers de Windows, permet, de par son interface graphique, d'automatiser très rapidement l'appel à un très grand nombre de requêtes aux commandes COPY, DEL, MOVE, etc.

  • GUI : Graphical User Interface - C'est à dire l'interface graphique d'un logiciel.
  • CLI : Command Line Interface - C'est à dire l'interface en mode ligne de commande d'un logiciel.

Nous avons donc vu plus haut qu'un système d'exploitation était fait d'un ensemble de logiciels et commandes en mode CLI et qu'au travers de Windows, des GUI, ou interfaces graphiques permettaient d'y faire appel.

En plus des commandes et logiciels systèmes, il existe d'autres logiciels ayant une base CLI pour laquelle parfois plusieurs GUI se sont créées, par exemple GNUChess, excellent jeu d'échecs en mode texte : 

image-1592321597807.png


pour lequel il existe des très nombreuses GUI :

    image-1592321683399.png

image-1592321781484.pngimage-1592321954153.jpg

 

 

 

image-1592322085533.gifimage-1592322031188.jpg

       

 

La raison pour laquelle cela est fait est simple : le but de GnuChess n'est pas de fournir un "beau" jeu d'échecs mais un jeu d'échecs performant. Le créateur sait également que chaque joueur a ses préférences et qu'un simple mauvais choix au niveau de l'interface graphique rebutera le joueur même s'il a devant lui le meilleur jeu d'échecs qui soit.

GnuChess n'évoluera donc jamais graphiquement, cela étant laissé aux créateurs de GUI. En dehors de quelques geeks jouant sur l'interface CLI, il n'est pas "prévu" que cela soit le cas, bien que cela soit possible, car, de base, cette interface n'est pas prévue pour être la plus agréable ou intuitive qui soit.

Pour ceux ayant suivi le tutoriel Photogrammétrie, ils pourront se rendre compte que VisualSFM est donc une GUI affichant le résultat obtenu par différents autres logiciels en mode CLI qu'il est parfaitement possible d'utiliser "à la main".

Enfin, il existe de nombreux logiciels proposant les deux : un mode CLI et une GUI.
Il existe néanmoins ici deux sortes différentes :

  • Le logiciel d'origine est pensé comme une GUI et un mode CLI minimaliste permet de faire appel à certaines options du logiciel, c'est par exemple le cas de MeshLab, InkScape, Gimp ou OpenSCAD.
  • Le logiciel d'origine est pensé en mode CLI et une GUI est proposée pour faciliter l'utilisation, c'est par exemple le cas de ImageMagick.

C'est exactement la même chose que nous retrouvons avec Linux, qui est en réalité la base en ligne de commande à laquelle se rajoute une interface graphique et tout un tas de logiciels pour former une "distribution", cela permet ainsi de, contrairement à Windows, avoir une base la même pour des dizaines de distributions toutes différentes les unes des autres.

Voici une liste de différents logiciels pour lesquels nous verrons des exemples d'utilisation au travers de ce tutorial :

Logiciel Interface
d'origine
Difficulté CLI Explications Lien
7zip CLI+GUI ●●● Logiciel de (dé)compression multiplate-formes. Site
FFmpeg CLI ●●● Logiciel de traitement et conversion vidéo Site
Gimp GUI+CLI ●● Logiciel de traitement photo dont la CLI permet l'application de filtres et le traitement sur les fichiers. Il permet également de faire appels à certains filtre non-présents dans ImageMagick Site
ImageMagick CLI+GUI Logiciel de traitement d'image extrêmement puissant et complet. Site
Inkscape GUI+CLI Logiciel de création vectorielle dont la CLI ne sert qu'à la conversion de fichiers Site
MeshLab GUI+CLI ●●●●● Logiciel de traitement 3D. L'interface en ligne de commande est extrêmement mal pensée et passe par de très nombreuses frustrations avant d'arriver au résultat voulu… Site
Openscad GUI+CLI Logiciel de modélisation paramétrique 2D et 3D.
Le mode CLI permet de faire appel à un fichier .SCAD en indiquant des paramètres définis
Site
Potrace CLI Logiciel de vectorisation d'image.
Très simple et puissant, il ne permet néanmoins que l'exploitation de certains formats rendant utile l'utilisation conjointe de ImageMagick au sein d'un script.
Site
pstoedit CLI ●● Logiciel de traitement de fichiers vectoriels supportant un très grand nombre de formats ainsi que de nombreuses opérations au sein des fichiers. Site
SoX CLI Logiciel de traitement audio. Site
VLC CLI+GUI ●●●● Lecteur, convertisseur, steamer, … audio et vidéo Site

Bash

Commandes usuelles

Ressources utiles

Bash Wizardy

Detecteur d'internet (if pong then play)

Detecter internet et jouer une wav / un mp3 cinq fois quand le pong revient.

Remplacez `/chemin/DAcces/AuFichier.wav` par un chemin d'acces vers un fichier valide.

beepwhenup () { echo 'Enter host you want to ping:'; read PHOST; if [[ "$PHOST" == "" ]]; then exit; fi; while true; do ping -c1 -W2 $PHOST 2>&1 >/dev/null; if [[ "$?" == "0" ]]; then for j in $(seq 1 5); do aplay -f cd /chemin/DAcces/AuFichier.wav ; done; ping -c1 $PHOST; break; fi; done; }