Opérateur unaire attendu

Résolu/Fermé
Anonyme - 26 mars 2008 à 23:56
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 27 mars 2008 à 12:01
Bonjour, j'ai un petit problème j'ai un message de la console quit me dit : != : opérateur unaire attendu ...

j'aimerais faire un test si un fichier n'existe pas j'écris qqch sinon autre chose voici mon code :

#!/bin/bash

CURRENTDATE=`date | cut -d ' ' -f1`

SEMAINE=$[((`date | cut -d ' ' -f2`-1)/7)+1]

if [ `find -name backup.log` != ' ' ]; then // l'erreur doit être ici

if [ $CURRENTDATE != "vendredi" ];then

echo "backup journalier"

elif [ $SEMAINE != 1 ];then

echo "backup hebdomadaire semaine numero "$SEMAINE

else

echo "backup mensuel semaine numero 1"

fi

else

echo "Création du fichier de sauvegarde"

fi

merci Bonne soirée

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
27 mars 2008 à 09:11
Salut,

Plusieurs choses déjà...

Pour savoir d'où vient l'erreur dans ton script, il faut le déboguer. Donc rajoute "set -xv" en début de script pour un affichage verbeux, plus facile de déterminer la syntaxe qui foire.

Concernant "opérateur unaire attendu " c'est quand bash attend un opérateur de comparaison sur des nombres (-eq, -ne, -lt, -le, -gt, -ge) et non sur des fichiers ( -z, -n, =, != ).


Ensuite, tu t'embêtes pour rien ;-\

Pour :
CURRENTDATE=`date | cut -d ' ' -f1`
Préférer :
CURRENTDATE=$(date '+%a')

Là, je n'ai pas compris ce que tu voudrais faire !?
SEMAINE=$[((`date | cut -d ' ' -f2`-1)/7)+1]

dans la mesure où "date | cut -d ' ' -f2" retourne l'abréviation du mois en cours (au passage "$(date '+%b')" est préférable), et que par conséquent les opérateurs arithmétiques n'auront pas d'effet ;-((


Pour :
if [ `find -name backup.log` != ' ' ]; then
Préférer :
if [ -e backup.log ]; then ...


Là, c'est faut dans la mesure où "$CURRENTDATE" contient selon la syntaxe (enfin chez moi) "ven" (abréviation du jour de la semaine) et non "vendredi" :
if [ $CURRENTDATE != "vendredi" ];then


Bon, corrige déjà ça, ajoute "set -xv" à ton script, et reviens nous donner des nouvelles ;-))
7
Bonjour, merci jipicy ça marche super bien mais pourquoi préférer CURRENTDATE=$(date '+%a')

à date | cut -d ' ' -f1 ??

peut être qu'il y a moins d'instructions à executer ...

Merci encore ...

Bonne journée
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
27 mars 2008 à 12:01
peut être qu'il y a moins d'instructions à executer ...
Y'a moins de processus qui sont lancés et puis ça fait parti des options natives de "date", alors pourquoi s'en priver ?

:-))
1