+ All Categories
Home > Documents > CHAP4 Script Shell

CHAP4 Script Shell

Date post: 09-Apr-2018
Category:
Upload: kaouther-tounsia
View: 244 times
Download: 0 times
Share this document with a friend

of 28

Transcript
  • 8/8/2019 CHAP4 Script Shell

    1/28

    La programmation Shell

    Ecole Nationale des sciences delinformatique

  • 8/8/2019 CHAP4 Script Shell

    2/28

    2

    Introduction: Environnement Shell

    Les variables locales / denvironnement: Les commandes: set, unset, declare, export, env

    Les fichiers de configuration: Dcrire lenvironnement de lutilisateur. Il y a deux types de fichiers de configuration (scripts):

    - Ceux qui sont lus au moment de connexion;- Le fichier: //etcetc/profile/profile (commun tous les utilisateurs):

    #cat /etc/profile

    USER=`id -un`LOGNAME=$USERMAIL="/var/spool/mail/$USER"HOSTNAME=`/bin/hostname`for i in /etc/profile.d/*.sh

    if [ -r "$i" ]; then. $i

    fidone.

  • 8/8/2019 CHAP4 Script Shell

    3/28

    3

    Introduction: Environnement Shell

    Les fichiers de configuration: Dcrire lenvironnement de lutilisateur. Il y a deux types de fichiers de configuration (scripts):

    - Ceux qui sont lus au moment de connexion;- Le fichier: ~/.bash_profile ou ~/.bash_login ou ~/.profile

    (spcifiques chaque utilisateur)#cat ~/.bash_profile

    PATH=$PATH:$HOME/bin:.

    - Ceux qui sont lus chaque lancement de shell (bash).- Le fichier: /etc/bashrc (commun tous les utilisateurs).

    #cat /etc/bashrc

    umask 022

    - Le fichier: ~/.bashrc (spcifique chaque utilisateur)#cat /etc/bashrc

    alias rm='rm i'

  • 8/8/2019 CHAP4 Script Shell

    4/28

    4

    Remarques

    La famille profile: lanc au moment du connexion delutilisateur.- bash VS bash -login (force la lecture des fichiers de

    login de la famille profile)

    La famille bashrc: excut chaque fois quun Shell(bash) est lanc.

    Le fichier/etc/bash_logout- sil est prsent - excut la fin de la session bash de tous les utilisateurs.

    Le fichier ~/.bash_logout sera excut la fin de lasession bash spcifique un utilisateur.

  • 8/8/2019 CHAP4 Script Shell

    5/28

    5

    Les scripts

    Dfinition: Un script shell est une liste dinstructions contenues

    dans un fichier (texte).

    #! /bin/bash

    #un premier script shell

    echo " script shell"

    Pour excuter les instructions, (./mon_script) deuxconditions doivent tre remplies:

    La premire ligne doit contenir (La ligne shebang (#!)):#! /bin/bash [-vx] (pour un script shell utilisant bash)

    Le fichier soit tre excutable et lisible. (chmod +rxnom_script)

    Si ces 2 conditions ne sont pas remplies, on peut forcerlexcution du script: #bash nom_script

  • 8/8/2019 CHAP4 Script Shell

    6/28

    6

    Les scripts: Passage de paramtres

    Les variables passes au script sur la ligne decommande (les arguments) sont accessible par:

    $1: le premier argument, $2: le deuxime argument

    Remarque:Remarque:- $0 le nom du script,

    - $* liste des paramtres (sans le $0),

    - $# le nombre de paramtres,

    - $$ numero du processus en cours dexcution,- $? La valeur de retour de la dernire commande,

    - Avec la commande shift, on peut dcaler le arguments:$1 passe dans $2, $3 passe dans $2,

  • 8/8/2019 CHAP4 Script Shell

    7/28

    7

    Les scripts: les expressions

    logiques

    Les expressions logiques sont values a laide de la

    commande test expression_logique (quivalent [ESPACEexpression_logiqueESPACE]). Le rsultat de lvaluation de lexpression logique est renvoy

    dans le code de retour de la commande: Si la commande renvoie un code de retour 0,

    lexpression logique est vrai. Une valeur diffrent de 0,

    lexpression logique est faux.

    Les expressions logiques peuvent tre combines par desoperateurs logiques:

    -a: le ET logique. Exemple: #test cond1 a cond2 -a cond3 -o: le OU logique.

    Exemple #[ cond1 o cond2 -o !cond3 ]- ! La ngation de lexpression logique.

  • 8/8/2019 CHAP4 Script Shell

    8/28

    8

    La commande test: Les expressions

    logiques sur les fichiers

    Les expressions logiques:

    Les options de la commande test pour letraitement des fichiers:

    Evaluer le type du fichier: -ffichier: vrifier que le fichier existe et que cest un

    fichier ordinaire.Exemple:Exemple: [ -f /etc/fstab ]; echo $?; VS test f /dev/hda; echo $?;

    -d fichier : vrifier que le fichier existe et que cest unrpertoire.

    -b fichier : vrifier que le fichier existe et que cest unfichier de type bloc.

    -c fichier: vrifier que le fichier existe et que cest unfichier de type caractre. -L fichier: vrifier que le fichier existe et que cest un

    lien symbolique. -e fichier : vrifier que le fichier existe indpendamment

    de son type.

  • 8/8/2019 CHAP4 Script Shell

    9/28

    9

    La commande test: Les expressions

    logiques sur les fichiers

    Les expressions logiques:

    Evaluer les droits daccs dun fichier: -r fichier, -w fichier, -x fichier : vrifier que le fichier

    existe et lisible (-r), inscriptible (-w), excutable (-x).

    -u fichier, -g fichier, -k fichier : vrifier que le fichier

    existe et le bit SUID (-u), le bit SGID (-g), le Sticky bit(-k) est positionn.

    Exemple: [ -k /tmp ]; echo $? ;

    Autres options:

    file1 effile2 : vrifier que file1 et file2 sont sur lemme systme de fichier et ont le mme numrodinode.

    file1 nt file2: vrifier que file1 est modifi aprs file2.

  • 8/8/2019 CHAP4 Script Shell

    10/28

    10

    La commande test: Les expressions

    logiques sur les chaines de caractres

    Les expressions logiques: Les options de la commande test pour letraitement des chaines des caractres:

    -n string: vrifier que la longueur de la chaine decaractres est non nulle.

    -z string : vrifier que la longueur de la chaine decaractres est nulle.

    [ -z "$var" ] quivalent [ ! n "$var" ]

    string1 = string2: vrifier que les deux chaines

    (string1 et string2) sont gales. string1 != string2: vrifier que les deux chaines

    (string1 et string2) sont differentes.

    [ ! "$var1" = "$var2" ] quivalent [ "$var1" != "$var2" ]

  • 8/8/2019 CHAP4 Script Shell

    11/28

    11

    La commande test: Les expressions

    logiques sur les entiers

    Les expressions logiques:

    Les options de la commande test pour le traitementdes entiers:

    integer1 -eq integer2: vrifier que integer1 gale integer2.

    integer1 -ne integer2: quivalent :! integer1 -eq integer2

    integer1 -gt integer2: vrifier que integer1 est suprieur integer2.

    integer1 -ge integer2: vrifier que integer1 est suprieurou gale integer2.

    integer1 -lt integer2: quivalent :! integer1 -ge integer2

    integer1 -le integer2: quivalent :! integer1 -gt integer2

  • 8/8/2019 CHAP4 Script Shell

    12/28

    12

    Les scripts: les calculs

    Comparaison des nombres: avec la commande test :

    Options: -eq, -ne, -gt, -ge, -lt, -le.Exemple: [ $# -eq 0 ]

    Les calculs de base son effectu avec la commande

    expr : Syntaxe: expr int1 operateur int2

    ou $(( int1 operateur int2 ))

    Affiche le rsultat sur la sortie standard.

    Les operateurs: +, -, / et \* ou '*Remarque:Remarque: expr 1 * 2;

    interprt par: expr 1 f1 f2 f3 rep 2 (erreur de syntaxe)

  • 8/8/2019 CHAP4 Script Shell

    13/28

    13

    Les scripts: La structure

    conditionnelle if

    La structure conditionnelle if:

    Tester & brancher Syntaxe:

    ifcommande#Vrai, si le code de retour de la commande est nul.

    thencommande1commande2

    else

    commande1commande2.

    fi

    La partie else est optionnel

  • 8/8/2019 CHAP4 Script Shell

    14/28

    14

    Les scripts: La structure

    conditionnelle if

    Exemple:Exemple1if [ -e /etc/passwd ]then

    echo "le fichier /etc/passwd existe"fi

    Exemple2- Ecrire un script shell:

    renomer.sh fichier1 prefix entierQui permet de renommer un fichier ordinaire existant fichier1en prefixentier (le 3me argument doit tre un entier).

    #! /bin/bashif expr $3 + 1 >/dev/null 2>&1 &&[ -f $1 ]Then

    mv -f $1 $2$3fi

  • 8/8/2019 CHAP4 Script Shell

    15/28

    15

    Les scripts: La structure

    conditionnelle case

    La structure conditionnelle case permet dechoisir des commandes diffrentes suivantles diffrents valeur dune variable.

    Syntaxe:

    case variable in

    valeur1) commande1 ;;

    valeur2) commande2 ;;

    esac

  • 8/8/2019 CHAP4 Script Shell

    16/28

    16

    Les scripts: La structure

    conditionnelle case

    Exemple: Ecrire un script shell: progprog arg1 [arg2]arg1 [arg2]

    prog arg1

    - affiche les caractristiques du

    rpertoire/fichier arg1 (sil existe).prog arg1(fichier ordinaire) arg2(rpertoire)

    - copy arg1 vers arg2.

    - si le nombre des arguments estsuprieur 2, le programme doit afficherun message derreur sur la sortiestandard derreur.

  • 8/8/2019 CHAP4 Script Shell

    17/28

    17

    Les scripts: La structure

    conditionnelle case

    #! /bin/bash

    case $# in1) echo "1 arg";if [ -e $1 ];then ls -l $1;fi;;2) echo "2 args";

    if [ -f $1 -a -d $2 ]thenecho "copy $1 vers $2"cp $1 $2elseecho "erreur paramtres"fi;;

    *) echo 'paramtres suprieur 2' > &2 ;;esac

  • 8/8/2019 CHAP4 Script Shell

    18/28

    18

    Les scripts: La boucle for

    La boucle for permet de rpter un traitement unnombre de fois connu.

    Syntaxe:

    for variable in liste

    do

    commande1

    commande2

    done

  • 8/8/2019 CHAP4 Script Shell

    19/28

    19

    Les scripts: La boucle for

    Exemple:

    Exemple1:for comp in 1 2 3 4 5do

    echo "$comp"doneExemple2:for var in $*do

    cat $var >>/tmp/filedoneExemple3:for fich in *.tmpdo

    mv f $fich /tmp 2>/dev/nulldone

    Exemple3:for var in `cat f1`do

    echo "$var"done

  • 8/8/2019 CHAP4 Script Shell

    20/28

    20

    Les scripts: La boucle While

    La boucle while permet de rpter un traitement tant

    quune /plusieurs condition(s) est/sont vrifie(s). Syntaxe:

    while commande

    # la condition est vrai si commande retourne un codede retour nul

    docommande1commande2done

    cmd_1&&&&cmd_n

    cmd_1||||cmd_n

  • 8/8/2019 CHAP4 Script Shell

    21/28

    21

    Les scripts: La boucle While

    Exemple:

    Ecrire un scripte shell en utilisant la boucle while:copy.sh rep fich1 fich2 fichn

    Qui permet de copier fich1 fich2 fichn sur rep.

    #! /bin/bashrep=$1

    if [ ! -d $rep ]; then mkdir $rep 2>/dev/null;fi

    while shift

    doif [ -f $1];then cp $1 $rep 2>/dev/null;fi

    done

  • 8/8/2019 CHAP4 Script Shell

    22/28

    22

    Passage de Paramtres un script

    La lecture dune valeur peut se faire:1- passage de paramtre sur la ligne decommande ($1, $2, )

    2- en lisant lentre standard (le clavier par

    dfaut) avec la commande read.

    Exemple:

    #! /bin/bash

    echo " entrer un nom"read nom

    echo $nom

  • 8/8/2019 CHAP4 Script Shell

    23/28

    23

    Exemples:

    Exemple1: Comment lire un fichier mot par mot?

    Exemple2: Comment lire un fichier ligne par ligne?

    cat nom_fichier | while read lignedo

    echo $ligne

    done

    for mot in $(cat nom_fichier)

    do

    echo $mot

    done

    while read lignedo

    echo $ligne

    done < nom_fichier

  • 8/8/2019 CHAP4 Script Shell

    24/28

    24

    Exemple:

    Ecrire un script Shell (sans utiliser grep):

    recherche.sh mot file

    qui renvoie un code de retour 0 si le mot existe dansle fichier file et 1 si non.

    #! /bin/bashfor m in `cat $2`

    do

    if [ "$m" = "$1" ]

    then

    exit 0fi

    done

    exit 1

  • 8/8/2019 CHAP4 Script Shell

    25/28

    25

    Exemple:

    Ecrire un script shell qui obligelutilisateur tapez la lettre y ou Y.

    #! /bin/bash

    while read xdo

    if [ "$x" = "Y" -o "$x" = "y" ]

    then

    breakfi

    done

  • 8/8/2019 CHAP4 Script Shell

    26/28

    26

    Exemple: Les fonctions

    DDfinition de fonctions:finition de fonctions: Syntaxe:

    function nom_fonction {

    # traitements

    return valeur_numrique}

    ou:ou:nom_fonction () {

    }

    Accs aux paramtres par $1

    Retour de rsultat: ($?).

  • 8/8/2019 CHAP4 Script Shell

    27/28

    27

    Remarques: Les fonctions

    # declare f: Afficher les noms des fonctionsdclares

    # declare F: Afficher les noms + les corps desfonctions dclares

    #unset f nom_fonction: Supprimer la fonctionnom_fonction

    #export f nom_fonction: Supprimer la fonctionnom_fonction

    #export f: Afficher les fonctions exportes. #local var=val: Dfinir une variable local une

    fonction.

  • 8/8/2019 CHAP4 Script Shell

    28/28

    28

    Exemple: Les fonctions

    Utilisation des fonctions:Utilisation des fonctions: Exemple:

    Ecrire une fonction somme qui retourne lasomme de ses arguments.

    #! /bin/bash

    function somme {

    som=0

    for i in $*

    do

    som=$(($som+$i))

    donereturn $som

    }

    somme 1 2 3 4

    echo $?


Recommended