• # Divers

    Posté par (site web personnel) . En réponse au message Pbm de syntaxe d'opérateur mathématique shell script opensuse. Évalué à 3.

    Cette contruction est inefficace (3 fork pour compter les fichiers, tu ne fait pas attention aux paths ... et je ne vois pas l'interêt du bc final)

    nbfichier=`ls $directory/*.FDB -1 | wc -l | bc `
    echo $nbfichier


    Meilleure solution

    set $directory/*.FDB
    echo "Total fichiers: $#"


    Et quel est l'objectif de ça:

    let nbfichier2=$nbfichier-1
    nbfichier3= printf $nbfichier2 | wc -c

    if (( $nbfichier3 == 1 ))


    Si c'est bien ce que je pense, cad vérifier qu'il y a moins de 10 fichiers dans le dossier la construction suivante est bien plus
    adaptée:

    shift

    if [ $# -lt 10 ] ou
    if test $# -lt 10


    La suite me pose encore plus de problemes.

    for (( i = 1 ; i <= $nbfichier2 ; i++ ))
    do
    echo "Welcome $i times"
    /opt/firebird/bin/gbak -B -V -L $directory/Vol0000$nbfichier3.FDB $directory/DUPLIQUEE/NOVAXEL.FBK -USER SYSDBA -PAS masterkey
    done


    Tu fait une boucle qui execute plusieurs fois exactement la même commande
    /opt/firebird/bin/gbak -B -V -L $directory/Vol0000$nbfichier3.FDB $directory/DUPLIQUEE/NOVAXEL.FBK -USER SYSDBA -PAS masterkey

    qui sera toujours interprété comme cela (vu que jsute avant tu as un test ($nbfichier3 == 1):
    /opt/firebird/bin/gbak -B -V -L $directory/Vol00001.FDB $directory/DUPLIQUEE/NOVAXEL.FBK -USER SYSDBA -PAS masterkey


    personnellement si mes assomptions sont bonnes voici comment j'aurais fait cela:


    #!/bin/bash
    GBAK=/opt/firebird/bin/gbak
    RM=/bin/rm
    MKDIR=/bin/mkdir
    #d
    basedir=/usr/local/Novaprout
    backupdir=$basedir/DUPLIQUEE

    # Suppression ancien backup
    $RM $backupdir
    # creation rep. backup
    $MKDIR $backupdir

    #Comptage du nombre de fichier FDB
    set $basedir/*.FDB
    echo "Total fichiers: $#"

    if [ 1ドル != "$basedir/NOVAXEL.FDB" ]; then
    echo "Le fichier NOVAXEL.FDB n'existe pas"
    echo "Le dossier $basedir n'est pas conforme aux specifications"
    exit
    fi

    while [ $# -gt 1 ]; then
    echo "Backing up 1ドル ...."
    $GBAK -B -V -L $basedir/1ドル $backupdir/NOVAXEL.FBK -USER SYSDBA -PAS masterkey
    shift
    done



    Cela ne fonctionnera pas s'il y a d'autres fichiers que NOVAXEL.FBD et VOL*.FDB dans le dossier mais sinon ça doit être bon.
    S'il y a d'autre fichiers dans ce dossier, alors il faut modifier le set comme cela:

    set $basedir/NOVAXEL.* $basedir/VOL*