PLAN DU COURS
ENTREE/SORITE
ET PIPE
COMMANDES À
RETENIR
SCRIPT BASH
I ENTREE/SORITE
Mécanismes d’entrée-sorties standards
stdin (0)
: flux d'entrée ; généralement le clavier
stdout (1) :
flux de sortie ; généralement l'écran
stderr (2)
: flux d'erreurs ; généralement l'écran ; tous les messages d'erreurs
lors de l'exécution d'un programme
Par défaut, stdout et stderr sont confondus sur le
console ; pour faciliter le travail, une rédirection est necessaire.
1.1 Rédirection
de stdout :
1.1.1 >
CMD > FILE
Rédiriger la soirte de CMD vers le FILE (à la place de
l’écran)
Si le fichier FILE n’existe pas, le créer ; sinon, l’écraser
et le remplacer à nouveau
1.1.2 >>
CMD >> FILE
Rédiriger la soirte de CMD vers le FILE
Si le fichier FILE n’existe pas, le créer ; sinon,
concaténer les résultats
1.2 Rédirection
de stderr :
1.2.1 2>
CMD 2> FILE
Rédiriger les messages d’erreurs lors de l’exécution de
CMD vers le FILE (à la place de l’écran)
Si le fichier FILE n’existe pas, le créer ; sinon, l’écraser
et le remplacer à nouveau
1.2.2 2>>
CMD 2>> FILE
Rédiriger les messages d’erreurs lors de l’exécution de
CMD vers le FILE
Si le fichier FILE n’existe pas, le créer ; sinon,
concaténer les résultats
1.3 Rédirection
de stdin :
1.3.1 <
CMD < FILE
Rédiriger le FILE comme l’entrée de CMD (à la place du
clavier)
1.3.2 |
CMD1 | CMD2
Rédiriger la soirte de CMD1 vers l’entrée de CMD2
1.4 caractère
spécial : &
Référence
&> FILE
i.e.
FILE 2>&1
Permettre de rédiriger le stdout et le stderr
1.5 PIPE |
Permettre d’enchaîner des commandes
cf 1.3.2
II COMMANDES
2.1 $cp
copier des fichiers et des répertoires
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE…
2.1.1 $cp
fichier_source fichier_cible
Si fichier_cible existe, $cp copie fichier_source dans
fichier_cible ; sinon, $cp copie le fichier_source en désignant un nouveau nom
(fichier_cible).
2.1.2 $cp ficher
répertoire
$cp copie le ficher dans le répertoire en gardant son
nom ; dans ce répertoire, s’il y a un fichier avec le même nom, $cp
remplace ce fichier par le fichier source ; si le répertoire n’existe pas,
une erreur se produit.
2.1.3 $cp
répertoire_source répertoire_cible
[OPTION] -r : la copie récursive de répertoires
Si le répertoire cible existe, $cp copie le répertoire
source entier dans le répertoire cible en lui gardant son nom ;
Sinon, $cp copie le répertoire source entier en lui rénommant
2.2 $mv
move (rename) files
Déplacer ou renommer des fichiers ou des répertoires
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE…
2.2.1 $mv
fichier_source fichier_cible
$mv renomme le fichier_source comme le fichier_cible, le
fichier_source est disparu.
2.2.2 $mv ficher
répertoire
$mv déplace le fichier dans le répertoire.
2.2.3 $mv répertoire_source
répertoire_cible
Si le répertoire_cible existe, $mv déplace le répertoire_source
sous le répertoire_cible en gardant son nom ; sinon, $mv renomme le
répertoire_source comme le répertoire_cible.
III SCRIPT BASH
Création
#!bin/bash
interpréteur : bash
# commentaire
#! introduire
l’interpréteur
Exécution
$bash ./NOM_FICHIER.sh
EXERCICES
TP Consignes url:
Phase 1 : les
entrées–sorties
APPLICATION1(page 9)
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ mkdir TEST1 TEST2
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ ls
Notes1004.odt TEST1 TEST2
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ mkdir TEST3
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ ls
Notes1004.odt TEST1 TEST2 TEST3
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ cd TEST1
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ touch vide1.txt ./TEST1/vide2.txt ../TEST2/vide3.txt
touch: cannot touch './TEST1/vide2.txt': No such file or directory
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ touch ../TEST1/vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls
vide1.txt vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ echo XU Yizhou > vide1.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ echo Intelligence Artificielle >>vide1.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ cat vide1.txt
XU Yizhou
Intelligence Artificielle
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ mv vide1.txt jenesuisplusvide.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls
jenesuisplusvide.txt vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ cp jenesuisplusvide.txt ../TEST2
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ cp jenesuisplusvide.txt moinonplus.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls
jenesuisplusvide.txt moinonplus.txt vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls > liste.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ cat liste.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls >> liste.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ cat liste.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ lsd >> liste.txt 2>erreur.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls
erreur.txt jenesuisplusvide.txt liste.txt moinonplus.txt vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ cat erreur.txt
No command 'lsd' found, but there are 17 similar ones
lsd: command not found
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls > ../TEST2/liste.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls >> ../TEST2/liste.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ rm vide2.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ ls
erreur.txt jenesuisplusvide.txt liste.txt moinonplus.txt
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ rmdir ../TEST3
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST1$ cd ..
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ ls
Notes1004.odt TEST1 TEST2
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ pwd
/home/chunyang/Documents/ProjetEncadre20172018/cours/TP1
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ mkdir TEST1 TEST2
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ ls
TEST1 TEST2
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ mkdir TEST3
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ cd TEST1chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ touch vide1.txt ./TEST1/vide2.txt ../TEST2/vide3.txt
touch: cannot touch './TEST1/vide2.txt': No such file or directory
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ touch ../TEST1/vide2.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls
vide1.txt vide2.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ echo "JIANG Chunyang" > vide1.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ echo "Intelligence Artificielle" >> vide1.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls
vide1.txt vide2.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ mv vide1.txt jenesuisplusvide.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls
jenesuisplusvide.txt vide2.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ cp jenesuisplusvide.txt ../TEST2
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ cp jenesuisplusvide.txt moinonplus.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls
jenesuisplusvide.txt moinonplus.txt vide2.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls > liste.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ less liste.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
liste.txt (END)
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls >> liste.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ less liste.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
liste.txt (END)
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ lsd >> liste.txt 2> erreur.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ less erreur.txt
No command 'lsd' found, but there are 17 similar ones
lsd: command not found
erreur.txt (END)
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls > ../TEST2/liste.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls >> ../TEST2/liste.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ less ../TEST2/liste.txt
erreur.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
erreur.txt
jenesuisplusvide.txt
liste.txt
moinonplus.txt
vide2.txt
../TEST2/liste.txt (END)
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ rm vide2.txt
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ rmdir ../TEST3
APPLICATION2(page 10)
Compter le nombre de fichier dans votre répertoire de travail
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ ls | wc -l
3
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls | wc -l
4
Compter le nombre de fichier dans le répertoire TEST2
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004/TEST2$ ls | wc -l
3
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1/TEST1$ ls ../TEST2 | wc -l
3
APPLICATION3(page 11)
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ ls;who;pwd
Notes1004.odt TEST1 TEST2
yizhou tty7 2017-10-08 13:42 (:0)
yizhou pts/18 2017-10-08 12:14 (:0)
/home/yizhou/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ (date;who)>qui
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ ls
Notes1004.odt qui TEST1 TEST2
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ cat qui
dimanche 8 octobre 2017, 15:16:46 (UTC+0200)
yizhou tty7 2017-10-08 13:42 (:0)
yizhou pts/18 2017-10-08 12:14 (:0)
yizhou@yizhou-ThinkPad-T440p:~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004$ echo je suis sous $(pwd)
je suis sous /home/yizhou/Documents/20172018-S1/Projet_Encadre/COURS/Seance1004
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ ls; who; pwd
TEST1 TEST2
chunyang tty7 2017-10-08 09:28 (:0)
/home/chunyang/Documents/ProjetEncadre20172018/cours/TP1
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ (date ; who) > /tmp/qui
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ less /tmp/qui
dimanche 8 octobre 2017, 15:35:24 (UTC+0200)
chunyang tty7 2017-10-08 09:28 (:0)
/tmp/qui (END)
chunyang@chunyang-ThinkPad:~/Documents/ProjetEncadre20172018/cours/TP1$ echo Je suis sous $(pwd)
Je suis sous /home/chunyang/Documents/ProjetEncadre20172018/cours/TP1
Phase 2 : rappel
HTML
Création d’une page
HTML contenant un tableau de deux lignes
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>XU Yizhou</title>
</head>
<body>
<h2> Projet Encadre </h2>
<table border="1">
<tr><td>XU Yizhou</td></tr>
<tr>
<td>Intelligence Artificielle</td>
</tr>
</table>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JIANG Chunyang</title>
</head>
<body>
<p>Une page HTML de test avec un beau tableau :</p>
<table border="1">
<tr>
<td>JIANG Chunyang</td>
</tr>
<tr>
<td>Intelligence Artificielle</td>
</tr>
</table>
</body>
</html>
Phase 3 : bash
Création de l’environement de travail
Création d’un fichier txt avec un script bash
CreationTexte_test.sh
CreationTXT_test.sh
Création d’un fichier txt avec un script bash
CreationTexte_test.sh
#!/bin/sh cd ../DUMP-TEXT/; echo XU Yizhou > Sujet.txt; echo Intelligence Artificielle >> Sujet.txt;
CreationTXT_test.sh
#!bin/bash
#cd Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB/PROGRAMMES/
cd ../DUMP-TEXT;
echo JIANG Chunyang > ./Sujet.txt;
echo Intelligence Artificielle >> ./Sujet.txt;
Création d’une page HTML avec un script bash
CreationTableau_test.sh
#!/bin/sh cd ../TABLEAUX; echo '<!DOCTYPE html>' > Sujet.html; echo '<html>' >> Sujet.html; echo '<head>' >> Sujet.html; echo '<meta charset="UTF-8">' >> Sujet.html; echo '<title>XU Yizhou</title>' >> Sujet.html; echo '</head>' >> Sujet.html; echo '<body>' >> Sujet.html; echo '<h2> Projet Encadre </h2>' >> Sujet.html; echo '<table border="1">' >> Sujet.html; echo '<tr><td>XU Yizhou</td></tr>' >> Sujet.html; echo '<tr><td>Intelligence Artificielle</td></tr>' >> Sujet.html; echo '</table>' >> Sujet.html; echo '</body>' >> Sujet.html; echo '</html>' >> Sujet.html;
CreationTableau_html_test.sh
#!bin/bash #cd Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB/PROGRAMMES/ cd ../TABLEAUX; echo '<!DOCTYPE html>' > ./Sujet.html; echo '<html>' >> ./Sujet.html; echo '<head>' >> ./Sujet.html; echo '<meta charset="utf-8">' >> ./Sujet.html; echo '<title>JIANG Chunyang</title>' >> ./Sujet.html; echo '</head>' >> ./Sujet.html; echo '<body>' >> ./Sujet.html; echo '<p>Une page HTML de test avec un beau tableau :</p>' >> ./Sujet.html; echo '<table border="1">' >> ./Sujet.html; echo '<tr>' >> ./Sujet.html; echo '<td>JIANG Chunyang</td>' >> ./Sujet.html; echo '</tr>' >> ./Sujet.html; echo '<tr>' >> ./Sujet.html; echo '<td>Intelligence Artificielle</td>' >> ./Sujet.html; echo '</tr>' >> ./Sujet.html; echo '</table>' >> ./Sujet.html; echo '</body>' >> ./Sujet.html; echo '</html>' >> ./Sujet.html;
Références