29 Fév2016
Les fonctions dans un script shell
Objectif:
- Définir et appeler des fonctions dans un script Shell
Énoncé:
-
Écrire un script calculatrice permettant d’afficher un menu :
- calculer la somme
- calculer la multiplication
- calculer la soustraction
- calculer la division
puis et selon le choix de l'utilisateur, effectue l'une des opérations ci-dessous sur deux entiers lus au clavier.pour cela définir 4 fonctions qui vont représenter les traitement ci dessus (somme,soustraction…)
- On se propose de faire un certain traitement sur le fichier /etc/passwd pour cela écrire un script qui fait appel au fonctions suivantes :
- une fonction qui copie le fichier /etc/passwd sous ~/mypasswd
- une fonction qui retourne le nombre de lignes du fichier mypasswd
- une fonction qui retourne la taille du fichier mypasswd en ko
- écrire le script principal qui fait appel à ces fonctions et affiche les résultats
Script 1:
#!/bin/bash #définition des fonctions function somme { let s=$1+$2 return $s } function multiplication { let p=$1*$2 return $p } function soustraction { let diff=$1-$2 return $diff } function division { if [ $2 -eq 0 ];then return 1 else let div=$1/$2 return $div fi } #script principal read -p "saisir deux entiers:" a b echo "a-calculer la somme" echo "b-calculer la multiplication" echo "c-calculer la soustraction" echo "d-calculer la division" read -p "faites votre choix?" c case $c in a)somme $a $b echo "la somme est $?";; b)multiplacation $a $b echo "le produit est $?";; c)soustraction $a $b echo "la soustraction est $?";; d)division $a $b if [ $? -eq 1 -a $b -eq 0 ];then echo "erreur:division par 0" else echo "la division est $?" fi;; *)echo "choix invalid";; esac
Script 2:
#!/bin/bash #fonction qui copie /etc/passwd vers ~/mypasswd function copie() { cp /etc/passwd ~/mypasswd } #foncion qui renvoit le nombre de lignes function nb_lignes() { v=$(cat ~/mypasswd |wc -l) return $v } #fonction qui renvoit la taille function taille() { t=$(cat ~/mypasswd | wc -c) let "taille=t/1024" return $taille } #script principal copie echo "copie du fichier /etc/passwd vers ~/mypasswd..." nb_lignes echo "le nombre de lignes du fichier ~/mypasswd est $?" taille echo "la taille du fichier ~/mypasswd en ko est $?"