Outils pour utilisateurs

Outils du site


issue178:c_c

Last issue, we looked at a simple script where we asked a question and manipulated the answer. The issue before that, we looked at variables, so how about we build on what we know so far and add another Lego-block? We will not make big jumps here as I don’t expect you to know anything about scripting, however, I do expect you to know simple things like operators, what type of bracket I am talking about, and how to look up a command in a man page (or bro pages, or yelp, or whatever). How about we go script-ception? Scripts within scripts, that make scripts. Now the recipe for making scripts is; you create the file, edit the script and change the mode before running it. (Simplified). The main reason I write scripts is usually to automate something tedious. Imagine having to create say 44 users on a new server for scanners in the organization. Instead of having to create scanner1, then scanner2, and so on, wouldn’t it be nice to do it all in one go? This is where you would use scripts in real life. Have you deployed a bunch of containers and need to do something across a bunch of them? Script. So, what I am sharing with you is not useless. However, many times, people will try to tell you the terminal is dead, it really isn’t.

Dans le dernier numéro, nous avons examiné un script simple où nous avons posé une question et manipulé la réponse. Dans l’avant-dernier numéro, nous avons regardé les variables. Alors, nous allons construire sur ce que nous savons jusqu’ici et y ajouter un autre bloc de Lego, si vous le voulez bien. Nous ne ferons pas de grands sauts pour ce faire, car je pense que vos connaissances du scriptage sont quasi nulles. Toutefois, je m’attends à ce que vous connaissiez des choses simples comme les opérateurs, de quel type de parenthèse je parle et comment chercher une commande dans les pages man (ou pages bro, ou yelp ou quoi que ce soit).

Et si nous faisions du script-ception ? Des scripts à l’intérieur de scripts, qui créent des scripts. Bon, la recette pour des scripts est : vous créez le fichier, éditez le script et changez le mode avant de l’exécuter. (Simplifié.) La raison principale pour laquelle j’écris des scripts est généralement pour automatiser quelque chose de fastidieux. Imaginez devoir créer disons 44 utilisateurs sur un nouveau serveur pour les scanners de l’organisation. Au lieu de devoir créer scanner1, puis scanner2, etc., ce serait mieux de le faire pour tout le monde en une seule fois, non ? C’est ici que vous utiliseriez des scripts dans le monde réel. Avez-vous déployé une foule de conteneurs et maintenant vous devez faire quelque chose à tout un groupe de ceux-ci ? Script. Voilà ! Ainsi, ce que je partage avec vous n’est pas inutile. Cependant, maintes fois, des gens essayeront de vous dire que le terminal est mort ; mais ce n'est pas vrai.

Join me by whipping out your favourite terminal emulator and do what I do. I am a firm believer that when you do something, you remember it better than just reading. I promise to keep these short, so you don’t get bored. Just one quick point before we have to come back, we looked at outputting text to the screen with echo, but we can also take input with “read”. Let me illustrate; nano exts.sh - to start a new file in the nano editor. #! /bin/bash touch new read -p “What extension would you like: “ ext mv new new.${ext} Now save that script and make it executable (you already know how to do this), then run your script. Please do not copy / paste as it will not work, type it in. Newer versions of nano support syntax highlighting, so make sure yours looks something like mine, or you will get errors. On a side note, you can use the -s option for things like passwords, where the user’s input will not be displayed, if you did not know about it.

Faites comme moi et sortez votre émulateur de terminal préféré, puis faites ce que je fais. Je crois fermement que, quand vous faites quelque chose, vous vous en souvenez mieux que si vous vous contentez de le lire. Je promets de les garder courts, pour que vous ne vous ennuyiez pas. Juste un truc rapide avant de commencer : nous avons regardé comment sortir du texte à l’écran avec echo, mais nous pouvons aussi créer une entrée avec « read ». Permettez-moi d’illustrer cela :

nano exts.sh – pour démarrer un nouveau fichier dans l’éditeur nano.

#! /bin/bash

touch new

read -p “What extension would you like: “ ext

mv new new.${ext}

Maintenant, enregistrez ce script et rendez-le exécutable (vous savez déjà comment le faire), puis lancez votre script. Veuillez ne pas faire un copier/coller, car cela ne fonctionnera pas ; il faut le taper. Puisque les récentes versions de nano supportent le surlignement de la syntaxe, assurez-vous que le vôtre ressemble plus ou moins au mien, ou vous aurez des erreurs.

Notons par ailleurs que vous pouvez utiliser l’option -s pour des choses comme des mots de passe, où la saisie de l’utilisateur ne s’affichera pas, si vous en étiez ignorant.

