Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/09/2006, à 16:10

guillaume75

Script BASH shell

Bonjour

j'essaie d'écrire un script en  bash qui sera plus tard éxécuté via le  cron  mais je n'arrive pas à  faire ce que je voudrais.

Ce  script doit  réaliser  le téléchargement de 3 archives tgz via wget HTTP://url/file1.tgz  et  la sauvegarde des  3 archives dans une autre repertoire en renommant le fichier comme ceci nom-dd-mm-yyyy.tgz .
De plus afin de ne pas surcharger le disque il  faut qu'il supprime les archives les plus anciènnes de manière à  n'en garder que 5 de chaque.

voici mon script que je lance ainsi ./backup.sh domestica webdemo app2intg



1    #!/bin/bash -v -x
2
3     set -v
4     set -x
5   
6     cd $HOME
7
8
9    for "$@" in domestica webdemo app2intg
10
11   do
12
13    wget http://192.168.1.7/CARRIBACKUPS/"$@"-today.tgz   #ici c'est "$@" et pas "$...
14
15
16    RETVAL=$?
17
18
19    if [$RETVAL -ne 0]; then
20   
21    exit
22
23    fi
24
25
26    today=`date +%d-%m-%Y`
27
28    mv "$@"-today.tgz    /home/system/test/"$@"-${today}.tgz
29
30    nbtotal=`ls -lt /home/system/test/"$@"* | wc -l`
31
32
33    if [$nbtotal -gt 6]; then
34
35    nbtokeep=`ls -lt /home/system/test/"$@"* | head -n 6 | wc -l`
36
37    nbtodel=`expr $nbtotal - $nbtokeep`
38           
39
40    cd $HOME/test
41
42
43    ls  | tail -n $nbtodel | xargs rm -rf
44   
45    fi
46
47   done
48


quand j'éxécute mon script voici ce qu'il me dit
backup.sh : ligne 47 :"$@" n'est pas un  identifiant valide

Si qqun connait la solution à mon pb ou a  un  début de piste

merci infiniment

Hors ligne

#2 Le 05/09/2006, à 16:21

kaworu

Re : Script BASH shell

Salut !
ta boucle for est étrange (non?), ne serai-ce pas plutot :

for i in $@

EDIT : ah non.
EDIT2 : arf, c'est quand même étrange.
Quand tu fait ta boucle, ta variable c'est "${$@}", mais quand tu l'apelle c'est avec $@ ...
Bon pk tu utilise $@ ? (pk pas comme ce que je propose plus haut ?)
EDIT3 :
essaye les balises de code, ça aide ^___^

#!/bin/bash -v -x
set -v
set -x

# déplacement
cd $HOME
if [ "$HOME" != "$PWD"]; then
    exit 1
fi

# début de la boucle
for i in $@ ; do
    # téléchargement / sauvegarde 
    today=`date +%d-%m-%Y`
    wget "http://192.168.1.7/CARRIBACKUPS/${i}-${today}.tgz
    if [ $? -ne 0 ]; then
        exit 2
    fi
    mv "${i}-${today}.tgz"  /home/system/test/

    # vérification du nombre total et supression si besoin
    nbtotal=`ls -lt "/home/system/test/${i}*" | wc -l`
    if [$nbtotal -gt 6]; then
        nbtokeep=`ls -lt "/home/system/test/${i}"* | head -n 6 | wc -l`
        nbtodel=`expr $nbtotal - $nbtokeep` # let "nbtodel = nbtotal - nbtokeep"
        cd $HOME/test
        ls  | tail -n $nbtodel | xargs rm -rf
    fi

done

Dernière modification par kaworu (Le 05/09/2006, à 16:36)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne