summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xexemple123
-rwxr-xr-xexemple1039
-rwxr-xr-xexemple217
-rwxr-xr-xexemple330
-rwxr-xr-xexemple441
-rwxr-xr-xexemple576
-rwxr-xr-xexemple648
-rwxr-xr-xexemple741
-rwxr-xr-xexemple875
-rwxr-xr-xexemple945
10 files changed, 435 insertions, 0 deletions
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