When you run your script, it should exit cleanly and nothing will have changed in your terminal, but if you ‘ls’ or open your file browser, you should see a new file with the extension you typed in. In my case I made it ‘.txt’, yes very original. You may have noticed the colon and space before the closing inverted commas, that is because the read command does not care and takes your input from where you type it, but we work with humans and it needs to be legible. (In other words, window dressing.) You also should not put a question mark there either as this will be treated as an operator. Please do try this and see the outcome, so you know the error when you see it. The ‘mv’ is simply the move command we are using to rename the file. The syntax is, mv <old filename> <new filename> - nothing difficult or funny. So now we can get to the lazy part…erm inception-style script creation. *cough So fire up a terminal emulator, and nano like before, and let’s get cracking!

Quand vous exécutez votre script, il devrait se terminer proprement et rien n’aura changé dans le terminal, mais si vous faites un « ls » ou ouvrez votre navigateur de fichiers, vous devriez voir un nouveau fichier avec l’extension que vous avez tapée. Dans mon cas, j’ai choisi « .txt » ; oui, c’est très original.

Vous pourriez avoir remarqué le deux-points et l’espace avant les guillemets fermants ; c’est parce que la commande read s’en fiche et prend votre saisie de là où vous l’avez tapée, mais nous travaillons avec des êtres humains et il faut que ce soit lisible. (Autrement dit, de la poudre aux yeux.) S’il vous plaît, essayez et regardez le résultat pour que vous reconnaissiez l’erreur quand vous la verrez.

Le « mv » est tout simplement la commande move que nous utilisons pour renommer le fichier. La syntaxe est, mv <vieux nom de fichier> <nouveau nom de fichier> - rien de difficile ou bizarre.

Maintenant nous arrivons à la partie paresseuse… erm, la création d’un script dans le style d’inception. *toussotement.

Bon, ouvrez un émulateur de terminal et nano comme auparavant et commençons !

Get the code below saved, set your script to executable, and run it. Here (bottom right) is a quick view from my PC so you can see the ‘before’ and ‘after’ for running the script. (I named the file tt.sh). Now run your file as it is already executable. What happened? Well, go ahead and try, I am not saying. You can do this over and over and every time you will have an executable script ready to go. You can embed almost any command / commands in a script, or have the script create more than one script. Can you see where this is heading? I am sure someone out there has created a script to create more scripts to fill a drive as a prank.

Enregistrez le code ci-dessous, rendez votre script exécutable et lancez-le.

Voici (en bas à droite) un aperçu rapide de l’écran de mon PC, pour que vous puissiez voir l’« avant » et l’« après » du lancement du script. (J’ai nommé le fichier tt.sh.)

Maintenant, lancez votre fichier, car il est déjà exécutable. Que s’est-il passé ? Allez-y et essayez, je ne vous le dirai pas.

Vous pouvez répéter cela de très nombreuses fois et chaque fois, vous aurez un script exécutable prêt à être lancé. Vous pouvez incorporer presque toute(s) commande/commandes dans un script ou dire au script de créer plus d’un script. Voyez-vous où cela nous amène ? Je suis certain que quelqu’un a créé un script qui créera d’autres scripts jusqu’à ce que le disque soit plein pour plaisanter.

#! /bin/bash read -p “what should the name of our script be: ” fname touch ${fname} echo “ #! /bin/bash ” » ${fname} echo “ w ” » ${fname} chmod +x ${fname} echo “File created” Now the first part we have discussed; touch simply creates an empty file with the name you gave it. When we use echo with the double greater-than sign or chevron, it will append whatever is in brackets to the end of the file we create. Make sure it is not a single greater-than sign as that will overwrite your file contents. The chmod you know by now, and the last line was just added so you get some feedback when the process completes. As you can see, nothing funny bash-wise, but it opens up a whole can of worms for those who want to try. As always, if you have questions, email misc@fullcirclemagazine.org

#! /bin/bash

read -p “what should the name of our script be: ” fname

touch ${fname}

echo “ #! /bin/bash ” » ${fname}

echo “ w ” » ${fname}

chmod +x ${fname}

echo “File created”

Nous en avons déjà discuté dans la première partie ; « touch » crée tout simplement un fichier vide avec le nom que vous lui avez donné. Quand nous utilisons echo avec le caractère plus-grand-que double, ou chevron, il ajoutera tout ce qui se trouve entre les crochets à la fin du fichier que nous créons. Il faut vous assurer qu’il ne s’agit pas d’un seul caractère plus-grand-que, car cela écrasera le contenu de votre fichier.

À ce stade, vous connaissez chmod et la dernière ligne a été ajoutée tout simplement pour que vous ayez un retour quand le processus est terminé.

Comme vous pouvez le voir, rien d’étrange concernant bash, mais cela ouvre une boîte de Pandore pour ceux qui veulent essayer.

Comme toujours, si vous avez des questions, envoyez un mail à misc@fullcirclemagazine.org

issue178/c_c.txt · Dernière modification : 2022/03/03 15:04 de andre_domenech