diff options
-rw-r--r-- | _preamble.tex | 5 | ||||
-rw-r--r-- | fichiers/03-grep-bash.tex | 253 | ||||
-rw-r--r-- | fichiers/scripts/animal.sh | 16 | ||||
-rw-r--r-- | fichiers/scripts/backup-mk2.sh | 25 | ||||
-rw-r--r-- | fichiers/scripts/backup.sh | 19 | ||||
-rw-r--r-- | fichiers/scripts/copyten-mk2.sh | 41 | ||||
-rw-r--r-- | fichiers/scripts/copyten.sh | 35 | ||||
-rw-r--r-- | fichiers/scripts/countlines-mk2.sh | 23 | ||||
-rw-r--r-- | fichiers/scripts/countlines.sh | 25 | ||||
-rw-r--r-- | fichiers/scripts/greaterthan.sh | 11 | ||||
-rw-r--r-- | fichiers/scripts/rah.sh | 13 | ||||
-rw-r--r-- | fichiers/scripts/tiff2png.sh | 4 | ||||
-rw-r--r-- | makefile | 3 |
13 files changed, 234 insertions, 239 deletions
diff --git a/_preamble.tex b/_preamble.tex index 682ea4a..19c71b0 100644 --- a/_preamble.tex +++ b/_preamble.tex | |||
@@ -31,10 +31,11 @@ delim_0 ",\~" | |||
31 | \usepackage{imakeidx} | 31 | \usepackage{imakeidx} |
32 | \usepackage{xparse} | 32 | \usepackage{xparse} |
33 | 33 | ||
34 | \usepackage[unicode=true]{hyperref} | 34 | \usepackage{hyperref} |
35 | \hypersetup{colorlinks,allcolors=blue,linktocpage} | 35 | \hypersetup{unicode=true,colorlinks,allcolors=blue,linktocpage} |
36 | \usepackage{hyperxmp} | 36 | \usepackage{hyperxmp} |
37 | \usepackage{uri} | 37 | \usepackage{uri} |
38 | \usepackage{intopdf} | ||
38 | 39 | ||
39 | \usepackage{cleveref} | 40 | \usepackage{cleveref} |
40 | \crefname{table}{tableau}{tableaux} | 41 | \crefname{table}{tableau}{tableaux} |
diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index 8b9c78e..c4c5f05 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex | |||
@@ -22,6 +22,12 @@ | |||
22 | {\index[cmds]{#2@\texttt{#2}#3}} | 22 | {\index[cmds]{#2@\texttt{#2}#3}} |
23 | } | 23 | } |
24 | 24 | ||
25 | \NewDocumentCommand{\inputfile}{O{} m m O{application/x-sh}}{ | ||
26 | \attachandlink{scripts/#3}[#4]{Fichier | ||
27 | attaché}{\marginpar{\textcolor{blue}{Ouvrir le fichier}}} | ||
28 | \inputminted[#1]{#2}{scripts/#3} | ||
29 | } | ||
30 | |||
25 | \begin{document} | 31 | \begin{document} |
26 | \maketitle | 32 | \maketitle |
27 | \renewcommand{\contentsname}{Sommaire} | 33 | \renewcommand{\contentsname}{Sommaire} |
@@ -700,29 +706,9 @@ fi | |||
700 | 706 | ||
701 | Voici donc comment se présente le script \verb|backup.sh| une fois la | 707 | Voici donc comment se présente le script \verb|backup.sh| une fois la |
702 | condition insérée: | 708 | condition insérée: |
703 | \begin{minted}[linenos,highlightlines={7-14}]{bash} | ||
704 | #!/bin/bash | ||
705 | echo "Veuillez choisir l'extension des fichiers à sauvegarder" | ||
706 | echo "(sans le point):" | ||
707 | read -p 'extension: ' ext | ||
708 | echo "Veuillez choisir le nom du dossier de sauvegarde:" | ||
709 | read -p 'dossier: ' backupdir | ||
710 | if [ -d "$backupdir" ] | ||
711 | then | ||
712 | echo "Le dossier $backupdir existe déjà. Veuillez relancer le" | ||
713 | echo "programme et saisir un autre nom." | ||
714 | exit 1 | ||
715 | else | ||
716 | mkdir "$backupdir" | ||
717 | fi | ||
718 | cp *.$ext "$backupdir" | ||
719 | nbre=$(ls $backupdir/*.$ext | wc -l) | ||
720 | zip -r "$backupdir".zip "$backupdir" | ||
721 | echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" | ||
722 | echo "et l'archive $backupdir.zip a été créée." | ||
723 | \end{minted} | ||
724 | \captionof{listing}{bash: exemple de condition \texttt{if-then-else}% | 709 | \captionof{listing}{bash: exemple de condition \texttt{if-then-else}% |
725 | \label{lst:if-then-else}} | 710 | \label{lst:if-then-else}} |
711 | \inputfile[linenos,highlightlines={7-14}]{bash}{backup.sh} | ||
726 | 712 | ||
727 | \subsection{Conditions en série} | 713 | \subsection{Conditions en série} |
728 | \label{sec:conditions-en-serie} | 714 | \label{sec:conditions-en-serie} |
@@ -743,35 +729,9 @@ elif [ -e "$backupdir".zip ] | |||
743 | exit 1 | 729 | exit 1 |
744 | \end{minted} | 730 | \end{minted} |
745 | 731 | ||
746 | Ce qui donne le script \verb|backup.sh| suivant: | 732 | Ce qui donne le script \verb|backup-mk2.sh| suivant: |
747 | \begin{minted}[linenos,highlightlines={12-17}]{bash} | ||
748 | #!/bin/bash | ||
749 | echo "Veuillez choisir l'extension des fichiers à sauvegarder" | ||
750 | echo "(sans le point):" | ||
751 | read -p 'extension: ' ext | ||
752 | echo "Veuillez choisir le nom du dossier de sauvegarde:" | ||
753 | read -p 'dossier: ' backupdir | ||
754 | if [ -d "$backupdir" ] | ||
755 | then | ||
756 | echo "Le dossier $backupdir existe déjà. Veuillez relancer le" | ||
757 | echo "programme et saisir un autre nom." | ||
758 | exit 1 | ||
759 | elif [ -e "$backupdir".zip ] | ||
760 | then | ||
761 | echo "L'archive $backupdir.zip existe déjà. Veuillez la supprimer" | ||
762 | echo "ou la déplacer en dehors de ce dossier, puis relancez le" | ||
763 | echo "programme." | ||
764 | exit 1 | ||
765 | else | ||
766 | mkdir "$backupdir" | ||
767 | fi | ||
768 | cp *.$ext "$backupdir" | ||
769 | nbre=$(ls $backupdir/*.$ext | wc -l) | ||
770 | zip -r "$backupdir".zip "$backupdir" | ||
771 | echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" | ||
772 | echo "et l'archive $backupdir.zip a été créée." | ||
773 | \end{minted} | ||
774 | \captionof{listing}{bash: instruction \texttt{elif}\label{lst:elif}} | 733 | \captionof{listing}{bash: instruction \texttt{elif}\label{lst:elif}} |
734 | \inputfile[linenos,highlightlines={12-17}]{bash}{backup-mk2.sh} | ||
775 | 735 | ||
776 | \subsection{Tests} | 736 | \subsection{Tests} |
777 | \label{sec:tests} | 737 | \label{sec:tests} |
@@ -865,20 +825,8 @@ des opérateurs tels que \verb|{ ... }| | |||
865 | 825 | ||
866 | Voici un exemple d'indentation d'une structure dans laquelle on a | 826 | Voici un exemple d'indentation d'une structure dans laquelle on a |
867 | placé une condition à l'intérieur d'une autre condition: | 827 | placé une condition à l'intérieur d'une autre condition: |
868 | \begin{minted}[linenos]{bash} | ||
869 | #!/bin/bash | ||
870 | if [ $1 -gt 10 ] | ||
871 | then | ||
872 | echo "$1 est supérieur à 10" | ||
873 | if [ $1 -gt 100 ] | ||
874 | then | ||
875 | echo "et $1 est même supérieur à 100!" | ||
876 | fi | ||
877 | else | ||
878 | echo "Il faut aller au-dessus de 10 pour avoir une réponse!" | ||
879 | fi | ||
880 | \end{minted} | ||
881 | \captionof{listing}{bash: exemple d'indentation} | 828 | \captionof{listing}{bash: exemple d'indentation} |
829 | \inputfile[linenos]{bash}{greaterthan.sh} | ||
882 | 830 | ||
883 | \subsection{Opérateurs booléens} | 831 | \subsection{Opérateurs booléens} |
884 | \label{sec:operateurs-booleens} | 832 | \label{sec:operateurs-booleens} |
@@ -935,25 +883,8 @@ esac | |||
935 | 883 | ||
936 | Le \vref{lst:case} montre un exemple facile à comprendre de cette | 884 | Le \vref{lst:case} montre un exemple facile à comprendre de cette |
937 | technique. | 885 | technique. |
938 | \begin{minted}[linenos]{bash} | ||
939 | #!/bin/bash | ||
940 | |||
941 | echo "Entre le chien et le chat, quel est votre animal préféré?" | ||
942 | read -p 'Saisissez votre réponse: ' animal | ||
943 | |||
944 | case $animal in | ||
945 | [Cc]hien) | ||
946 | echo "Vous avez bien raison, le chien est le meilleur ami de l'homme." | ||
947 | ;; | ||
948 | [Cc]hat) | ||
949 | echo "Après le chien, c'était un en effet un choix possible." | ||
950 | ;; | ||
951 | *) | ||
952 | echo "Faites un effort, vous n'avez pas compris la question." | ||
953 | ;; | ||
954 | esac | ||
955 | \end{minted} | ||
956 | \captionof{listing}{bash: instruction \texttt{case}\label{lst:case}} | 886 | \captionof{listing}{bash: instruction \texttt{case}\label{lst:case}} |
887 | \inputfile[linenos]{bash}{animal.sh} | ||
957 | \begin{quoting} | 888 | \begin{quoting} |
958 | \textbf{Commentaire:} | 889 | \textbf{Commentaire:} |
959 | \begin{enumerate} | 890 | \begin{enumerate} |
@@ -1045,13 +976,8 @@ La boucle que nous allons utiliser fait appel à trois instructions: | |||
1045 | 976 | ||
1046 | Voici maintenant le script qui assure la conversion du format | 977 | Voici maintenant le script qui assure la conversion du format |
1047 | \verb|.tiff| vers le format \verb|.png|: | 978 | \verb|.tiff| vers le format \verb|.png|: |
1048 | \begin{minted}[linenos]{bash} | ||
1049 | #!/bin/bash | ||
1050 | for file in $(basename -s .tiff $(ls *.tiff)) | ||
1051 | do convert "$file".tiff "$file".png | ||
1052 | done | ||
1053 | \end{minted} | ||
1054 | \captionof{listing}{bash: \texttt{for ... do ... done}} | 979 | \captionof{listing}{bash: \texttt{for ... do ... done}} |
980 | \inputfile[linenos]{bash}{tiff2png.sh} | ||
1055 | 981 | ||
1056 | \begin{quoting} | 982 | \begin{quoting} |
1057 | \textbf{Commentaire:} | 983 | \textbf{Commentaire:} |
@@ -1084,34 +1010,8 @@ script \verb|countlines.sh|, donné dans le \cref{lst:countlines} | |||
1084 | ci-dessous, utilise cette expression pour compter les lignes des | 1010 | ci-dessous, utilise cette expression pour compter les lignes des |
1085 | fichiers\footnote{Pour une autre façon plus simple d'écrire le même | 1011 | fichiers\footnote{Pour une autre façon plus simple d'écrire le même |
1086 | programme, voir le \vref{lst:countlines-mk2}.}. | 1012 | programme, voir le \vref{lst:countlines-mk2}.}. |
1087 | \begin{minted}[linenos,highlightlines={13,16-17}]{bash} | ||
1088 | #!/bin/bash | ||
1089 | |||
1090 | echo "Entrez le nom du fichier dont vous voulez compter les lignes:" | ||
1091 | read -p 'Fichier: ' file | ||
1092 | |||
1093 | numline=0 | ||
1094 | |||
1095 | if [ ! -e $file ] || [ -z $file ] | ||
1096 | then | ||
1097 | echo "Erreur: le fichier $file n'existe pas." | ||
1098 | exit 1 | ||
1099 | else | ||
1100 | while read -r line | ||
1101 | # 'let' permet de poser des opérations arithmétiques; | ||
1102 | # à la place, on aurait pu écrire: do ((++numline)) | ||
1103 | do let "numline = numline + 1" | ||
1104 | done < $file | ||
1105 | fi | ||
1106 | |||
1107 | if [ $numline -le 1 ] | ||
1108 | then | ||
1109 | echo "Votre fichier $file compte $numline ligne." | ||
1110 | else | ||
1111 | echo "Votre fichier $file compte $numline lignes." | ||
1112 | fi | ||
1113 | \end{minted} | ||
1114 | \captionof{listing}{bash: \texttt{while}\label{lst:countlines}} | 1013 | \captionof{listing}{bash: \texttt{while}\label{lst:countlines}} |
1014 | \inputfile[linenos,highlightlines={13,16-17}]{bash}{countlines.sh} | ||
1115 | 1015 | ||
1116 | \paragraph{read} | 1016 | \paragraph{read} |
1117 | \label{ref:read-plus}\commande*{read} | 1017 | \label{ref:read-plus}\commande*{read} |
@@ -1180,22 +1080,8 @@ le résultat du test associé à \verb|until| devient \emph{positif} | |||
1180 | (\emph{true}). Pour prendre un exemple très simple, le script suivant, | 1080 | (\emph{true}). Pour prendre un exemple très simple, le script suivant, |
1181 | que l'on appellera \verb|roar.sh|, demande combien de fois on souhaite | 1081 | que l'on appellera \verb|roar.sh|, demande combien de fois on souhaite |
1182 | tirer la queue d'un lion: | 1082 | tirer la queue d'un lion: |
1183 | \begin{minted}[linenos]{bash} | ||
1184 | #!/bin/bash | ||
1185 | |||
1186 | read -p 'Combien de fois tirez-vous la queue du lion? ' rahtimes | ||
1187 | |||
1188 | # Définition du compteur de rugissements: | ||
1189 | rah=1 | ||
1190 | |||
1191 | until [ $rah -gt $rahtimes ] | ||
1192 | do | ||
1193 | echo "Raaaaaaaaahhhhhhhhhhhh! ($rah)" | ||
1194 | sleep 1 | ||
1195 | ((++rah)) | ||
1196 | done | ||
1197 | \end{minted} | ||
1198 | \captionof{listing}{bash: comment faire rugir le lion?} | 1083 | \captionof{listing}{bash: comment faire rugir le lion?} |
1084 | \inputfile[linenos]{bash}{rah.sh} | ||
1199 | 1085 | ||
1200 | \begin{quoting} | 1086 | \begin{quoting} |
1201 | \textbf{Commentaire:} | 1087 | \textbf{Commentaire:} |
@@ -1228,45 +1114,9 @@ trouve. Supposons par exemple que l'on écrive un programme dans lequel | |||
1228 | on souhaite limiter une action telle que la copie de | 1114 | on souhaite limiter une action telle que la copie de |
1229 | fichiers. L'instruction \verb|break| sera exécutée dès que la limite | 1115 | fichiers. L'instruction \verb|break| sera exécutée dès que la limite |
1230 | est atteinte. Appelons ce script \verb|copyten.sh|: | 1116 | est atteinte. Appelons ce script \verb|copyten.sh|: |
1231 | \begin{minted}[linenos]{bash} | ||
1232 | #!/bin/bash | ||
1233 | |||
1234 | # création du compteur de fichiers copiés. | ||
1235 | countfiles=0 | ||
1236 | |||
1237 | # On demande quels fichiers doivent être copiés. Mais avant cela, on | ||
1238 | # explique à l'utilisateur ce que fait ce programme. | ||
1239 | echo "Attention: ce programme copie au maximum 10 fichiers." | ||
1240 | read -p 'Que souhaitez-vous copier: ' files | ||
1241 | |||
1242 | # On demande la destination: | ||
1243 | read -p 'Répertoire de destination: ' dest | ||
1244 | |||
1245 | # <destination> doit être un répertoire: | ||
1246 | if [ ! -d $dest ] | ||
1247 | then | ||
1248 | echo "Erreur: la destination doit être un répertoire." | ||
1249 | echo " Le cas échéant, utilisez \"mkdir $dest\"" | ||
1250 | echo " pour créer le répertoire de destination." | ||
1251 | exit 1 | ||
1252 | else # Si <destination> est un répertoire, alors pour chaque fichier | ||
1253 | # copié on incrémente le compteur. Et dès que le compteur | ||
1254 | # atteint le chiffre de 10, on sort de la boucle. | ||
1255 | for file in $files # pour chaque fichier à copier | ||
1256 | do | ||
1257 | cp $file $dest | ||
1258 | let "countfiles = countfiles + 1" | ||
1259 | if [ $countfiles -eq 10 ] | ||
1260 | then | ||
1261 | break # sortie de la boucle | ||
1262 | fi | ||
1263 | done | ||
1264 | fi | ||
1265 | |||
1266 | echo "Terminé. 10 fichiers au maximum ont été copiés dans $dest." | ||
1267 | \end{minted} | ||
1268 | \captionof{listing}{bash: copie d'un nombre limité de | 1117 | \captionof{listing}{bash: copie d'un nombre limité de |
1269 | fichiers\label{lst:copyten}} | 1118 | fichiers\label{lst:copyten}} |
1119 | \inputfile[linenos]{bash}{copyten.sh} | ||
1270 | 1120 | ||
1271 | Ce script donne un exemple de code commenté. Comme on le voit, les | 1121 | Ce script donne un exemple de code commenté. Comme on le voit, les |
1272 | commentaires peuvent se trouver sur des lignes isolées aussi bien que | 1122 | commentaires peuvent se trouver sur des lignes isolées aussi bien que |
@@ -1304,51 +1154,9 @@ partir de l'itération suivante. C'est une façon de prévoir des | |||
1304 | exceptions. Par exemple, nous pouvons modifier le script | 1154 | exceptions. Par exemple, nous pouvons modifier le script |
1305 | \ref{lst:copyten} comme suit: | 1155 | \ref{lst:copyten} comme suit: |
1306 | 1156 | ||
1307 | \begin{minted}[linenos,highlightlines={26-31}]{bash} | ||
1308 | #!/bin/bash | ||
1309 | |||
1310 | # création du compteur de fichiers copiés. | ||
1311 | countfiles=0 | ||
1312 | |||
1313 | # On demande quels fichiers doivent être copiés. Mais avant cela, on | ||
1314 | # explique à l'utilisateur ce que fait ce programme. | ||
1315 | echo "Attention: ce programme copie au maximum 10 fichiers." | ||
1316 | read -p 'Que souhaitez-vous copier: ' files | ||
1317 | |||
1318 | # On demande la destination: | ||
1319 | read -p 'Répertoire de destination: ' dest | ||
1320 | |||
1321 | # <destination> doit être un répertoire: | ||
1322 | if [ ! -d $dest ] | ||
1323 | then | ||
1324 | echo "Erreur: la destination doit être un répertoire." | ||
1325 | echo " Le cas échéant, utilisez \"mkdir $dest\"" | ||
1326 | echo " pour créer le répertoire de destination." | ||
1327 | exit 1 | ||
1328 | else # Si <destination> est un répertoire, alors pour chaque fichier | ||
1329 | # copié on incrémente le compteur. Et dès que le compteur | ||
1330 | # atteint le chiffre de 10, on sort de la boucle. | ||
1331 | for file in $files # pour chaque fichier à copier | ||
1332 | do | ||
1333 | if [ ! -e $file ] # si le fichier à copier n'exite pas | ||
1334 | then | ||
1335 | echo "création de $file qui n'existe pas..." | ||
1336 | touch $dest/$file | ||
1337 | continue # arrêter ici et reprendre à la l. 24 | ||
1338 | fi | ||
1339 | cp $file $dest | ||
1340 | let "countfiles = countfiles + 1" | ||
1341 | if [ $countfiles -eq 10 ] | ||
1342 | then | ||
1343 | break # sortie de la boucle | ||
1344 | fi | ||
1345 | done | ||
1346 | fi | ||
1347 | |||
1348 | echo "Terminé. 10 fichiers au maximum ont été copiés dans $dest." | ||
1349 | \end{minted} | ||
1350 | \captionof{listing}{bash: copie d'un nombre limité de | 1157 | \captionof{listing}{bash: copie d'un nombre limité de |
1351 | fichiers sans échec si le fichier source n'existe pas} | 1158 | fichiers sans échec si le fichier source n'existe pas} |
1159 | \inputfile[linenos,highlightlines={26-31}]{bash}{copyten-mk2.sh} | ||
1352 | 1160 | ||
1353 | \begin{quoting} | 1161 | \begin{quoting} |
1354 | \textbf{Commentaire:} | 1162 | \textbf{Commentaire:} |
@@ -1364,7 +1172,7 @@ echo "Terminé. 10 fichiers au maximum ont été copiés dans $dest." | |||
1364 | 1172 | ||
1365 | Voici ce que donne l'exécution de ce script: | 1173 | Voici ce que donne l'exécution de ce script: |
1366 | \begin{minted}{text} | 1174 | \begin{minted}{text} |
1367 | [robert@kiddo courses]$ ./copyten.sh | 1175 | [robert@kiddo courses]$ ./copyten-mk2.sh |
1368 | Attention: ce programme copie au maximum 10 fichiers. | 1176 | Attention: ce programme copie au maximum 10 fichiers. |
1369 | Que souhaitez-vous copier: tchic.txt | 1177 | Que souhaitez-vous copier: tchic.txt |
1370 | Répertoire de destination: Houba | 1178 | Répertoire de destination: Houba |
@@ -1401,34 +1209,9 @@ rien entre les parenthèses qui sont purement décoratives. | |||
1401 | 1209 | ||
1402 | Le script suivant permet de parvenir au même résultat que le script | 1210 | Le script suivant permet de parvenir au même résultat que le script |
1403 | qui a été présenté dans le \vref{lst:countlines}: | 1211 | qui a été présenté dans le \vref{lst:countlines}: |
1404 | \begin{minted}[linenos]{bash} | ||
1405 | #!/bin/bash | ||
1406 | |||
1407 | echo "Entrez le nom du fichier dont vous voulez compter les lignes:" | ||
1408 | read -p 'Fichier: ' file | ||
1409 | |||
1410 | countlines () { | ||
1411 | cat $1 | wc -l | ||
1412 | } | ||
1413 | |||
1414 | if [ ! -e $file ] || [ -z $file ] | ||
1415 | then | ||
1416 | echo "Erreur: le fichier $file n'existe pas." | ||
1417 | exit 1 | ||
1418 | else | ||
1419 | numline=$(countlines $file) | ||
1420 | fi | ||
1421 | |||
1422 | if [ $numline -le 1 ] | ||
1423 | then | ||
1424 | echo "Votre fichier $file compte $numline ligne." | ||
1425 | else | ||
1426 | echo "Votre fichier $file compte $numline lignes." | ||
1427 | fi | ||
1428 | \end{minted} | ||
1429 | \enlargethispage{2\baselineskip} | ||
1430 | \captionof{listing}{bash: exemple de | 1212 | \captionof{listing}{bash: exemple de |
1431 | fonction\label{lst:countlines-mk2}} | 1213 | fonction\label{lst:countlines-mk2}} |
1214 | \inputfile[linenos]{bash}{countlines-mk2.sh} | ||
1432 | 1215 | ||
1433 | Pour terminer, exécutons cette nouvelle version de notre script | 1216 | Pour terminer, exécutons cette nouvelle version de notre script |
1434 | ici appelée \verb|countlines-mk2.sh|: | 1217 | ici appelée \verb|countlines-mk2.sh|: |
diff --git a/fichiers/scripts/animal.sh b/fichiers/scripts/animal.sh new file mode 100644 index 0000000..668d4ed --- /dev/null +++ b/fichiers/scripts/animal.sh | |||
@@ -0,0 +1,16 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | echo "Entre le chien et le chat, quel est votre animal préféré?" | ||
4 | read -p 'Saisissez votre réponse: ' animal | ||
5 | |||
6 | case $animal in | ||
7 | [Cc]hien) | ||
8 | echo "Vous avez bien raison, le chien est le meilleur ami de l'homme." | ||
9 | ;; | ||
10 | [Cc]hat) | ||
11 | echo "Après le chien, c'était un en effet un choix possible." | ||
12 | ;; | ||
13 | *) | ||
14 | echo "Faites un effort, vous n'avez pas compris la question." | ||
15 | ;; | ||
16 | esac | ||
diff --git a/fichiers/scripts/backup-mk2.sh b/fichiers/scripts/backup-mk2.sh new file mode 100644 index 0000000..61eb824 --- /dev/null +++ b/fichiers/scripts/backup-mk2.sh | |||
@@ -0,0 +1,25 @@ | |||
1 | #!/bin/bash | ||
2 | echo "Veuillez choisir l'extension des fichiers à sauvegarder" | ||
3 | echo "(sans le point):" | ||
4 | read -p 'extension: ' ext | ||
5 | echo "Veuillez choisir le nom du dossier de sauvegarde:" | ||
6 | read -p 'dossier: ' backupdir | ||
7 | if [ -d "$backupdir" ] | ||
8 | then | ||
9 | echo "Le dossier $backupdir existe déjà. Veuillez relancer le" | ||
10 | echo "programme et saisir un autre nom." | ||
11 | exit 1 | ||
12 | elif [ -e "$backupdir".zip ] | ||
13 | then | ||
14 | echo "L'archive $backupdir.zip existe déjà. Veuillez la supprimer" | ||
15 | echo "ou la déplacer en dehors de ce dossier, puis relancez le" | ||
16 | echo "programme." | ||
17 | exit 1 | ||
18 | else | ||
19 | mkdir "$backupdir" | ||
20 | fi | ||
21 | cp *.$ext "$backupdir" | ||
22 | nbre=$(ls $backupdir/*.$ext | wc -l) | ||
23 | zip -r "$backupdir".zip "$backupdir" | ||
24 | echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" | ||
25 | echo "et l'archive $backupdir.zip a été créée." | ||
diff --git a/fichiers/scripts/backup.sh b/fichiers/scripts/backup.sh new file mode 100644 index 0000000..3f7e109 --- /dev/null +++ b/fichiers/scripts/backup.sh | |||
@@ -0,0 +1,19 @@ | |||
1 | #!/bin/bash | ||
2 | echo "Veuillez choisir l'extension des fichiers à sauvegarder" | ||
3 | echo "(sans le point):" | ||
4 | read -p 'extension: ' ext | ||
5 | echo "Veuillez choisir le nom du dossier de sauvegarde:" | ||
6 | read -p 'dossier: ' backupdir | ||
7 | if [ -d "$backupdir" ] | ||
8 | then | ||
9 | echo "Le dossier $backupdir existe déjà. Veuillez relancer le" | ||
10 | echo "programme et saisir un autre nom." | ||
11 | exit 1 | ||
12 | else | ||
13 | mkdir "$backupdir" | ||
14 | fi | ||
15 | cp *.$ext "$backupdir" | ||
16 | nbre=$(ls $backupdir/*.$ext | wc -l) | ||
17 | zip -r "$backupdir".zip "$backupdir" | ||
18 | echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" | ||
19 | echo "et l'archive $backupdir.zip a été créée." | ||
diff --git a/fichiers/scripts/copyten-mk2.sh b/fichiers/scripts/copyten-mk2.sh new file mode 100644 index 0000000..2d51739 --- /dev/null +++ b/fichiers/scripts/copyten-mk2.sh | |||
@@ -0,0 +1,41 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | # création du compteur de fichiers copiés. | ||
4 | countfiles=0 | ||
5 | |||
6 | # On demande quels fichiers doivent être copiés. Mais avant cela, on | ||
7 | # explique à l'utilisateur ce que fait ce programme. | ||
8 | echo "Attention: ce programme copie au maximum 10 fichiers." | ||
9 | read -p 'Que souhaitez-vous copier: ' files | ||
10 | |||
11 | # On demande la destination: | ||
12 | read -p 'Répertoire de destination: ' dest | ||
13 | |||
14 | # <destination> doit être un répertoire: | ||
15 | if [ ! -d $dest ] | ||
16 | then | ||
17 | echo "Erreur: la destination doit être un répertoire." | ||
18 | echo " Le cas échéant, utilisez \"mkdir $dest\"" | ||
19 | echo " pour créer le répertoire de destination." | ||
20 | exit 1 | ||
21 | else # Si <destination> est un répertoire, alors pour chaque fichier | ||
22 | # copié on incrémente le compteur. Et dès que le compteur | ||
23 | # atteint le chiffre de 10, on sort de la boucle. | ||
24 | for file in $files # pour chaque fichier à copier | ||
25 | do | ||
26 | if [ ! -e $file ] # si le fichier à copier n'exite pas | ||
27 | then | ||
28 | echo "création de $file qui n'existe pas..." | ||
29 | touch $dest/$file | ||
30 | continue # arrêter ici et reprendre à la l. 24 | ||
31 | fi | ||
32 | cp $file $dest | ||
33 | let "countfiles = countfiles + 1" | ||
34 | if [ $countfiles -eq 10 ] | ||
35 | then | ||
36 | break # sortie de la boucle | ||
37 | fi | ||
38 | done | ||
39 | fi | ||
40 | |||
41 | echo "Terminé. 10 fichiers au maximum ont été copiés dans $dest." | ||
diff --git a/fichiers/scripts/copyten.sh b/fichiers/scripts/copyten.sh new file mode 100644 index 0000000..59a7dda --- /dev/null +++ b/fichiers/scripts/copyten.sh | |||
@@ -0,0 +1,35 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | # création du compteur de fichiers copiés. | ||
4 | countfiles=0 | ||
5 | |||
6 | # On demande quels fichiers doivent être copiés. Mais avant cela, on | ||
7 | # explique à l'utilisateur ce que fait ce programme. | ||
8 | echo "Attention: ce programme copie au maximum 10 fichiers." | ||
9 | read -p 'Que souhaitez-vous copier: ' files | ||
10 | |||
11 | # On demande la destination: | ||
12 | read -p 'Répertoire de destination: ' dest | ||
13 | |||
14 | # <destination> doit être un répertoire: | ||
15 | if [ ! -d $dest ] | ||
16 | then | ||
17 | echo "Erreur: la destination doit être un répertoire." | ||
18 | echo " Le cas échéant, utilisez \"mkdir $dest\"" | ||
19 | echo " pour créer le répertoire de destination." | ||
20 | exit 1 | ||
21 | else # Si <destination> est un répertoire, alors pour chaque fichier | ||
22 | # copié on incrémente le compteur. Et dès que le compteur | ||
23 | # atteint le chiffre de 10, on sort de la boucle. | ||
24 | for file in $files # pour chaque fichier à copier | ||
25 | do | ||
26 | cp $file $dest | ||
27 | let "countfiles = countfiles + 1" | ||
28 | if [ $countfiles -eq 10 ] | ||
29 | then | ||
30 | break # sortie de la boucle | ||
31 | fi | ||
32 | done | ||
33 | fi | ||
34 | |||
35 | echo "Terminé. 10 fichiers au maximum ont été copiés dans $dest." | ||
diff --git a/fichiers/scripts/countlines-mk2.sh b/fichiers/scripts/countlines-mk2.sh new file mode 100644 index 0000000..73a87a7 --- /dev/null +++ b/fichiers/scripts/countlines-mk2.sh | |||
@@ -0,0 +1,23 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | echo "Entrez le nom du fichier dont vous voulez compter les lignes:" | ||
4 | read -p 'Fichier: ' file | ||
5 | |||
6 | countlines () { | ||
7 | cat $1 | wc -l | ||
8 | } | ||
9 | |||
10 | if [ ! -e $file ] || [ -z $file ] | ||
11 | then | ||
12 | echo "Erreur: le fichier $file n'existe pas." | ||
13 | exit 1 | ||
14 | else | ||
15 | numline=$(countlines $file) | ||
16 | fi | ||
17 | |||
18 | if [ $numline -le 1 ] | ||
19 | then | ||
20 | echo "Votre fichier $file compte $numline ligne." | ||
21 | else | ||
22 | echo "Votre fichier $file compte $numline lignes." | ||
23 | fi | ||
diff --git a/fichiers/scripts/countlines.sh b/fichiers/scripts/countlines.sh new file mode 100644 index 0000000..3f7826f --- /dev/null +++ b/fichiers/scripts/countlines.sh | |||
@@ -0,0 +1,25 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | echo "Entrez le nom du fichier dont vous voulez compter les lignes:" | ||
4 | read -p 'Fichier: ' file | ||
5 | |||
6 | numline=0 | ||
7 | |||
8 | if [ ! -e $file ] || [ -z $file ] | ||
9 | then | ||
10 | echo "Erreur: le fichier $file n'existe pas." | ||
11 | exit 1 | ||
12 | else | ||
13 | while read -r line | ||
14 | # 'let' permet de poser des opérations arithmétiques; | ||
15 | # à la place, on aurait pu écrire: do ((++numline)) | ||
16 | do let "numline = numline + 1" | ||
17 | done < $file | ||
18 | fi | ||
19 | |||
20 | if [ $numline -le 1 ] | ||
21 | then | ||
22 | echo "Votre fichier $file compte $numline ligne." | ||
23 | else | ||
24 | echo "Votre fichier $file compte $numline lignes." | ||
25 | fi | ||
diff --git a/fichiers/scripts/greaterthan.sh b/fichiers/scripts/greaterthan.sh new file mode 100644 index 0000000..e79921e --- /dev/null +++ b/fichiers/scripts/greaterthan.sh | |||
@@ -0,0 +1,11 @@ | |||
1 | #!/bin/bash | ||
2 | if [ $1 -gt 10 ] | ||
3 | then | ||
4 | echo "$1 est supérieur à 10" | ||
5 | if [ $1 -gt 100 ] | ||
6 | then | ||
7 | echo "et $1 est même supérieur à 100!" | ||
8 | fi | ||
9 | else | ||
10 | echo "Il faut aller au-dessus de 10 pour avoir une réponse!" | ||
11 | fi | ||
diff --git a/fichiers/scripts/rah.sh b/fichiers/scripts/rah.sh new file mode 100644 index 0000000..9219e0a --- /dev/null +++ b/fichiers/scripts/rah.sh | |||
@@ -0,0 +1,13 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | read -p 'Combien de fois tirez-vous la queue du lion? ' rahtimes | ||
4 | |||
5 | # Définition du compteur de rugissements: | ||
6 | rah=1 | ||
7 | |||
8 | until [ $rah -gt $rahtimes ] | ||
9 | do | ||
10 | echo "Raaaaaaaaahhhhhhhhhhhh! ($rah)" | ||
11 | sleep 1 | ||
12 | ((++rah)) | ||
13 | done | ||
diff --git a/fichiers/scripts/tiff2png.sh b/fichiers/scripts/tiff2png.sh new file mode 100644 index 0000000..64b97f0 --- /dev/null +++ b/fichiers/scripts/tiff2png.sh | |||
@@ -0,0 +1,4 @@ | |||
1 | #!/bin/bash | ||
2 | for file in $(basename -s .tiff $(ls *.tiff)) | ||
3 | do convert "$file".tiff "$file".png | ||
4 | done | ||
@@ -12,9 +12,8 @@ pdf: clean | |||
12 | clean: | 12 | clean: |
13 | rm -rf .backup | 13 | rm -rf .backup |
14 | find -iname "*~" | xargs rm -rf | 14 | find -iname "*~" | xargs rm -rf |
15 | find ./* -type f | grep 'makefile\|\.md$$\|\.png$$\|\.bib$$\|\.tex$$' > ls-R | 15 | find ./* -type f | grep 'makefile\|\.md$$\|\.png$$\|\.sh$$\|\.bib$$\|\.tex$$' > ls-R |
16 | rsync -avPr --files-from=ls-R . .backup | 16 | rsync -avPr --files-from=ls-R . .backup |
17 | # cp ls-R .backup | ||
18 | rm -rf * | 17 | rm -rf * |
19 | cp -p -r .backup/* . | 18 | cp -p -r .backup/* . |
20 | rm -rf .backup | 19 | rm -rf .backup |