[shell] comparaison de date

Bonjour,

Je ne suis pas une flèche en script et j’ai un souci depuis le passage de Squeeze à Wheezy sur un script de sauvegarde.

[code]#!/bin/sh
dernierdimanche=cal | awk '{print $1}' | tail -2 | head -1
aujourdhui=date +%d

if [ $aujourdhui -eq $dernierdimanche ]
then
echo "Date OK"
rsync …

else
echo "$aujourdhui Date NOK"
fi[/code] ce script commandé par une tâche30 9 22-31 * * /home/user/Script/save-mens.shme permettait d’exécuter ma sauvegarde mensuelle le dernier dimanche du mois.

Depuis Wheezy j’ai un retour d’erreur sur la comparaison de datesave-mens.sh: 5 [:Illegal number: 27
Sauriez-vous comment je dois le modifier ?

Merci de vos retour

Attention /bin/sh n’est pas /bin/bash :wink:

( sources d’infos mais en anglais : wiki.bash-hackers.org/doku.php )

#!/bin/bash
dernierdimanche=$(cal | awk '{print $1}' | tail -2 | head -1)
aujourdhui=$(date +%d)

if [[ "$aujourdhui" -eq "$dernierdimanche" ]]
then
echo "Date OK"
#rsync .........

else
echo "$aujourdhui Date NOK"
fi

ensuite il faut être certain que le crontab utilise bien bash :
inclure SHELL=/bin/bash dans ton crontab

Merci agentsteel

A la base mon script est bien avec #!/bin/sh, j’ai essayé avec #!/bin/bash (que j’ai copier-coller dans le post) au cas où.

Avec bin/sh l’erreur est : save-mens.sh: 5
[:Illegal number: 27

Avec bin/bash (et avec SHELL=/bin/bash au préalable) l’erreur est : save-mens.sh: 5 [: 27 : nombre entier attendu comme expression
bash: [: : commande introuvable

Ta variable $dernierdimanche est une chaîne de caractères et non pas un entier, change ton test par :

Même sans ça, ça devrait fonctionner.
En tout cas sur ma machine, pas d’erreur, ni en exécution directe, ni dans le crontab.

root@deb9550:~# cal | awk '{print $1}' | tail -2 | head -1 | hexdump
0000000 3732 000a                              
0000003
root@deb9550:~# echo "27" | hexdump
0000000 3732 000a                              
0000003
root@deb9550:~# 

Bon, là, ça colle.

Mais voyons maintenant avec la date d’aujourd’hui:

root@deb9550:~# echo "28" | hexdump
0000000 3832 000a                              
0000003
root@deb9550:~# cal | awk '{print $2}' | tail -2 | head -1 | hexdump
0000000 085f 5f32 3808 000a                    
0000007
root@deb9550:~# 

on est bien le 28 => le chiffre “28”, qui est retourné par la commande “cal”, est donc affiché sur fond blanc => c’est plus du tout la même chose…=> “Illegal number”

Bien vu. La solution est donc d’utiliser l’option -h de cal pour désactiver la surbrillance.

root@deb9550:~# echo "28" | hexdump
0000000 3832 000a                              
0000003
root@deb9550:~# cal -h | awk '{print $2}' | tail -2 | head -1 | hexdump
0000000 3832 000a                              
0000007

Impeccable !

Ah ouais, vicieux ce genre de truc :stuck_out_tongue:

Mais moi aussi, la police trouve que j’ai parfois un mauvais caractère, même en restant dans la légalité. :slightly_smiling:

Waou
Quel engouement :wink:

Dans mon cas, juste d’ajouter le “-h” règle le problème
dernierlundi=cal [b][color=#FF0000]-h[/color][/b] | awk '{print $2}' | tail -2 | head -1

Super, Encore merci à vous tous