Académique Documents
Professionnel Documents
Culture Documents
Accueil (../../fr/)
> Forum (../)
> Systèmes d'exploitation (https://openclassrooms.com/forum/categorie/systemes-d-exploitation)
> Linux & FreeBSD
(https://openclassrooms.com/forum/categorie/linux-freebsd)
> Exercices Bash
1
2 (/forum/sujet/exercices-bash-57809?page=2)
(/forum/sujet/exercices-bash-57809?page=2)
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Bonjour.
Les règles :
Niveau débutant :
Niveau habitué :
Niveau Confirmé :
Quelques exercices (1 à 6) :
débutant
Solution :
1 #!/bin/bash
2
3 echo "Entrez votre note :"
4 read note
5
6 if [ $note -ge 16 ]
7 then
8 echo "très bien"
9 elif [ $note -ge 14 ]
10 then
11 echo "bien"
12 elif [ $note -ge 12 ]
13 then
14 echo "assez bien"
15 elif [ $note -ge 10 ]
16 then
17 echo "moyen"
18 else
19 echo "insuffisant"
20 fi
débutant
Solution :
1 #!/bin/bash
2
3 note=0
4 moyenne=0
5 i=0
6
7 until [ $note -lt 0 ]
8 do
9 echo "Entrez votre note (q pour quitter) :"
10 read note
11 if [ $note = "q" ]
12 then
13 note=-1
14 echo "au revoir !"
15 elif [ $note -ge 16 ]
16 then
17 echo "très bien"
18 elif [ $note -ge 14 ]
19 then
20 echo "bien"
21 elif [ $note -ge 12 ]
22 then
23 echo "assez bien"
24 elif [ $note -ge 10 ]
25 then
26 echo "moyen"
27 elif [ $note -ge 0 ]
28 then
29 echo "insuffisant"
30 else
31 echo "au revoir !"
32 fi
33
34 if [ $note -ge 0 ]
35 then
36 let moyenne=$moyenne+$note
37 let i=$i+1
38 fi
39 done
40
41 if [ $i -le 0 ]
42 then
43 let i=1
44 fi
45
46 let moyenne=$moyenne/$i
47 echo "La moyenne est de $moyenne ($i notes)"
habitué
Solution :
1 #!/bin/bash
2
3 appreciation ()
4 {
5 if [ $note -ge 16 ]
6 then
7 echo "très bien"
8 elif [ $note -ge 14 ]
9 then
10 echo "bien"
11 elif [ $note -ge 12 ]
12 then
13 echo "assez bien"
14 elif [ $note -ge 10 ]
15 then
16 echo "moyen"
17 else
18 echo "insuffisant"
19 fi
20 }
21
22 # programma principale
23 clear
24 if [ $# -ne 0 ]
25 then
26 note=$1
27 else
28 echo "Saisir une note"
29 read note
30 fi
31 appreciation
Exercice 4 : TestUser
habitué
Citation
q - Quitter
L'utilisateur doit être saisis, à l'aide d'une fonction. Son existance doit
être vérifiée à l'aide d'une autre fonction.
Solution :
1 #!/bin/bash
2
3 function pause
4 {
5 echo "Appuyez sur ENTER pour continuer"
6 read
7 }
8
9 function saisirUser
10 {
11 echo "Saisir l'utilisateur"
12 read util
13 }
14
15 function verifyUser
16 {
17 if grep "^$util:" /etc/passwd > /dev/null
18 then
19 echo "L'utilisateur existe"
20 else
21 echo "L'utilisateur n'existe pas"
22 fi
23 pause
24 }
25
26 rep=1
27 while [ $rep -eq 1 ]
28 do
29 clear
30 printf "menu :\n\n"
31 echo "1. vérifier l'existance d'un utilisateur"
32 echo "2. Connaitre l'uid d'un utilisateur"
33 echo -e "3. Quitter\n"
34 read choix
35 case $choix in
36 1)
37 saisirUser
38 verifyUser ;;
39
40 2)
41 saisirUser
42 id $util
43 pause ;;
44
45 q)
46 echo "Au revoir"
47 pause
48 rep=0 ;;
49 *)
50 echo "erreur de saisie ..."
51 pause ;;
52 esac
53 done
Exercice 5 : la calculatrice
habitué
Exemple :
1 [ ~] ./calculette.sh 7 + 4
2 Le résultat est : 11
Solution :
1 #!/bin/bash
2
3 function saisir
4 {
5 printf "Saisir le premier nombre, puis le signe
6 read nb1
7 read s
8 read nb2
9 }
10
11 function calcul
12 {
13 case $s in
14 "+") let result=$nb1+$nb2 ;;
15 "-") let result=$nb1-$nb2 ;;
16 "*") let result=$nb1*$nb2 ;;
17 "/") let result=$nb1/$nb2 ;;
18 *)
19 let result=0
20 echo -e "Erreur de saisie !\nLe resultat
21 esac
22 }
23
24 calcul2 ()
25 {
26 let result=$nb1$s$nb2
27 }
28
29 if [ $# -eq 3 ]
30 then
31 nb1=$1 ; s=$2 ; nb2=$3
32 else
33 saisir
34 fi
35 calcul
36 echo "Le résultat est $result"
37 calcul2
38 echo "Calculé d'une autre façon : $result"
Exercice 6 : La factorielle
habitué
Solution:
Preko
(/fr/memb
ers/97bdfk
sd25q9)
(/fr/members/97bdfksd25q9)
Bonne idée
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Citation : Preko
Mouais, c'est un exercice courant, je l'ai tiré d'un vieil exo de Java ...
habitué
Solution :
1 #!/bin/bash
2
3 j=0
4 k=0
5 l=0
6
7 if [ $# -eq 0 ]
8 then
9 echo "Saisir le répertoire"
10 read rep
11 else
12 rep=$1
13 fi
14
15 cd $rep
16
17 for i in `ls`
18 do
19 if [ -d $i ]
20 then
21 echo $i
22 let j=$j+1
23 fi
24 if [ -f $i ]
25 then
26 echo $i
27 let k=$k+1
28 fi
29 if [ -x $i ]
30 then
31 echo $i
32 let l=$l+1
33 fi
34 done
35 echo "Il y a $j répertoires, $k fichiers et $l exécu
xavierm02
(/fr/memb
ers/vcw7t
7ffkt89)
(/fr/members/vcw7t7ffkt89)
Päs mal
Par contre, je pense qu'il serait mieux de mettre tous les exercices
dans le premier post...
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Salut.
Citation : xavierm02
Euh, ça ferait, AMHA un post bien surchargé à la fin difficile à éditer ...
si on suit bien la numérotation des exercices, ça devrait le faire.
débutant
Exemple :
1 [ ~] ./NomDuScript.sh
2 Saisir une valeur :
3 4
4 2^2 = 4
Solution 1 (débutant) :
1 #!/bin/bash
2 echo "Saisir une valeur"
3 read value
4 result=1
5 for (( i=0 ; i<$value ; i++ ))
6 do
7 let result=$result*$value
8 done
9 echo "$value^$value = $result"
Solution 2 (habitué) :
1 #!/bin/bash
2
3 operation ()
4 {
5 result=1
6 for (( i=0 ; i<$value ; i++ ))
7 do
8 let result=$result*$value
9 done
10 echo "$value^$value = $result"
11 }
12
13 if [ $# -eq 0 ]
14 then
15 echo "Saisir une valeur"
16 read value
17 else
18 value=$1
19 fi
20 operation
(/fr/members/vcw7t7ffkt89)
Erus_Iluva
tar
(/fr/memb
ers/87r658
jx0jg4)
(/fr/members/87r658jx0jg4)
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Citation : Erus_Iluvatar
J'ai utilisé (et non mélangé) les deux notations pour souligner leur
existences respectives
Citation : Erus_Iluvatar
Citation : xavierm02
Bof, des exos c'est pas suffisant pour faire un tuto ... et puis m@teo21
s'occupe déjà d'un tuto sur Bash (qui n'est pas encore terminé je
crois). Et puis c'est juste des exos histoire de s'entraîner, pas la peine
de faire beaucoup de cérémonie. L'idée c'est aussi que d'autres
postes des exercices (même si j'en ai encore en réserve) ...
Par contre ce qui serait faisable, c'est de recenser les exos par des
liens et les classer par niveaux de difficultés (je m'en chargerai à
l'occasion ).
Erus_Iluva
tar
(/fr/memb
ers/87r658
jx0jg4)
(/fr/members/87r658jx0jg4)
Sisi, dans ta calculette, tu utilise les deux. Pis bon, sinon tout tes
scripts fontionnent avec dash sans ce bashisme, d'où ma remarque
(un peu aigrie d'ailleurs, pardon)
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Citation : Erus_Iluvatar
C'est ce que j'ai dis ... mais lorsque tu parles de mélange, on croirait
qu'il y a des confusions. Encore une fois c'est pour souligner
l'existence des deux syntaxes.
Confirmé
Il s'agit ici d'un script qui va devoir exploiter les données d'un fichier
de notes que vous aller crée au préalable dans le même répertoire
que le script.
Citation : FichierNote
Dupont François 12
Durand Françoise 8
Dujardin Nicole 14
Les espaces entre les mots sont des tabulations (Nom + tab + Prénom
+ tab + note, après le reste n'a pas d'importance).
Le script doit afficher les lignes dans lesquelles la note est supérieur
ou égal à 10. Si le fichier est vide, il doit quitter (donc ne pas boucler
indéfiniment).
Exemple d'exécution :
1 [ ~] ./NomDuScript
2 Dupont François 12
3 Dujardin Nicole 14
4 [ ~] rm FichierNote
5 [ ~] touch FichierNote
6 [ ~] ./NomDuScript
7 [ ~]
Solution :
1 #!/bin/bash
2
3 cat FichierNote | while true
4 do
5 read ligne
6 if [ "$ligne" = "" ]
7 then
8 exit 0
9 else
10 set -- $ligne
11 if [ $3 -ge 10 ]
12 then
13 echo "$ligne"
14 fi
15 fi
16 done
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Confirmé
Ici, vous devez avoir un script qui prend en paramètre (ou en saisie en
cas d'absence du paramètre) un fichier qui contient des lignes
comme ceci : Login + Tabulation + Nom + Tabulation + Prénom.
Exemple :
Citation : fichier
1 [ ~] ./NomDuScript ~/Doucuments/FichierUser
2 dupontf Dupont François
3 [ ~] ./NomDuScript
4 Saisissez le fichier à traiter :
5 ~/Documents/UserFichier
6 Le fichier n'existe pas ...
7 [ ~]
Solution :
1 #!/bin/bash
2
3 TestUser ()
4 {
5 if grep "^$util:" /etc/passwd > /dev/null
6 then
7 echo $ligne
8 fi
9 }
10
11 if [ $# -eq 0 ]
12 then
13 echo "Chemin et nom du fichier :"
14 read fichier
15 else
16 fichier=$1
17 fi
18
19 if [ -e $fichier ]
20 then
21 cat $fichier | while true
22 do
23 read ligne
24 if [ "$ligne" = "" ]
25 then
26 exit
27 else
28 set -- $ligne
29 util=$1
30 TestUser
31 fi
32 done
33 else
34 echo "Le fichier $fichier n'existe pas ..."
35 fi
N'hésitez pas à proposer vos solutions (elles sont peut être plus
optimisées d'ailleurs, mais même si ce n'est pas le cas allez y ).
Anonyme
1 read operation
2 echo $(($operation))
xavierm02
(/fr/memb
ers/vcw7t
7ffkt89)
(/fr/members/vcw7t7ffkt89)
BadPotato
(/fr/memb
ers/r4phf4
k69f49)
(/fr/members/r4phf4k69f49)
Débutant/Habitué
1 UserName=BadPotato
2 PASSROOT1="Le ciel est bleu"
3 PASSROOT2="La mer est calme"
4
5 PASSUSER1="Ferme ta yeule pis rame"
6 PASSUSER2="ohhhhhhh yeah"
7
8 echo "Pour commencer, nous allons défénir un mot de
9 echo "Commençont par le root"
10
11
12 while [ "$PASSROOT1" != "$PASSROOT2" ]; do
13 echo "Entrez le mot de passe pour root:"
14 read -s PASSROOT1
15 echo "Confirmez le mot de passe pour root:"
16 read -s PASSROOT2
17
18 if [ "$PASSROOT1" != "$PASSROOT2" ]; then
19 echo "Erreur de saisie du mot de passe. Recom
20 fi
21 done
22
23 echo "Bravo, configuront maintenant celui de l'user
24
25 while [ "$PASSUSER1" != "$PASSUSER2" ]; do
26 echo "Entrez le mot de passe pour $UserName (l'us
27 read -s PASSUSER1
28 echo "Confirmez le mot de passe pour $UserName (l
29 read -s PASSUSER2
30 if [ "$PASSUSER1" != "$PASSUSER2" ]; then
31 echo "Erreur de saisie du mot de passe. Recom
32 fi
33 done
34
35 # ... une fois en chroot mettre ceci:
36 echo root:$PASSROOT1 | chpasswd
37 echo root:$PASSUSER1 | chpasswd
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Merci de ta participation
Confirmé
Alors ici, il faut coder un script qui prend en paramètre (ou en saisie
en cas d'absence de paramètres) une valeur décimale et qui doit la
convertir en binaire.
Vous devez travailler sur 8 bits et chaque bit devra être contenu dans
une case d'un tableau monodimentionnel ... à l'a fin on affiche toutes
les cases de ce tableau de sorte à avoir la valeur en binaire lisible de
droite à gauche, de la valeur décimale saisie au départ.
1 #!/bin/bash
2
3 MaxBits=8
4
5 pow ()
6 {
7 value2=1
8 for (( k=1 ; k<$i ; k ++ ))
9 do
10 let value2=$value2*2
11 done
12 }
13
14 if [ $# -eq 0 ]
15 then
16 echo "Saisir une valeur décimale"
17 read value
18 else
19 value=$1
20 fi
21
22 declare -a bin
23
24 j=0
25 for (( i=$MaxBits ; i>=0 ; i-- ))
26 do
27 pow
28 if [ $value -ge $value2 ]
29 then
30 bin[j]="1"
31 let value=$value-$value2
32 else
33 bin[j]="0"
34 fi
35 let j=$j+1
36 done
37
38 printf "La valeur binaire est de : "
39 for (( i=0 ; i<=($MaxBits-1) ; i++ ))
40 do
41 printf ${bin[i]}
42 done
43 echo ""
ok
(/fr/memb
ers/xn1wc7
ps4583)
(/fr/members/xn1wc7ps4583)
Habitué
Solution :
1 #!/bin/bash
2
3 SIZE=10
4
5 for (( i=0 ; i<SIZE ; i++ ))
6 do
7 printf "Saisir un entier : "
8 read tab[i]
9 done
10
11 echo -e "\n"
12
13 for (( i=0 ; i<SIZE ; i++ ))
14 do
15 for (( j=($i+1) ; j<SIZE ; j++ ))
16 do
17 if [ ${tab[j]} -le ${tab[i]} ]
18 then
19 tampon=${tab[i]}
20 tab[i]=${tab[j]}
21 tab[j]=$tampon
22 fi
23 done
24 done
25
26 for (( i=0 ; i<SIZE ; i++ ))
27 do
28 echo ${tab[i]}
29 done
sylflo
(/fr/memb
ers/3rsq0z
5vf938)
(/fr/members/3rsq0z5vf938)
Bonjour.
vamboutc
ha
(/fr/memb
ers/gvqc9
b6cp927)
(/fr/members/gvqc9b6cp927)
Créer script shell qui permet en argument une liste de fichiers texte .
Ce script permet de passer en majuscule le contenu de ce fichier. Les
resultats seront mis dans autre fichiers qui font suivi(exp fich =>
fichMajus) .
rouritafat
ma
(/fr/memb
ers/c1gk02
2mkn42)
(/fr/members/c1gk022mkn42)
Anonyme
rouritafatma a écrit:
Menu
existe.
q quitter le menu
http://abs.traduc.org/abs-5.0-fr/ (http://abs.traduc.org/abs-5.0-fr/)
rouritafat
ma
(/fr/memb
ers/c1gk02
2mkn42)
(/fr/members/c1gk022mkn42)
ALAIN290
000
(/fr/memb
ers/t2t4vq
pvv983)
(/fr/members/t2t4vqpvv983)
super, je trouve ton poste sur des exercice en script bash Linux super,
ca permert d'apprendre et d'avancer. Des que j'ai le temps je passerai
a ton poste que je trouve tres bien.
fatmafato
u
(/fr/memb
ers/jpst9w
754863)
(/fr/members/jpst9w754863)
Menu
existe.
q quitter le menu
ALAIN290
000
(/fr/memb
ers/t2t4vq
pvv983)
(/fr/members/t2t4vqpvv983)
1 #!/bin/bash
2 #Affiche le nombre de lettre ou de mots dans un fich
3 #Vous rechercher la ligne ou se trouve le mots aussi
4
5
6
7 read -p "entre ton chemin du fichier " fiche
8 read -p "choisir une lettre ou mots: " mots
9 for i in $mots
10 do
11
12 nombre=$(grep -E "$i" $fiche)
13 nombre2=$(grep -E "$i" $fiche | wc -L )
14 nombre3=$(grep "$i" $fiche | wc -l )
15 nombre4=$(nl $fiche | cat | grep "$i" )
16 done
17 if [ $mots ]
18 then
19 echo "trouver
20
21 $nombre2 :lettre du mots
22 $nombre3 :mots dans le texte
23 ligne : $nombre4 "
24 else
25 echo "non trouver"
26 fi
j'ai trouver tes script pour apprendre excellent, merci à toi, je vais
travailler dessus merci.sinon voila un script que j'avais fait, vous
pouvez l'améliorer encore.
ce script permet de :
fouadmen
nani
(/fr/memb
ers/91b39j
z1m147)
(/fr/members/91b39jz1m147)
slt solution
dantonq
(/fr/memb
ers/nhb1m
740ds11)
(/fr/members/nhb1m740ds11)
« dépasse 50 » quoi ?
centimètres de haut ?
pieds de long ?
Km/H ?
je ne sais même pas pourquoi je réponds, je ne parle pas au
personnes malpolies, et irrespectueuses : pas de «bonjour», pas de
«s'il vous plaît», pas de «merci», aucun travail d'explication du travail à
faire, aucune recherche de solution.
(/fr/members/91b39jz1m147)
#!/bin/bash
a=0
while [ $a -le 50 ]
do
read -p "entrer une chaine : " ch
echo $ch >> fichier
a=`stat -c %s fichier`
done
SalmaSal
ma8
(/fr/memb
ers/tt99cf1
5kb38)
(/fr/members/tt99cf15kb38)
Aide
dantonq
(/fr/memb
ers/nhb1m
740ds11)
(/fr/members/nhb1m740ds11)
SalmaSalma8 a écrit:
Aide
non.
Bonjour,
d'abord.
fouadmen
nani
(/fr/memb
ers/91b39j
z1m147)
(/fr/members/91b39jz1m147)
8 avril 2016 à 23:57:30
#!/bin/bash
if [ $# -eq 2 ];then
let "s=$1+$2"
echo "la somme est : $s"
else
echo "erreur!!"
fi
1
2 (/forum/sujet/exercices-bash-57809?page=2)
(/forum/sujet/exercices-bash-57809?page=2)
OPENCLASSROOMS
OPPORTUNITÉS
AIDE
EN PLUS
Français
book.com/openclassroomsfr/)
ttps://twitter.com/ocfrance)
www.linkedin.com/company/openclassrooms)
(https://instagram.com/openclassrooms)
(https://www.youtube.com/user/TheOpenClassrooms)
(https://itunes.apple.com/fr/app/openclassrooms-
cours-en-ligne/id1164140533?
pt=118427510&ct=FooterWeb&mt=8)