This shows you the differences between two versions of the page.
sde2:laboratoare:01 [2021/03/08 19:15] ioana_maria.culic [7. Shell scripting] |
sde2:laboratoare:01 [2021/03/10 16:29] (current) ioana_maria.culic [4. Créer des fichiers avec des noms compliqués] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== TP 1 - Linux ====== | + | ====== TP 02 - Linux ====== |
===== Objectifs ===== | ===== Objectifs ===== | ||
Line 19: | Line 19: | ||
==== Installer Ubuntu ==== | ==== Installer Ubuntu ==== | ||
- | Link catre prima parte din tema | + | [[https://ocw.cs.pub.ro/courses/sde2/teme/tema_fr_1?&#tache_01_0p| Tâche 1]] |
===== Manuel ===== | ===== Manuel ===== | ||
Line 41: | Line 41: | ||
| ** ''u ''** | (up) faire défiler la moitié de l'écran | | | ** ''u ''** | (up) faire défiler la moitié de l'écran | | ||
- | ===== Git ===== | ||
- | À travers les laboratoires, nous utiliserons Git pour télécharger les fichiers nécessaires au laboratoire. | ||
- | Git est un système de gestion de contrôle de source utilisé pour coder le code dans les projets logiciels volumineux. | ||
- | |||
- | Pour ceux qui souhaitent approfondir les concepts de la commande 'git' et des utilisations avancées, nous recommandons le cours en ligne sur [[http://gitimmersion.com/|gitimmersion]] ou [[https://www.youtube.com/watch?v=HVsySz-h9r4 | Tutoriel Git pour les débutants: notions de base de la ligne de commande]]. | ||
===== Liste de commandes ===== | ===== Liste de commandes ===== | ||
Line 65: | Line 60: | ||
==== 1. Navigation dans le système de fichiers ==== | ==== 1. Navigation dans le système de fichiers ==== | ||
- | Ouvrez un terminal. Clonez le contenu du [[https://github.com/upb-fils/sde|dépôt SdE officiel]] à l'aide de la commande ci-dessous: <code bash> | + | Ouvrez un terminal. Clonez le contenu du [[https://github.com/UPB-FILS-SdE2/sde.git|dépôt SdE officiel]] à l'aide de la commande ci-dessous: <code bash> |
- | student@sde: ~ $ clone git https://github.com/upb-fils/sde | + | student@sde: ~ $ git clone https://github.com/UPB-FILS-SdE2/sde.git |
</code> | </code> | ||
Line 479: | Line 474: | ||
</code> | </code> | ||
- | Maintenant que vous savez que vous vous trouvez dans le répertoire de base de votre utilisateur, clonez le contenu [[https://github.com/upb-fils/sde.org| official SdE]] | + | Maintenant que vous savez que vous vous trouvez dans le répertoire de base de votre utilisateur, clonez le contenu [[https://github.com/UPB-FILS-SdE2/sde.git| official SdE]] |
<note important> | <note important> | ||
Line 527: | Line 522: | ||
</code> | </code> | ||
</note> | </note> | ||
- | |||
- | |||
Line 535: | Line 528: | ||
** Vous êtes dans le répertoire ''/home/student/sde-repository ''.** | ** Vous êtes dans le répertoire ''/home/student/sde-repository ''.** | ||
- | Supprimez le fichier ''simple_hello.py ''du répertoire 'tp01/simple_python/'. | + | Supprimez le fichier ''simple_hello.py ''du répertoire 'tp01/simple-python/'. |
Notez que j'ai utilisé un chemin relatif vers le répertoire ''/home/student'' . Nous aurions pu l'utiliser | Notez que j'ai utilisé un chemin relatif vers le répertoire ''/home/student'' . Nous aurions pu l'utiliser | ||
Line 552: | Line 545: | ||
==== 4. Créer des fichiers avec des noms compliqués ==== | ==== 4. Créer des fichiers avec des noms compliqués ==== | ||
- | ** Entrez le répertoire sde-repository/tp01/filesys ** | + | ** Entrez le répertoire sde-repository/tp01/ ** |
Utilisez la commande suivante: | Utilisez la commande suivante: | ||
Line 558: | Line 551: | ||
mkdir Program Files and Accessories | mkdir Program Files and Accessories | ||
</code> | </code> | ||
- | Répertorie le contenu du répertoire 'filesys'. Combien de répertoires qu'il contient. Pourquoi Était-ce l'effet désiré? Afin de créer un répertoire avec des espaces dans son nom, nous avons deux alternatives: | + | Répertorie le contenu du répertoire 'tp01'. Combien de répertoires qu'il contient. Pourquoi Était-ce l'effet désiré? Afin de créer un répertoire avec des espaces dans son nom, nous avons deux alternatives: |
<code bash> | <code bash> | ||
Line 572: | Line 565: | ||
Sans entrer dans le répertoire créé, ''%%"Program Files and Accessories"%%'', créez 3 fichiers portant le nom ''%%"Open Office"%%'', ''%%"Mozilla Firefox"%%'' și ''%%"Incredible long file name that contains a lot of spaces"%%'' et deux repertoires ''%%"App Data"%%'' și ''%%"Local Settings"%%'' în ''%%"Program Files and Accessories"%%''. Essayez également d'utiliser le bouton ''TAB ''autant que possible. | Sans entrer dans le répertoire créé, ''%%"Program Files and Accessories"%%'', créez 3 fichiers portant le nom ''%%"Open Office"%%'', ''%%"Mozilla Firefox"%%'' și ''%%"Incredible long file name that contains a lot of spaces"%%'' et deux repertoires ''%%"App Data"%%'' și ''%%"Local Settings"%%'' în ''%%"Program Files and Accessories"%%''. Essayez également d'utiliser le bouton ''TAB ''autant que possible. | ||
- | Copiez les deux premiers fichiers créés précédemment dans le répertoire ''simple_python/ ''. | + | Copiez les deux premiers fichiers créés précédemment dans le répertoire ''simple-python/ ''. |
Ecrivez un texte aléatoire dans %% "Nom de fichier long et incroyable contenant de nombreux espaces" %% à l'aide de la commande "echo" ou "vim". | Ecrivez un texte aléatoire dans %% "Nom de fichier long et incroyable contenant de nombreux espaces" %% à l'aide de la commande "echo" ou "vim". | ||
Line 584: | Line 577: | ||
<note> Une solution rapide peut être la suivante. "Alt +." Est un moyen d'itérer avec les derniers paramètres des commandes plus tôt). Nous tapons ensuite 'Alt + b' pour revenir en arrière puis, en utilisant Alt + Backspace, nous supprimons les 3 mots dont nous n’avons plus besoin. Enfin, le texte %% "moins \" %% est uniquement ajouté. | <note> Une solution rapide peut être la suivante. "Alt +." Est un moyen d'itérer avec les derniers paramètres des commandes plus tôt). Nous tapons ensuite 'Alt + b' pour revenir en arrière puis, en utilisant Alt + Backspace, nous supprimons les 3 mots dont nous n’avons plus besoin. Enfin, le texte %% "moins \" %% est uniquement ajouté. | ||
</note> | </note> | ||
- | |||
- | Copiez l'intégralité du répertoire 'filesys' dans ''/home/student ''. Pourquoi la commande ci-dessous ne fonctionne-t-elle pas? | ||
- | |||
- | <code bash> | ||
- | student@sde:$ pwd | ||
- | /home/student/sde-repository/tp01/filesys | ||
- | student@uso:$ cp . /home/student | ||
- | </code> | ||
- | |||
- | Nous avons besoin de ''récursif ''(comme ''rm ''). Regardez dans la page de manuel de ''cp ''('man cp' ') après' récursif '. | ||
- | |||
- | Entrez le dossier parent de ''filesys ''. Déplacez ''to_move ''vers ''/tmp ''. Notez que pour ''mv '', nous n'avons pas besoin du paramètre ''-r ''(pour la récursivité). | ||
- | |||
- | Vérifiez que votre commande est exécutée avec succès à l’aide d’une commande ''ls ''. | ||
- | ===== 5. Prelucrarea informației dintr-un fișier ===== | + | ===== 5. Traitement des informations d'un fichier ===== |
- | Pentru a afișa pe ecran conținutul unui fișier folosim utlitarul ''%%cat%%''. Rulăm comanda de mai jos, pentru a exemplifica: | + | Pour afficher le contenu d'un fichier à l'écran, nous utilisons l'utilitaire ''%%cat%%''. Nous exécutons la commande ci-dessous pour illustrer: |
<code bash> | <code bash> | ||
Line 611: | Line 590: | ||
</code> | </code> | ||
- | Folosim comanda ''%%cat%%'' în combinație cu alte comenzi pentru a extrage sau filtra conținutul anumitor fișiere. Comanda ''%%cat%%'' primește ca argumente calea către unul sau mai multe fișiere și afișează pe ecran conținutul concatenat al acestora. | + | Nous utilisons ''%%cat%%'' en combinaison avec d'autres commandes pour extraire ou filtrer le contenu de certains fichiers. La commande ''%%cat%%'' reçoit comme argument le path vers un ou plusieurs fichiers comme arguments et affiche leur contenu concaténé à l'écran. |
- | Un exemplu uzual este faptul că vrem să extragem informațiile despre starea memoriei sistemului din fișierul ''%%/proc/meminfo%%''. Pentru aceasta rulăm comanda de mai jos: | + | Un exemple courant est que nous voulons extraire les informations sur l'état de la mémoire système du fichier ''%%/proc/meminfo%%''. Pour cela, on va exécute la commande ci-dessous: |
<code bash> | <code bash> | ||
Line 621: | Line 600: | ||
MemAvailable: 874420 kB | MemAvailable: 874420 kB | ||
</code> | </code> | ||
- | În exemplul de mai sus folosim ''%%cat%%'' pentru a oferi ca intrare conținutul fișierului ''%%/proc/meminfo%%'' utilitarului ''%%grep%%''; cu utilitarul ''%%grep%%'' filtrăm conținutul după textul ''%%"Mem"%%''. Cu alte cuvinte, outputul comenzii ''%%cat /proc/meminfo%%'', adică conținutul fișierului ''%%/proc/meminfo%%'' este textul pe care utilitarul ''%%grep%%'' îl prelucrează. | + | Dans l'exemple ci-dessus, nous utilisons '' %% cat %% '' pour saisir le contenu du fichier '' %% / proc / meminfo %% '' dans l'utilitaire '' %% grep %% ''; avec l'utilitaire '' %% grep %% '' nous filtrons le contenu par le texte '' %% "Mem" %% ''. En d'autres termes, la sortie de la commande '' %% cat / proc / meminfo %% '', c'est-à-dire le contenu du fichier '' %% / proc / meminfo %% '', est le texte que l'utilitaire '' Processus %% grep %% ''. |
<note warning> | <note warning> | ||
- | Folosind simbolul pipe (''|'') putem inlantui comenzi astfel incat outputul comenzii precedente devine input pentru comanda urmatoare. | + | En utilisant le symbole de tube/pipe ('' | ''), nous pouvons enchaîner les commandes afin que le output de la commande précédente devienne input pour la commande suivante. |
</note> | </note> | ||
- | **Exercițiu**: Plecând de la exemplul de mai sus, extrageți din fișierul ''%%/proc/cpuinfo%%'' dimensiunea memoriei cache a procesorului vostru; filtrați conținutul după textul ''%%"cache"%%''. | + | **Exercice**: À partir de l'exemple ci-dessus, extraire du fichier ''%%/proc/cpuinfo%%'' la dimension du memoire cache du votre processeur; filtrer le contenu apres le texte''%%"cache"%%''. |
- | === Afișarea parțială a unui fișier === | + | === Affichage partiel d'un fichier === |
- | Am văzut că utilitarul ''%%cat%%'' afișează întreg conținutul unui fișier. Există scenarii în care suntem interesați doar de începutul sau sfârșitul unui conținut. Pentru aceste cazuri putem folosi utilitarele: | + | Nous avons vu que l'utilitaire '' %% cat %% '' affiche l'intégralité du contenu d'un fichier. Il existe des scénarios où nous ne nous intéressons qu'au début ou à la fin d'un contenu. Pour ces cas, nous pouvons utiliser les utilitaires: |
* ''%%head%%'' - afișează primele **10** linii din conținut | * ''%%head%%'' - afișează primele **10** linii din conținut | ||
* ''%%tail%%'' - afișează ultimele **10** linii din conținut | * ''%%tail%%'' - afișează ultimele **10** linii din conținut | ||
- | Valoarea **10** este valoarea implicită a ambelor utilitare, dar putem specifica un alt număr de linii. | + | La valeur ** 10 ** est la valeur par défaut des deux utilitaires, mais nous pouvons spécifier un autre nombre de lignes. |
- | Exemplu: | + | Exemple: |
<code bash> | <code bash> | ||
student@sde:~$ cat sde-workspace/tp01/tv-shows/young-sheldon/shelly | head -1 | student@sde:~$ cat sde-workspace/tp01/tv-shows/young-sheldon/shelly | head -1 | ||
Line 644: | Line 623: | ||
</code> | </code> | ||
- | **Exercițiu**: Afisati primii 10 utilizatori din sistem (lista utilizatorilor se gaseste in directorul ''/etc/passwd''). | + | ** Exercice **: Afficher les 10 premiers utilisateurs du système (la liste des utilisateurs se trouve dans le répertoire '' / etc / passwd ''). |
- | ===== Căutarea în fișiere ===== | + | ===== Recherche dans les fichiers ===== |
- | Așa cum am văzut până în acest punct din carte, majoritatea comenzilor Linux afișează o gamă largă de informații pe care apoi utilizatorul (adică noi) le filtrează pentru a extrage ceea ce îl intresează. La începutul acestei secțiuni, am folosit utilitarul ''%%grep%%'' ca să filtrăm rezultatul unei comenzi. | + | Comme nous avons vu jusqu'à présent dans le livre, la plupart des commandes Linux affichent un large volume d'informations que l'utilisateur (c'est-à-dire nous) va le filtre ensuite pour extraire ce qui l'intéresse. Au début de cette section, nous avons utilisé l'utilitaire '' %% grep %% '' pour filtrer le résultat d'une commande. |
- | Comanda ''%%grep%%'' este una dintre cele mai folosite în linie de comandă. Sintaxa de folosire a ''%%grep%%'' este următoarea: | + | La commande '' %% grep %% '' est l'une des plus utilisées dans la ligne de commande. La syntaxe d'utilisation de '' %% grep %% '' est la suivante: |
<code bash> | <code bash> | ||
Line 656: | Line 635: | ||
grep [OPTIONS] PATTERN [FILE...] | grep [OPTIONS] PATTERN [FILE...] | ||
</code> | </code> | ||
- | ''%%grep%%'' caută **PATTERN** în lista de fișiere primită ca argument și afișează liniile care conțin **PATTERN**-ul căutat. Atunci când nu primește nici un fișier, citește text de la tastatură (intrarea standard) și afișează liniile care conțin **PATTERN**-ul căutat. | + | ''%%grep%%'' cherche **PATTERN** dans la liste des fichiers reçus en argument et affiche les lignes qui les contiennent le **PATTERN** cherche. Lorsqu'aucun fichier n'est reçu, lisez le texte du clavier (entrée standard) et affichez les lignes qui contiennent le **PATTERN** cherche. |
- | Până acum noi am utilizat ''%%grep%%'' după modelul de mai jos: | + | Nous avons eu utilise ''%%grep%%'' apres le modele suivante: |
<code bash> | <code bash> | ||
Line 664: | Line 643: | ||
My name is Sheldon | My name is Sheldon | ||
</code> | </code> | ||
- | În exemplul de mai sus, operatorul ''%%|%%'' trimite textul afișat de comanda ''%%cat%%'' către intrarea standard a comenzii ''%%grep%%''. | + | Dans l'exemple ci-dessus, l'opérateur '' %% | %% '' envoie le texte affiché par la commande '' %% cat %% '' à l'entrée standard de la commande '' %% grep %% ''. |
<code bash> | <code bash> | ||
Line 670: | Line 649: | ||
My name is Sheldon | My name is Sheldon | ||
</code> | </code> | ||
- | Observăm modul de folosire: ''%%grep PATTERN cale/către/fișier%%''. | + | Le mode d'utilisation: ''%%grep PATTERN path/vers/fichier%%''. |
- | + | ===== 6. L'utilitaire cut ===== | |
- | + | Nous nous souvenons de fichier ''/etc/passwd'' qui contient des informations sur tous les utilisateurs du système . | |
- | + | ||
- | ===== 6. Utilitarul cut ===== | + | |
- | Ne amintim de fișierul ''/etc/passwd'' conține informații despre toți utilizatorii din sistem. | + | |
<code bash> | <code bash> | ||
Line 687: | Line 663: | ||
</code> | </code> | ||
- | În Linux există filtrul de text ''cut'' prin care putem extrage doar anumite informații dintr-un output. | + | En Linux il y a le filtre de texte ''cut'' grâce auquel nous ne pouvons extraire qcertaines informations d' output. |
- | Să zicem că vrem să extragem doar numele utilizatorilor, fără informațiile legate de grupuri sau home directory. | + | Disons que nous voulons uniquement extraire les noms d'utilisateur, sans informations sur les groupes ou les répertoires personnels(home directory). |
Line 700: | Line 676: | ||
- | Argumentul ''-f1'' specifică faptul că vrem prima coloană, iar argumentul ''-d:'' specifică delimitatorul | + | L'argument ''-f1'' spécifie que nous voulons la première colonne, et l'argument ''-d:'' spécifie le délimiteurde coloane, în cazul nostru '':''. |
- | de coloane, în cazul nostru '':''. | + | |
- | - Pornind de la comanda de mai sus, afișați numele utilizatorilor sortați alfabetic. (Hint: ''man sort'') | + | - En commanecent de la commande au dessus, afficher les noms d'utilisateurs trie par ordre alphabétique. (Hint: ''man sort'') |
- | - Folosind utilitarul ''wc'', obțineți numărul de utilizatori din sistem. (Hint: ''man wc'') | + | - En utilisant l'utilitaire ''wc'', vous obtenez le numero des utilisatuers |
+ | du system. (Hint: ''man wc'') | ||
Line 711: | Line 687: | ||
===== 7. Shell scripting ===== | ===== 7. Shell scripting ===== | ||
- | Un script shell este un fișier text care conține comenzi și construcții specifice shell-ului. Un script shell începe cu construcția ''#!/bin/bash'', denumită //shebang// care indică interpretorul scriptului; în cazul de față interpretorul este chiar shell-ul Bash. Dacă nu este specificat nici un shell prin shebang atunci implicit va fi luat shell-ul implicit (setat în ''/etc/passwd'') asignat utilizatorului logat. | + | Un script shell est un fichier texte contenant des commandes et des constructions spécifiques au shell. Un script shell commence par la construction ''#!/bin/bash'', nomee //shebang// indiquant l'interprète du script; dans ce cas, l'interprète est le shell Bash. Dacă nu este specificat nici un shell prin shebang atunci implicit va fi luat shell-ul implicit (setat în ''/etc/passwd'') asignat utilizatorului logat. |
- | Spre exemplu, one-liners pe care le-am tot scris până acum ar putea fi puse într-un shell script și, mai mult, dacă sunt comenzi lungi și nu încap pe o linie le putem "sparge" în mai multe linii folosind separatorul ''\'': | + | Par exemple, one-liners que on a écrit jusqu'à présent pourrait être mis dans un shell script et, en plus, si ce sont des commandes longues et ne tiennent pas sur une seule ligne, nous pouvons les "diviser" en plusieurs lignes en utilisant le séparateur ''\'': |
<code bash> | <code bash> | ||
Line 728: | Line 704: | ||
<note important> | <note important> | ||
- | **ATENȚIE!** În construcția de mai sus după ''\'' trebuie să nu mai existe nici un caracter (nici măcar spațiu alb/trailing whitespaces) | + | **ATTENTION!** Dans la construction ci-dessus après '' \ '', il ne doit past etre aucun caractère (ni l'espace blanc / trailing whitespaces) |
</note> | </note> | ||
- | Scriptul conține comenzi uzuale folosite în shell și alte comenzi care se regăsesc mai adesea în scripturi: ''while'', ''if'', ''for''. Acestea nu sunt instrucțiuni, ci sunt tot comenzi shell; pot fi folosite, dacă sintaxa este corectă și în linia de comandă. | + | Le script contien des commandes usuales utilise en shell et de autres commandes qui pn peut le trouve souvent dans les scripts: ''while'', ''if'', ''for''. Ces ne sont pas des instructions, il y a encore des commandes shell; peut être utilisé si la syntaxe est également correcte sur la ligne de commande. |
- | === Argumente din linia de comandă === | + | === Arguments de ligne de commande === |
- | Un script moștenește variabilele de mediu ale shell-ului părinte precum ''HOME'', ''BASH'', ''IFS'', ''USER''. În script le putem folosi astfel: | + | Un script hérité les variabiles de l'envireonement du shell aprent comme ''HOME'', ''BASH'', ''IFS'', ''USER''. Dans le script, nous pouvons les utiliser comme ceci: |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Line 742: | Line 718: | ||
</code> | </code> | ||
- | Pe lângă aceste variabile, scriptul poate primi o serie de argumente din linia de comandă. Folosind următoarele variabile, putem referi argumentele primite de script din linia de comandă: | + | En plus de ces variables, le script peut recevoir un certain nombre d'arguments de la ligne de commande. En utilisant les variables suivantes, nous pouvons nous référer aux arguments reçus par le script depuis la ligne de commande: |
- | * ''$*'' este un string (''$1, $2 ... $n'') format din toate argumentele primite de script | + | * ''$*'' est un string (''$1, $2 ... $n'') composé de tous les arguments reçus par le script |
- | * ''$@'' este o listă formată din argumentele scriptului | + | * ''$@'' est une liste d'arguments de script |
- | * ''$1, $2 ... $n'' reprezintă fiecare parametru din script | + | * ''$1, $2 ... $n'' représente chaque paramètre du script |
- | * ''$0'' este numele scriptului | + | * ''$0'' est le nom du script |
- | * ''$#'' este numărul de argumente primite din linia de comandă | + | * ''$#'' est le nombre d'arguments reçus de la ligne de commande |
- | Spre exemplu, să luăm următorul script ''arguments.sh'': | + | Par exemple, prenons le script suivant ''arguments.sh'': |
<code bash> | <code bash> | ||
#!/bin/bash | #!/bin/bash | ||
Line 761: | Line 737: | ||
</code> | </code> | ||
- | Să apelăm scriptul cu 4 argumente: | + | Appelons le script avec 4 arguments: |
<code bash> | <code bash> | ||
student@uso:~$ bash arguments.sh banane cirese caise castraveti | student@uso:~$ bash arguments.sh banane cirese caise castraveti | ||
Line 772: | Line 748: | ||
- | =====8. Execuția comenzilor ===== | + | =====8. Exécution des commandes ===== |
- | ==== Încheierea execuției unei comenzi ==== | + | ==== Le fin de l'exécution d'une commande ==== |
- | Atunci când rulăm o comandă aceasta își poate încheia execuția în două moduri: cu **succes** sau cu **eșec**. Atunci când își încheie execuția, orice proces întoarce un cod de eroare, care este un număr: | + | Lorsque nous exécutons une commande, elle peut terminer son exécution de deux manières: avec ** succès ** ou avec ** échec **. Quand il fini son execution, tout les processus vont retourne un code d'erreur, qui va etre un numero: |
- | * Dacă numărul întors are valoarea ''%%0%%'', procesul și-a încheiat execuția cu succes. | + | * Si le numero a la veleur ''%%0%%'', le proccesus a fini l'execution avec succes. |
- | * Dacă numărul întors are orice altă valoare, procesul și-a încheiat execuția cu eroare, iar codul întors poate fi folosit pentru a afla mai multe informații despre eroarea pe care a întors-o procesul. În pagina ''%%man%%'' a utilitarului ''%%ls%%'' este specificat:<code bash> | + | * Si le numéro renvoyé a une autre valeur, le processus a terminé son exécution par erreur et le code renvoyé peut être utilisé pour en savoir plus en ce qui concerne l'erreur renvoyée par le processus. Dans la page '' %% man %% '' de l'utilitaire '' %% ls %% '' est spécifiée:<code bash> |
Exit status: | Exit status: | ||
0 if OK, | 0 if OK, | ||
Line 788: | Line 764: | ||
</code> | </code> | ||
- | Pentru a vedea codul cu care și-a încheiat execuția o comandă folosim sintaxa ''%%$?%%''. Urmărim exemplul de mai jos: | + | Pour voir le code avec lequel une commande a terminé son exécution, nous utilisons la syntaxe ''%%$?%%''. Voir l'exemple ci-dessus: |
<code bash> | <code bash> | ||
Line 800: | Line 776: | ||
2 | 2 | ||
</code> | </code> | ||
- | Observăm că în cazul fișierului inexistet, comanda ''%%ls non-existent%%'' a întors valoarea ''%%2%%'', așa cum era specificat și în pagina de manual. | + | On observe que dans le cas quand le fichier est inexistent, la commande ''%%ls non-existent%%'' a retourne la valeur ''%%2%%'', comme est spécifié dans la page de manuel. |
- | === Înlănțuirea comenzilor în funcție de succes sau eșec === | + | === Chaînage des commandes en fonction du succès ou de l'échec === |
- | De multe ori vrem să executăm o succesiune de comenzi pentru a realiza o sarcină. De exemplu, atunci când vrem să instalăm o aplicație o rulăm trei comenzi: | + | Plusieurs fois, nous voulons exécuter une séquence de commandes pour accomplir une tâche. Par exemple, lorsque nous voulons installer une application, nous l'exécutons trois commandes: |
- | * O să actualizăm indexul surselor de pachete folosind ''%%apt update%%'' | + | * Nous mettrons à jour l'index source du package en utilisant ''%%apt update%%'' |
- | * O să instalăm pachetul care conține aplicația folosind ''%%apt install%%'' | + | * Nous installerons le package contenant l'application en utilisant ''%%apt install%%'' |
- | * O să rulăm aplicația pentru a valida că instalarea a fost cu succes. | + | * Nous exécuterons l'application pour valider que l'installation a réussi. |
- | + | ||
- | Preferăm să înlănțuim cele trei comenzi într-una singură pentru că astfel putem să pornim tot acest proces, să plecăm de la calculator, iar când ne întoarcem avem tot sistemul pregătit. | + | |
+ | Nous préférons enchaîner les trois commandes en une seule parce que de cette façon, nous pouvons démarrer tout ce processus, quitter l'ordinateur, et lorsque nous revenons, nous avons tout le système prêt. | ||
Pentru a înlănțui comenzi în terminalul bash avem trei operatori disponibili: | Pentru a înlănțui comenzi în terminalul bash avem trei operatori disponibili: | ||
- | Operatorul ''%%;%%'' - este folosit pentru separarea comenzilor Urmăm exemplul de mai jos: | + | L'operateur ''%%;%%'' - est utilise pour separer les commandes. On va suive l'exemple ci-dessous: |
<code bash> | <code bash> | ||
student@uso:~$ mkdir demo; cd demo; touch Hello; ls | student@uso:~$ mkdir demo; cd demo; touch Hello; ls | ||
Line 820: | Line 795: | ||
</code> | </code> | ||
- | În exemplul de mai sus am creat directorul ''%%demo%%'', am navigat în interiorul său, am creat fișierul ''%%Hello%%'' și am afișat conținutul directorului. Am făcut toate acestea înlănțuind comenzile ''%%mkdir%%'', ''%%cd%%'', ''%%touch%%'' și ''%%ls%%'' cu ajutorul operatorului ''%%;%%''. | + | Dans l'exemple ci-dessus, on a créé le répertoire '' %% demo %% '', navigué à l'intérieur, créé le fichier '' %% Hello %% '' et affiché le contenu du répertoire. On a fait tout cela en concaténant les commandes '' %% mkdir %% '', '' %% cd %% '', '' %% touch %% '' et '' %% ls %% '' à l'aide de l'opérateur '' %%; %% ''. |
- | Operatorul ''%%;%%'' este folosit pentru separarea comenzilor, dar nu ține cont dacă comenzile anterioare au fost executate cu succes sau nu. Urmăm exemplul de mai jos: | + | L'opérateur '' %%; %% '' est utilisé pour séparer les commandes, mais ne prend pas en compte si les commandes précédentes ont été exécutées avec succès ou non. On va suive l'exemple ci-dessous: |
<code bash> | <code bash> | ||
student@uso:~$ mkdir operators/demo; cd operators/demo | student@uso:~$ mkdir operators/demo; cd operators/demo | ||
Line 829: | Line 804: | ||
</code> | </code> | ||
- | În exemplul de mai sus, comanda ''%%mkdir%%'' a eșuat deoarece nu a găsit directorul ''%%operators%%'' în care să creeze directorul ''%%demo%%''. Cu toate acestea, operatorul ''%%;%%'' doar separă comenzile între ele, așa că și comanda ''%%cd operators/demo%%'' a fost executată, și și aceasta a eșuat deoarece nu există calea ''%%operators/demo%%''. | + | Dans l'exemple ci-dessus, la commande '' %%mkdir%% '' a échoué car elle n'a pas pu trouver le répertoire '' %%operators%% '' pour créer le répertoire '' %% demo %% ''. Cependant, l'opérateur '' %%; %% '' sépare uniquement les commandes les unes des autres, donc la commande '' %%cd operators/demo %% '' a également été exécutée et a échoué car il n'y a pas de chemin '' %% opérateurs/démo %% ''. |
- | Folosim operatorul ''%%;%%'' pentru a înlănțui comenzi care sunt independente unele de altele, și deci execuția lor nu depinde de succesul unei comenzi precedente. | + | On va utilise l'operateur ''%%;%%'' pour enchaîner des commandes indépendantes les unes des autres, afin que leur exécution ne dépende pas du succès d'une commandeprecedente. |
- | Operatorul binar ''%%&&%%'' (și logic) - execută a doua comandă doar dacă precedenta s-a executat cu succes. Exemplul anterior devine: | + | L'operateur binnaire ''%%&&%%'' (et logiq) - exécute la deuxième commande uniquement si la précédente a été exécutée avec succès. L'exemple précédent devient: |
<code bash> | <code bash> | ||
student@uso:~$ mkdir operators/demo && cd operators/demo | student@uso:~$ mkdir operators/demo && cd operators/demo | ||
Line 839: | Line 814: | ||
</code> | </code> | ||
- | Observăm că din moment ce comanda ''%%mkdir%%'' a eșuat, comanda ''%%cd%%'' nu a mai fost executată. | + | Nous remarquons que depuis l'échec de la commande '' %% mkdir %% '', la commande '' %% cd %% '' n'a pas été exécutée. |
- | Operatorul binar ''%%||%%'' (sau logic) - execută a doua comandă doar dacă prima s-a terminat cu eșec. Urmărim exemplul de mai jos: | + | L'operateur ''%%||%%'' (ou logique) - exécute la deuxième commande uniquement si la première a échoué. On va suive l'exemple ci-dessous: |
<code bash> | <code bash> | ||
student@uso:~$ (ls -d operators || mkdir operators) && ls -d operators | student@uso:~$ (ls -d operators || mkdir operators) && ls -d operators | ||
Line 850: | Line 825: | ||
operators | operators | ||
</code> | </code> | ||
- | În exemplul de mai sus, prima comandă ''%%ls%%'' a eșuat, așa că a fost executată comanda ''%%mkdir%%'' și apoi a fost executată ultima comandă ''%%ls%%''. La cea de-a doua rulare, a fost executată cu succes prima comandă ''%%ls%%'', așa că comanda ''%%mkdir%%'' nu a mai fost executată, și apoi a fost executată ultima comandă ''%%ls%%''. | ||
- | Pentru a rezolva scenariul de la care am plecat inițial, putem rula: | + | Dans l'exemple ci-dessus, la première commande ''%%ls%%'' a échoué, donc la commande a été exécutée ''%%mkdir%%'' puis la dernière commande a été exécutée ''%%ls%%''. Lors de la deuxième exécution, la première commande ''%%ls%%'' a été exécutée avec succès, donc la commande ''%% mkdir%% '' n'a plus été exécutée, puis la dernière commande a été exécutée ''%% ls %%''. |
+ | |||
+ | Pour résoudre le scénario à partir duquel nous avons commencé, nous pouvons exécuter: | ||
<code bash> | <code bash> | ||
sudo apt update && sudo apt install -y cowsay && cowsay "Howdy" | sudo apt update && sudo apt install -y cowsay && cowsay "Howdy" | ||
</code> | </code> | ||
- | Comanda de mai sus va actualiza indexul pachetelor sursă, va instala pachetul ''%%cowsay%%'' și va rula comanda ''%%cowsay%%'' pentru a valida instalarea. O astfel de înlănțuire de comenzi este numită **oneliner**. | + | La commande ci-dessus mettra à jour l'index du package source, installera le package '' %% cowsay %% '' et exécutera la commande '' %% cowsay %% '' pour valider l'installation. Une telle chaîne de commandes est appelée ** oneliner **. |
- | === Exerciții === | + | === Exercices === |
- | - Scrieți un oneliner cu ajutorul căruia creați directorul ''%%~/make-folder%%'' și apoi copiați conținutul directorului ~/sde-repository/tv-shows/young-sheldon în el. | + | - Écrivez un oneliner avec lequel vous créez le répertoire''%%~/make-folder%%'' puis copiez le contenu du répertoire ~/sde-repository/tv-shows/young-sheldon dedans. |
- | - Actualizați onelinerul anterior astfel încât după copiere să pornească afiseze mesajul: "operation done". | + | - Mettez à jour l'ancien oneliner telle que après la copie il doit être affiche le message: "operation done". |