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:
#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:
# Divers
Posté par -=[ silmaril ]=- (site web personnel) . En réponse au message Pbm de syntaxe d'opérateur mathématique shell script opensuse. Évalué à 3.
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*