Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2006, 10h10   #1
Membre Expert
 
Avatar de GLDavid
 
Inscription : janvier 2003
Messages : 2 620
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2003
Messages : 2 620
Points : 2 474
Points : 2 474
Par défaut Variables et assignation

Bonjour

Dans ce script, je veux trouver un fichier selon sa date. Puis, je veux afficher le nom de ce fichier. Voici comment je fais :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
#!/bin/bash
 
REP=/home/gldavid/Subversion/Backup
DAY_BEFORE=`expr \`date +"%d"\` - 1`
REF=`date +"%Y"`"-"`date +"%m"`"-"$DAY_BEFORE
FILE_REF=""
for file in `ls $REP`
do
        DATE=`stat -c "%z" $REP/$file | cut -f1 -d " "`
        if [ "$DATE" = "$REF" ]
        then
                $FILE_REF=$REP/$file #Ligne qui bugge !
        fi
done
echo $FILE_REF
Comme l'indique le code, j'ai une ligne qui ne marche pas et voici la sortie de mon script:
Code :
1
2
 
./cleanSubversionBackup.sh: line 12: =/home/gldavid/Subversion/Backup/svndump28092006-200001.zip: Aucun fichier ou répertoire de ce type
Qu'ai-je bien pû oublier ?
Merci d'avance.

@++
__________________
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code ni le tag

Je ne répond à aucune question technique par MP.
GLDavid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 10h19   #2
Membre Expert
 
Avatar de GLDavid
 
Inscription : janvier 2003
Messages : 2 620
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2003
Messages : 2 620
Points : 2 474
Points : 2 474
C'est bon, j'ai trouvé !
Voici mon code au complet :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#!/bin/bash
 
REP="/home/gldavid/Subversion/Backup"
DAY_BEFORE=`expr \`date +"%d"\` - 1`
REF=`date +"%Y"`"-"`date +"%m"`"-"$DAY_BEFORE
for file in `ls $REP`
do
        FIC=$REP/$file
        DATE=`stat -c "%z" $FIC | cut -f1 -d " "`
        if [ "$DATE" = "$REF" ]
        then
                FILE_REF=$FIC
        fi
done
for fichier in `ls $REP`
do
        if [ "$REP/$fichier" -ot $FILE_REF ]
        then
                rm "$REP/$fichier"
        fi
done
C'est un script de nettoyage de backups subversion pour ne conserver que le plus récent (celui de la veille chez moi).

@++
__________________
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code ni le tag

Je ne répond à aucune question technique par MP.
GLDavid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 10h33   #3
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Citation:
Envoyé par GLDavid
Qu'ai-je bien pû oublier ?
Juste pour l'explication, pour clarifier ta correction :
Tu as oublié qu'une variable shell, en l-value - c'est à dire en membre de gauche de l'affectation, ne doit JAMAIS être préfixée par un $.

En gros, on peut dire que VARIABLE représente le contenant, et que $VARIABLE expose le contenu (de VARIABLE - le contenant).

C'est pour cela que ce code est invalide: On veut mettre "toto" dans un contenu, alors qu'il faut le mettre dans un contenant.

Ces codes sont aussi invalides :
Code :
1
2
export $VAR
unset $VAR
Car les fonctions export ou unset doivent porter sur un contenant, et pas un contenu.


Bonne continuation.
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 10h38   #4
Membre Expert
 
Avatar de GLDavid
 
Inscription : janvier 2003
Messages : 2 620
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2003
Messages : 2 620
Points : 2 474
Points : 2 474
Citation:
Envoyé par 2Eurocents
Juste pour l'explication, pour clarifier ta correction :
Tu as oublié qu'une variable shell, en l-value - c'est à dire en membre de gauche de l'affectation, ne doit JAMAIS être préfixée par un $.

En gros, on peut dire que VARIABLE représente le contenant, et que $VARIABLE expose le contenu (de VARIABLE - le contenant).

C'est pour cela que ce code est invalide: On veut mettre "toto" dans un contenu, alors qu'il faut le mettre dans un contenant.

Ces codes sont aussi invalides :
Code :
1
2
export $VAR
unset $VAR
Car les fonctions export ou unset doivent porter sur un contenant, et pas un contenu.


Bonne continuation.
Tout à fait mon cher fillot !
Voilà qui est bien dit et qui me servira de leçon et qui m'apprendra à moins faire de Perl et de Java

@++
__________________
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code ni le tag

Je ne répond à aucune question technique par MP.
GLDavid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 10h43   #5
Membre habitué
 
Inscription : décembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 123
Points : 144
Points : 144
Pour trouver les fichiers de la veille, tu dois pouvoir ecrire
Code :
1
2
 
find $REP -daystart -type f -mtime 1
A tester eventuellement, j'ai du rouvrir le man pour retrouver ca. ^^
A+
jc-miranda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 11h42   #6
Membre Expert
 
Avatar de GLDavid
 
Inscription : janvier 2003
Messages : 2 620
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2003
Messages : 2 620
Points : 2 474
Points : 2 474
Remarque très intéressante jc
Si ça peut alléger le code, je prend !

GLDavid, qui fait maigrir ses codes mais pas ses poignets d'amour
__________________
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code ni le tag

Je ne répond à aucune question technique par MP.
GLDavid est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h36.


 
 
 
 
Partenaires

Hébergement Web