This shows you the differences between two versions of the page.
sde2:laboratoare:01 [2021/03/10 07:41] alexandra.state2607 [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 522: | Line 522: | ||
</code> | </code> | ||
</note> | </note> | ||
- | |||
- | |||
Line 530: | 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 547: | 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 553: | 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 567: | 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 579: | 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 ''. | ||
Line 666: | Line 650: | ||
</code> | </code> | ||
Le mode d'utilisation: ''%%grep PATTERN path/vers/fichier%%''. | Le mode d'utilisation: ''%%grep PATTERN path/vers/fichier%%''. | ||
- | |||
- | |||
- | |||
===== 6. L'utilitaire cut ===== | ===== 6. L'utilitaire cut ===== | ||
- | nous nous souvenons de fichier ''/etc/passwd'' conține informații despre toți utilizatorii din sistem. | + | Nous nous souvenons de fichier ''/etc/passwd'' qui contient des informations sur tous les utilisateurs du système . |
<code bash> | <code bash> | ||
Line 737: | 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 756: | 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 767: | 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 783: | 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 795: | 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 815: | 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 824: | 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 834: | 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 845: | 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ă afiseze mesajul: "operation done". | + | - Mettez à jour l'ancien oneliner telle que après la copie il doit être affiche le message: "operation done". |