Vous êtes sur la page 1sur 16

3IIR

Système d’exploitation (UNIX)


4ème partie

Professeur: IOUNOUSSE Jawad


Exercice 7
 Tri à bulles:

Le tri à bulles ou tri par propagation consiste à comparer répétitivement les


éléments consécutifs d'un tableau, et à les permuter lorsqu'ils sont mal triés.
Exemple:

Tableau d’entrée: 11 8 3 6

Après 1ère itération: 8 3 6 11

Après 2ème itération: 3 6 8 11 Trié

- Ecrivez un script «tri.sh» qui permet de trier par ordre croissant les éléments
d’un tableau saisi en entrant le nombre d’éléments du tableau en premier.
Exercice 1 (Correction)
#!/bin/bash
read -p "Entrez le nombre des éléments du tableau :" n
echo "Saisie des nombres à trier :"
i=0
while [ $i -lt $n ];do
read –p "nombre $((i+1)) : " tab[$i]
((i++))
done
echo "Ordre original "
echo ${tab[*]}
for ((i=0; i<n; i++));do
for ((j=0; j<n-i-1; j++));do
if [ ${tab[j]} -gt ${tab[$((j+1))]} ]
then
temp=${tab[j]}
tab[$j]=${tab[$((j+1))]}
tab[$((j+1))]=$temp
fi
done
done
echo "Ordre croissant "
echo ${tab[*]}
Exercice 8

Écrire un script «inverse.sh» permettant d‘inverser une variable (chaine de


caractères) saisie par lecture. Exemple:

Ecrivez qlq chose ?


EMSI
Sortie inversée: ISME

Essayez de créez une fonction inverse() dont l’attribut est la variable saisie est
qui permet une sortie inversée
Exercice 8 (Correction)

#!/bin/bash
read -p "Ecrivez qlq chose ?: " input
#La fonction inverse() permet d'inverser une entrée donnée
#output est la sortie de inverse()
inverse(){
output=""
e=$@
len=${#e}
for (( i=$len-1; i>=0; i-- ))
do
output="$output${e:$i:1}"
done
}
echo "Entrée (origine): $input"
inverse $input
echo "Sortie (inversée): $output"
Rappel des redirections des flux
Les redirections
 Rediriger le résultat dans un fichier:
C'est là qu'intervient le petit symbole magique > ou >> :
macommande > resultats.txt
Un fichier sera créé
macommande >> resultats.txt

Deux flux de redirection dans des fichiers :


 > : redirige dans un fichier et l'écrase s'il existe déjà ;
 >> : redirige à la fin d'un fichier et le crée s'il n'existe pas.
Les redirections
 Rediriger les erreurs dans un fichier:
Là on utilise 2> ou 2>> :
macommande 2> resultats.log Un fichier sera créé
macommande 2>> resultats.log
 2> : redirige les erreurs dans un fichier et l'écrase s'il existe déjà ;
 2>> : redirige les erreurs à la fin d'un fichier et le crée s'il n'existe pas.
 Fusionner les sorties dans un fichier:
macommande > resultats.txt 2>&1
On utilise 2>&1
(Cela a pour effet
de rediriger toute
la sortie d'erreurs
dans la sortie
standard)
Les redirections
 Lire depuis un fichier ou le clavier:

Là on utilise < :
macommande < resultats.txt
Exemple: cat < notes.txt Le contenu du fichier sera lu
L’utilisation de << permet d'envoyer un contenu à une commande avec votre clavier,
Exemple:
sort -n << FIN
Cette commande permet de trier des nombres saisis un par ligne et « FIN » sert à
terminer la saisie.
Autre exemple: wc –m << STOP
pour compter le nombre de mots ou de caractères saisis par le clavier.
Mécanismes complémentaires
Options du shell
Le Bash a des options qui lui permettent de changer la façon comment les scripts et les
commandes s’exécutent.

 La commande set:

 set -x : Active le mode “trace”


 set - : désactive le mode “trace”
 set -e : quitter immédiatement si le retour d’une commande est différent de 0
 set -C : interdire l’écrasement de fichiers existants par redirection
 set -o <option> : activer certaines options du shell exemple: $ set -o posix

Pour désactiver l’option : set +<option> exemple: $ set +x


Options du shell
Le Bash a des options qui lui permettent de changer la façon comment les scripts et les
commandes s’exécutent.

 La commande bash pour l’exécution


 $ bash -x monscript : exécution du script en mode trace. ça affiche les étapes de
substitution, signalées par la ligne +.
 $ bash -v monscript : exécution en mode “bavard”. ça affiche la ligne telle
qu’elle est écrite dans le script, avant que le shell ne l’interprète.
 $ bash -n monscript : vérification de la syntaxe.
 $ bash -e monscript : provoque la fin d’exécution d’un script si une commande
se termine avec un code de retour différent de zéro.
Options du script
#!/bin/bash
usage() {
On peut ajouter à un script echo "Usage: `basename $0` [-n <5-10>] [-m <chaîne de caractères>]" 1>&2;
exit 1;
des options en utilisant la }
commande getopts : while getopts ":n:m:-:" option; do
case "${option}" in
n)
getopts ":opt1:opt2:" n=${OPTARG}
variable ((n >= 5 && n <= 10)) || usage
;;
À chaque appel de cette m)
m=${OPTARG}
commande on consomme ;;
une option dans -) #option longue
$variable if [ ${OPTARG} == "help" ]; then
echo "help "
fi
$OPTARG contient la valeur ;;
de l’option :)
echo "Error: -${OPTARG} nécessite un argument." 1>&2 && usage
;;
Exemple : *)
usage
;;
esac
done
if [ -z "${n}" ] || [ -z "${m}" ]; then
usage
fi
echo "n = ${n}"
echo "m = ${m}"
Commande tee
Cet utilitaire peut être imaginé comme un « T » de
plomberie, d’où son nom, c’est-à-dire un accessoire que l’on
insère dans un pipeline pour disposer d’une sortie annexe. Sortie
tee lit les données sur son entrée et les copie sur sa sortie exploitable
Fichier
standard, tout en envoyant une copie supplémentaire dans
tous les fichiers dont le nom lui est fourni en argument.
Sortie pipeline
Exemples:
du -h | tee disk_usage.txt les informations sont affichées et enregistrées dans le fichier texte

