From 50b0c03236f63fb25f40c47d204eeacbaf9b5d69 Mon Sep 17 00:00:00 2001 From: jerome Date: Sun, 14 Apr 2024 17:04:20 +0200 Subject: numerotation des fichiers --- exemple01 | 27 ++++++++++++++++++++ exemple02 | 17 +++++++++++++ exemple03 | 39 +++++++++++++++++++++++++++++ exemple04 | 44 +++++++++++++++++++++++++++++++++ exemple05 | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ exemple06 | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++ exemple07 | 46 ++++++++++++++++++++++++++++++++++ exemple08 | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ exemple09 | 45 +++++++++++++++++++++++++++++++++ 9 files changed, 452 insertions(+) create mode 100755 exemple01 create mode 100755 exemple02 create mode 100755 exemple03 create mode 100755 exemple04 create mode 100755 exemple05 create mode 100755 exemple06 create mode 100755 exemple07 create mode 100755 exemple08 create mode 100755 exemple09 diff --git a/exemple01 b/exemple01 new file mode 100755 index 0000000..66b82e4 --- /dev/null +++ b/exemple01 @@ -0,0 +1,27 @@ + + +### Affiche Hello World ### +echo "Hello World !" + +### Affiche une variable qu'on déclare préalablement ### +### Les noms des variables ne peuvent comprendre que des minuscules ou des majuscules, des nombres ou des underscores, mais ne doivent ni commencer par un nombre, ni par un underscore ! +message="World" +echo "Hello $message !" + +### Affiche la substitution d'une commande ### +echo "Hello $(whoami) !" + +### Affiche une variable saisie par l'utilisateur ### +read -p "Quel est votre nom ? " nom +echo "Hello $nom !" +read -sp "Choisissez un mot de passe : " password +echo "Votre mot de passe $password a bien été pris en compte..." + +# help read +# si on ne précise pas le nom de la variable, c'est $REPLY qui contient la saisie de l'utilisateur: +read -p "Vas-y, dis-moi quelque chose : " +echo "tu m'as dit $REPLY" + +# help printf - alternative à echo +printf "je m'appelle %s et j'ai %d ans\n" bob 10 + diff --git a/exemple02 b/exemple02 new file mode 100755 index 0000000..12b68ed --- /dev/null +++ b/exemple02 @@ -0,0 +1,17 @@ +#/usr/bin/bash + +# calculs arythmétiques +a=2 +b=5 +# addition +c=$((a+b)) +echo $c +# incrémentation +((c++)) +echo $c +# entier négatif +c=$((a-b)) +echo $c +# division entière +c=$((b/a)) +echo $c diff --git a/exemple03 b/exemple03 new file mode 100755 index 0000000..0e06c2a --- /dev/null +++ b/exemple03 @@ -0,0 +1,39 @@ +#!/usr/bin/bash + +mot1=hello +mot2=World + +#longueur de la chaîne +echo $mot1 a ${#mot1} lettres +echo $mot2 a ${#mot2} lettres +echo + +# concaténation +concat=$mot1$mot2 +echo $concat +#ou +concat=$mot1 +concat+=$mot2 +echo $concat +echo +echo $concat a ${#concat} lettres +echo + +# phrase +phrase="$mot1 $mot2 !" +echo "\"$phrase\" a ${#phrase} lettres (y compris les espaces)" +echo + +# substitution +echo ${concat/h/H} +echo ${phrase/World/le monde} + +# suppression +echo ${phrase/World} + +# extraction ${string, position, longueur} +# extraction du mot2 : a partir de la sixième lettre (l'index commence à 0) +echo ${concat:5:${#mot2}} +# extraction de la dernière lettre +echo ${concat:${#concat}-1:1} + diff --git a/exemple04 b/exemple04 new file mode 100755 index 0000000..570ef16 --- /dev/null +++ b/exemple04 @@ -0,0 +1,44 @@ +#!/usr/bin/bash + +# La variable spéciale $? renvoie le code de sortie de la dernière commande : 0 si la commande s'est bien passée ou différent de 0 si la commande a échoué. + +# Exemple avec la primitive du shell test +# help test + +# teste l'existence d'un répertoire "repert" +test -d repert +echo $? + +# teste l'existence d'un fichier régulier "fichier" +test -f fichier +echo $? + +# Les enchaînements conditionnels (qui se basent sur le code de sortie) : + +# le "Et logique" : && +test -f fichier && echo "le fichier existe" + +# le "Ou logique" : || +test -f fichier || echo "le fichier n'existe pas" + +# Enchaînement des deux: +test -d repert && echo "le répertoire existe" || echo "le répertoire n'existe pas" +# repert n'existe pas, on le créé et ensuite on se déplace dedans... +test -d repert || mkdir repert && cd repert +pwd +cd - +test -d repert && echo "le répertoire existe" || echo "le répertoire n'existe pas" +# repert existe, on ne le créé pas et on se déplace dedans... +test -d repert || mkdir repert && cd repert +pwd +cd - +rmdir repert +echo + +### Affiche les arguments postionnels de la ligne de commande du script ### +### $1, $2, $3... $* (ou $@) pour tous les arguments ### +### le script s'appelle $0 et a $# arguments ### +test $# -lt 1 && echo "$(basename $0) demande un ou plusieurs arguments" || echo "Hello $* !" + + + diff --git a/exemple05 b/exemple05 new file mode 100755 index 0000000..72ef4f8 --- /dev/null +++ b/exemple05 @@ -0,0 +1,79 @@ +#!/usr/bin/bash +set -x +# Comparaison if,elif,else,fi avec la primitive test +# help if +read -p "Entrez un nombre positif ou négatif : " nb + +if test "$nb" -lt 0; then + echo "$nb est négatif" +elif test "$nb" -eq 0; then + echo "$nb est nul" +else + echo "$nb est positif" +fi + +# Idem avec [ ] syntaxe alternative à test +# help [ +if [ "$nb" -lt 0 ]; then + echo "$nb est négatif" +elif [ "$nb" -eq 0 ]; then + echo "$nb est nul" +else + echo "$nb est positif" +fi + +# Avec and (-a) et or (-o) +# Pour les besoins de l'exemple : on aurait pu bien sûr utiliser la syntaxe "-le" +if [ "$nb" -lt 0 -o "$nb" -eq 0 ]; then + echo "$nb est inférieur ou égal à zéro" +else + echo "$nb est positif" +fi + +# palindrome +# man rev +# man tr +read -p "Choisis un palindrome : " rep +pal=$(echo $rep|tr [A-Z] [a-z]) +if [ $(echo $pal|rev) = $pal ]; then + echo "$rep est un palindrome" +else + echo "$rep n'est pas un palindrome" +fi + +# comparaison avec le code de sortie d'une commande linux +read -p "Entrez le nom d'un utilisateur : " utilisateur + +if who |grep -q $utilisateur ; then + echo "$utilisateur est connecté" +else + echo "$utilisateur n'est pas connecté" +fi + +# Alternative à plusieurs elif... +# help case +read -p "Quelle distribution préfères-tu entre Ubuntu, Fedora ou Manjaro ? " distro +case $distro in + Ubuntu) + echo "Tu es plutôt adepte de la famille Debian";; + Fedora) + echo "Tu es plutôt adepte de la famille RedHat";; + Manjaro) + echo "Tu es plutôt adepte de la famille ArchLinux";; + *) + echo "Connais pas !" +esac + +# Cette syntaxe accepte aussi un ou logique '|' et des motifs comme []... +case $distro in + [uU]buntu) + echo "Tu es plutôt adepte de la famille Debian";; + [fF][eE][dD][oO][rR][aA]) + echo "Tu es plutôt adepte de la famille RedHat";; + Manjaro|manjaro) + echo "Tu es plutôt adepte de la famille ArchLinux";; + *) + echo "Connais pas !" +esac + + diff --git a/exemple06 b/exemple06 new file mode 100755 index 0000000..94523f5 --- /dev/null +++ b/exemple06 @@ -0,0 +1,70 @@ +#!/usr/bin/bash + +read -p "Entre une table de multiplication : " nb + +# boucle while (tant que) +# help while +i=1 +while [ $i -lt 10 ] ;do + echo "$i x $nb = $((i*nb))" + ((i++)) +done + +# boucle until (jusqu'à ce que) +# help until +i=1 +until [ $i -gt 9 ] ;do + echo "$i x $nb = $((i*nb))" + ((i++)) +done + +# palindrome (sans la commande rev) +# voir exemple3 +read -p "Choisisez un palindrome : " rep +pal=$(echo $rep|tr [A-Z] [a-z]) +i=${#pal} +while [ "$i" -gt 0 ] ; do + rev+=${pal:$i-1:1} + ((i--)) +done +echo "L'inverse de $pal est $rev" +if [ $rev = $pal ]; then + echo "$rep est un palindrome" +else + echo "$rep n'est pas un palindrome" +fi +echo + +# Avec le code de sortie d'une commande Linux +read -p "Entrez le nom d'un utilisateur : " utilisateur +while who | grep -q $utilisateur ; do + echo "$utilisateur est connecté" + sleep 5 +done +echo "$utilisateur s'est déconnecté" + +# while true +# break et continue... +# help break +# help continue +i=0 +while true; do + ((i++)) + if [ "$i" -eq 5 ]; then + continue + elif [ "$i" -eq 10 ]; then + break + fi + echo "$i" + sleep 1 +done + +# while et shift : décalage des aguments positionnels ! +if [ "$#" -gt 0 ];then +while [ "$1" != "" ];do + echo "Hello $1" + shift +done +else + echo "Pas d'argument passé au script" +fi diff --git a/exemple07 b/exemple07 new file mode 100755 index 0000000..89c4d88 --- /dev/null +++ b/exemple07 @@ -0,0 +1,46 @@ +#!/usr/bin/bash + +# le mot clé [[ +# help [[ +# [[ est une amélioration bash de la primitive [. Il comporte plusieurs améliorations qui en font un meilleur choix si vous écrivez des scripts ciblant bash, notamment : +# il gère les chaînes vides et les chaînes avec des espaces de manière plus intuitive (plus besoin d'entourer les variables non initialisées de guillemets...) +# il permet d'utiliser les opérateurs && et || pour les tests et < et > pour les comparaisons de chaînes +# il possède un opérateur =~ pour effectuer des correspondances d'expressions régulières. + +# Exemple complètement objectif... +# voir la négation '!' +# attention, ne pas utiliser les guillements ou les apostrophes pour les regexps qui les transforment en chaînes litérales ! +while [[ ! $os =~ [lL]inux ]]; do + read -p "Quel est le meilleur os ? " os +done +unset os +echo "Encore une fois !" +until [[ $os =~ [lL]inux ]]; do + read -p "Quel est le meilleur os ? " os +done + +for arg in $@;do + echo "Hello $arg" +done +echo + +# jeu du nombre mystérieux : +#set -x +echo " ---------------------- " +echo "< Jeu du Nombre Mystère >" +echo " ---------------------- " + secret=$(( RANDOM % 100 +1 )) + nb=0 + while [[ $secret != $reponse ]] + do + ((nb++)) + read -p "Entrez un nombre entre 0 et 100 : " reponse + if [[ ! $reponse =~ ^[0-9]+$ || $reponse -gt 100 || $reponse -le 0 ]] ; then + echo "Hors de l'intervalle !" + elif [[ $reponse -gt $secret ]]; then + echo "Trop grand !" + elif [[ $reponse -lt $secret ]]; then + echo "Trop petit !" + fi + done + echo "Gagné en $nb coups !" diff --git a/exemple08 b/exemple08 new file mode 100755 index 0000000..58aa59a --- /dev/null +++ b/exemple08 @@ -0,0 +1,85 @@ +#!/usr/bin/bash + +# boucle for +# help for +# parcourir une liste d'éléments +for os in windows linux mac ; do + echo $os +done +echo + +# avec les arguments du script +if [ "$#" -gt 0 ]; then + for arg in $@; do + echo $arg + done +else + echo "Pas d'argument passé au script !" +fi +echo + +# {debut..fin..pas} +for i in {0..10..2} ; do + echo $i +done +echo + +#multiplication +read -p "Entrez une table de multiplication : " multiplicateur +for i in {1..10}; do + echo "$i x $multiplicateur = $((i*multiplicateur))" +done +echo + +# palindrome (sans la commande rev) +# voir exemple3 +# en utilisant la syntaxe du C : (( ; ; )) . Permet d'utiliser des variables +read -p "Choisisez un palindrome : " rep +pal=$(echo $rep|tr [A-Z] [a-z]) +for ((i = 0; i <= ${#pal} ; i++)); do + rev=${pal:$i:1}$rev +done +echo "L'inverse de $pal est $rev" +if [ $rev = $pal ]; then + echo "$rep est un palindrome" +else + echo "$rep n'est pas un palindrome" +fi +echo + +# commandes sur des fichiers +for fichier in * ; do + wc -l $fichier +done +echo + +# écrire et lire un fichier +cat > fichier << EOF +première ligne +deuxième ligne +troisième ligne +EOF +monfichier=$(cat fichier) +for ligne in $monfichier; do + echo $ligne +done +echo + +# IFS : Internal Field separator par défaut : nouvelle ligne, tabulation, espace + +IFS=$'\n' +for ligne in $monfichier; do + echo $ligne +done +echo +unset IFS +rm fichier + +# taches parallèles en arrière plan : +for i in {1..254}; do + ip=192.168.2.$i + ping -c1 $ip >/dev/null && echo $ip : ok & +done +wait + + diff --git a/exemple09 b/exemple09 new file mode 100755 index 0000000..0cf8018 --- /dev/null +++ b/exemple09 @@ -0,0 +1,45 @@ +#!/usr/bin/bash + +# la boucle select +# help select + +PS3="Quel est ton os préféré ? " +select os in windows mac linux +do + echo $os + break +done +echo +PS3="Que veux-tu savoir ? " +select cmd in 'version du noyau' 'uptime du serveur' 'derniers utilisateurs connectés' quitter +do + case $cmd in + 'version du noyau') + uname -a;; + 'uptime du serveur') + uptime;; + 'derniers utilisateurs connectés') + last|head;; + quitter) + echo "bye" + break;; + esac +done +echo +# ou on peut utiliser $REPLY +echo "Encore une fois !" +echo +select cmd in 'version du noyau' 'uptime du serveur' 'derniers utilisateurs connectés' 'q pour quitter' +do + case $REPLY in + 1) + uname -a;; + 2) + uptime;; + 3) + last|head;; + 4|q|Q) + echo "bye" + exit;; + esac +done -- cgit v1.2.3