diff options
author | Robert Alessi <alessi@robertalessi.net> | 2018-09-22 19:53:36 +0200 |
---|---|---|
committer | Robert Alessi <alessi@robertalessi.net> | 2018-09-22 19:53:36 +0200 |
commit | b073ee4af2b029ae7d3167c13352199c7ccb9628 (patch) | |
tree | e01beefe0fa1f1d6de8d0dced8ac8fcda864fdc2 /fichiers | |
parent | 645898a86597b111c9e6ea1f1467010adb8816ac (diff) | |
download | courses-b073ee4af2b029ae7d3167c13352199c7ccb9628.tar.gz |
03-grep-bash.tex: booleans
Diffstat (limited to 'fichiers')
-rw-r--r-- | fichiers/03-grep-bash.tex | 102 |
1 files changed, 100 insertions, 2 deletions
diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index e4b6a71..3b685e3 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex | |||
@@ -759,6 +759,7 @@ echo "Terminé. $0 a copié $nbre fichiers .$ext dans $backupdir" | |||
759 | echo "et l'archive $backupdir.zip a été créée." | 759 | echo "et l'archive $backupdir.zip a été créée." |
760 | \end{minted} | 760 | \end{minted} |
761 | \caption{bash: instruction \texttt{elif}} | 761 | \caption{bash: instruction \texttt{elif}} |
762 | \label{lst:elif} | ||
762 | \end{listing} | 763 | \end{listing} |
763 | 764 | ||
764 | \subsection{Tests} | 765 | \subsection{Tests} |
@@ -847,8 +848,8 @@ la différence d'autres langages qui ont recours soit à des | |||
847 | déclarations explicites telles que \verb|begin ... end| ou encore à | 848 | déclarations explicites telles que \verb|begin ... end| ou encore à |
848 | des opérateurs tels que \verb|{ ... }| | 849 | des opérateurs tels que \verb|{ ... }| |
849 | 850 | ||
850 | Voici un exemple d'une structure dans laquelle on a placé une | 851 | Voici un exemple d'indentation d'une structure dans laquelle on a |
851 | condition à l'intérieur d'une autre condition: | 852 | placé une condition à l'intérieur d'une autre condition: |
852 | \begin{listing}[H] | 853 | \begin{listing}[H] |
853 | \begin{minted}[linenos]{bash} | 854 | \begin{minted}[linenos]{bash} |
854 | #!/bin/bash | 855 | #!/bin/bash |
@@ -866,6 +867,103 @@ fi | |||
866 | \caption{bash: exemple d'indentation} | 867 | \caption{bash: exemple d'indentation} |
867 | \end{listing} | 868 | \end{listing} |
868 | 869 | ||
870 | \subsection{Opérateurs booléens} | ||
871 | \label{sec:operateurs-booleens} | ||
872 | Les opérateurs booléens, dont le nom est tiré du mathématicien anglais | ||
873 | George Boole, sont des opérateurs logiques que l'on peut associer à | ||
874 | des conditions. En voici deux ici: | ||
875 | \begin{enumerate} | ||
876 | \item \verb+||+ pour \emph{ou}; | ||
877 | \item \verb|&&| pour \emph{et}. | ||
878 | \end{enumerate} | ||
879 | |||
880 | Par exemple, dans le \vref{lst:elif} ci-dessus, on pourrait remplacer | ||
881 | les lignes 7--20 par le code ci-dessous: | ||
882 | \begin{minted}[linenos]{bash} | ||
883 | if [ -d "$backupdir" ] || [ -e "$backupdir".zip ] | ||
884 | then | ||
885 | echo "Le dossier $backupdir et/ou l'archive $backupdir.zip" | ||
886 | echo "existent déjà. Veuillez relancer le programme et saisir" | ||
887 | echo "un autre nom." | ||
888 | exit 1 | ||
889 | else | ||
890 | mkdir "$backupdir" | ||
891 | fi | ||
892 | \end{minted} | ||
893 | |||
894 | \subsection{case} | ||
895 | \label{sec:case} | ||
896 | \verb|case| est une instruction qui permet d'exécuter différentes | ||
897 | actions en fonction de la valeur d'une variable. Elle est intéressante | ||
898 | à étudier ici car elle fait appel à la fois à la notion de variable et | ||
899 | aux expressions régulières. La syntaxe est la suivante: | ||
900 | \begin{minted}[linenos,escapeinside=||]{text} | ||
901 | case |\emph{variable}| in | ||
902 | |\emph{regexpr1}|) | ||
903 | |\emph{commandes ...}| | ||
904 | ;; | ||
905 | |\emph{regexpr2}|) | ||
906 | |\emph{commandes ...}| | ||
907 | ;; | ||
908 | esac | ||
909 | \end{minted} | ||
910 | \begin{quoting} | ||
911 | \textbf{Commentaire:} | ||
912 | \begin{enumerate} | ||
913 | \item L'instruction \verb|case| se termine par \verb|esac|, de même, | ||
914 | comme on l'a vu, que l'expression \verb|if| se termine par | ||
915 | \verb|fi|. | ||
916 | \item Les expressions régulières sont suivies d'une parenthèse | ||
917 | fermante. | ||
918 | \item Pour passer d'un jeu de commande au jeu suivant, on écrit, sur | ||
919 | une ligne \verb|;;| | ||
920 | \end{enumerate} | ||
921 | \end{quoting} | ||
922 | |||
923 | Voici un exemple facile à comprendre: | ||
924 | \begin{minted}[linenos]{bash} | ||
925 | #!/bin/bash | ||
926 | |||
927 | echo "Entre le chien et le chat, quel est votre animal préféré?" | ||
928 | read -p 'Saisissez votre réponse: ' animal | ||
929 | |||
930 | case $animal in | ||
931 | [Cc]hien) | ||
932 | echo "Vous avez bien raison, le chien est le meilleur ami de l'homme." | ||
933 | ;; | ||
934 | [Cc]hat) | ||
935 | echo "Après le chien, c'était un en effet un choix possible." | ||
936 | ;; | ||
937 | *) | ||
938 | echo "Faites un effort, vous n'avez pas compris la question." | ||
939 | ;; | ||
940 | esac | ||
941 | \end{minted} | ||
942 | \begin{quoting} | ||
943 | \textbf{Commentaire:} | ||
944 | \begin{enumerate} | ||
945 | \item À la ligne 4, l'utilisateur est invité à entrer une | ||
946 | réponse. L'instruction \verb|read| associe la réponse à la | ||
947 | variable \verb|animal|. | ||
948 | \item À la ligne 6, l'instruction \verb|case| reprend la variable | ||
949 | qui est donc préfixée par le signe \verb|$|. | ||
950 | \item Aux lignes 7 et 10, on permet à l'utilisateur d'entrer soit le | ||
951 | mot \emph{chien}, soit le mot \emph{chat}. L'initiale peut être | ||
952 | une minuscule ou une majuscule. | ||
953 | \item À la ligne 13, comme le signe \verb|*| est en \emph{bash} le | ||
954 | \emph{wildcard} qui représente toute séquence de caractères, la | ||
955 | commande de la ligne~14 sera forcément exécutée si les tests des | ||
956 | lignes~7 et~10 ont échoué. | ||
957 | \end{enumerate} | ||
958 | \end{quoting} | ||
959 | |||
960 | \begin{quoting} | ||
961 | \textbf{Remarque:} à la place de l'instruction \verb|case|, on | ||
962 | recommande aujourd'hui d'utiliser une nouvelle instruction, | ||
963 | \verb|switch|, dont la syntaxe, plus complexe, n'est pas étudiée | ||
964 | ici. | ||
965 | \end{quoting} | ||
966 | |||
869 | \hfill\verb|../..| à suivre | 967 | \hfill\verb|../..| à suivre |
870 | 968 | ||
871 | \end{document} | 969 | \end{document} |