vérifie le nombre de lignes de fichier1.txt . affiche le


wc -l fichier1.txt | tee fichier2.txt résultat et l’enregistre dans fichier2.txt

liste les fichiers à l’intérieur du dossier et en utilisant la première


ls | tee test.txt | grep 'py' pipe, le résultat sera écrit dans le fichier test.txt et le même résultat
sera transmis à la troisième commande grep pour identifier les
fichiers contenant la chaîne de caractères py
Pour empêcher l’écrasement du contenu d’un fichier créé par tee on utilise l’option –a exemple:
du -h | tee –a disk_usage.txt
Avec Tee, nous pouvons aussi sauvegarder le résultat d’une commande dans plusieurs fichiers:
ls | tee fichier1.txt fichier2.txt fichier3.txt
Commande xargs
Elle prend des lignes de texte sur son entrée standard, les regroupe pour les transmettre en
argument à une autre commande. C’est le moyen le plus efficace de transformer des données
arrivant dans un flux (de type pipeline ou autre) en arguments sur une ligne de commande.
Exemples:
seq 5 | xargs echo "Hello" Ajoute la séquence à echo

Ajoute n=1 élément par n=1 élément de la séquence à echo


seq 5 | xargs –n 1 echo "Hello"
-n pour découper le flux d'entrée en paquets

echo -e "1\n2\n3\n" | xargs –i touch {}.txt Crée des fichier .txt depuis l’affichage

echo -e "1\t2\t3\t" | xargs –d "\t" touch Crée des fichiers depuis l’affichage en tenant
compte le séparateur \t

seq 5 | xargs -t touch Crée des fichiers depuis la séquence et affiche


la commande (mode bavard)

ls | xargs -n 1 grep 'bash'

xargs -t -n 2 echo <<fin


Exercice 9
Écrire un script qui nécessite la saisie d’un nom de fichier complet en option -f (avec
son chemin d’accès) et affiche successivement le nom seul et le chemin seul.

Exercice 10
En utilisant xargs dans un script, cherchez le texte donné en premier argument du
script dans tous les fichiers du répertoire donné en deuxième argument.

Vous aimerez peut-être aussi