From f472fe2ffb102bca3aa9d191fb728e563148f8ba Mon Sep 17 00:00:00 2001 From: jerome Date: Thu, 7 Mar 2024 17:06:12 +0100 Subject: commit initial --- exemple1 | 23 +++++++++++++++++++ exemple10 | 39 ++++++++++++++++++++++++++++++++ exemple2 | 17 ++++++++++++++ exemple3 | 30 +++++++++++++++++++++++++ exemple4 | 41 ++++++++++++++++++++++++++++++++++ exemple5 | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ exemple6 | 48 ++++++++++++++++++++++++++++++++++++++++ exemple7 | 41 ++++++++++++++++++++++++++++++++++ exemple8 | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ exemple9 | 45 +++++++++++++++++++++++++++++++++++++ 10 files changed, 435 insertions(+) create mode 100755 exemple1 create mode 100755 exemple10 create mode 100755 exemple2 create mode 100755 exemple3 create mode 100755 exemple4 create mode 100755 exemple5 create mode 100755 exemple6 create mode 100755 exemple7 create mode 100755 exemple8 create mode 100755 exemple9 diff --git a/exemple1 b/exemple1 new file mode 100755 index 0000000..5b3b0af --- /dev/null +++ b/exemple1 @@ -0,0 +1,23 @@ +#!/usr/bin/bash + +### 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" diff --git a/exemple10 b/exemple10 new file mode 100755 index 0000000..b9bddbf --- /dev/null +++ b/exemple10 @@ -0,0 +1,39 @@ +#!/usr/bin/bash + +function hello1 { +echo "Hello $(whoami)" +} + +type hello1 +hello1 +echo + +hello2() { + echo "Hello $1" +} + +type hello2 +hello2 alice +echo + +#Portabilité des variables : +#Par défaut les variables sont globales au script... + +var=1 +echo "var vaut $var" +testvariable() { + var=2 + echo "Dans mafonction, var vaut $var" +} +testvariable +echo "maintenant, var vaut $var" +echo +#Pour qu’une variable soit locale à une fonction, il faut la déclarer locale dans notre fonction: +var=1 +echo "var vaut $var" +testvariable() { + local var=2 + echo "Dans mafonction, var vaut $var" +} +testvariable +echo "maintenant, var vaut $var" diff --git a/exemple2 b/exemple2 new file mode 100755 index 0000000..12b68ed --- /dev/null +++ b/exemple2 @@ -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/exemple3 b/exemple3 new file mode 100755 index 0000000..36112d1 --- /dev/null +++ b/exemple3 @@ -0,0 +1,30 @@ +#!/usr/bin/bash + +mot1=hello +mot2=World + +#longueur de la chaîne +echo $mot1 a ${#mot1} lettres +echo $mot2 a ${#mot2} lettres + +# concaténation +concat=$mot1$mot2 +echo $concat a ${#concat} lettres + +# phrase +phrase="$mot1 $mot2 !" +echo "\"$phrase\" a ${#phrase} lettres (y compris les espaces)" + +# 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/exemple4 b/exemple4 new file mode 100755 index 0000000..b2dd116 --- /dev/null +++ b/exemple4 @@ -0,0 +1,41 @@ +#!/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 + +### Affiche les arguments 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 "$0 demande un ou plusieurs arguments" || echo "Hello $* !" + diff --git a/exemple5 b/exemple5 new file mode 100755 index 0000000..157d9c6 --- /dev/null +++ b/exemple5 @@ -0,0 +1,76 @@ +#!/usr/bin/bash + +# 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 +read -p "Choisis un palindrome : " pal +if [ $(echo $pal|rev) = $pal ]; then + echo "$pal est un palindrome" +else + echo "$pal 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/exemple6 b/exemple6 new file mode 100755 index 0000000..a59fa70 --- /dev/null +++ b/exemple6 @@ -0,0 +1,48 @@ +#!/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 : man rev +until [ -n "$pal" -a "$(echo $pal|rev)" = "$pal" ]; do + read -p "Choisis un palindrome : " pal +done + +# Avec le code de sortie d'une commande Linux +read -p "Entre 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 diff --git a/exemple7 b/exemple7 new file mode 100755 index 0000000..1c672d2 --- /dev/null +++ b/exemple7 @@ -0,0 +1,41 @@ +#!/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 + +# 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/exemple8 b/exemple8 new file mode 100755 index 0000000..3c64531 --- /dev/null +++ b/exemple8 @@ -0,0 +1,75 @@ +#!/usr/bin/bash + +# boucle for +# help for +# parcourit une liste d'éléments +for os in windows linux mac ; do + echo $os +done +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 : " pal + +for ((i = ${#pal} ; i > 0 ; i--)); do + rev=${pal:${#pal}-$i:1}$rev +done +echo "L'inverse de $pal est $rev" +if [ $rev = $pal ]; then + echo "$pal est un palindrome" +else + echo "$pal 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/exemple9 b/exemple9 new file mode 100755 index 0000000..0cf8018 --- /dev/null +++ b/exemple9 @@ -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