Problème: je dois vérifier si aujourd'hui est jeudi et effectuer différentes actions en fonction du résultat de cette condition. J'ai essayé deux approches différentes:
Obtenir le nom du jour:
DAYOFWEEK=$(date +"%a")
echo DAYOFWEEK: $DAYOFWEEK
if ["$DAYOFWEEK" == "Thu"];
then
echo YES
else
echo NO
fi
Obtenir le nombre de jours:
DAYOFWEEK=$(date +"%u")
echo DAYOFWEEK: $DAYOFWEEK
if ["$DAYOFWEEK" == 4];
then
echo YES
else
echo NO
fi
Dans les deux cas, la sortie est NON, même si elle doit être OUI. Qu'est-ce qui ne va pas?
shell
shell-script
date
test
Swagatika
la source
la source
;
ci seraient nécessaires si vous aviezthen
dans la même ligne queif
. Dans ce cas, ils sont redondants.Réponses:
Le problème est le blanc manquant.
Le code suivant fonctionnera dans des shells dont la
[
commande intégrée accepte==
comme alias pour=
:Mais gardez à l'esprit (voir
help test
enbash
):==
n'est pas officiellement mentionné, vous devez utiliser=
pour comparer les chaînes-eq
est destiné à des tests arithmétiques décimaux (ne fera pas de différence icidate +%u
mais le seraitdate +%d
par exemple lorsqu'il s'agit de comparer04
et4
qui sont numériquement les mêmes mais lexicalement différents).Je préférerais:
En règle générale, vous devriez préférer l' approche du nombre de jours , car elle dépend moins des paramètres régionaux actuels . Sur mon système, la sortie de
date +"%a"
est aujourd'huiDo
.la source
Ne
case
négligez pas ce qui est souvent une meilleure façon de faire ce genre de choses:Sachez également que la sortie de
date +%a
dépend des paramètres régionaux, donc si vous attendez les noms anglais, votre script cessera de fonctionner lorsqu'il sera invoqué par un utilisateur français ou coréen par exemple.Notez que ci-dessus est l'un des rares cas où cela
$(...)
n'a pas besoin d'être cité (bien que les citations ne nuiront pas. Identique àvar="$(...)"
).la source
Dans la même idée, j'utilise le morceau de code suivant pour "désactiver" un cron avant une heure choisie
Bien sûr, je préférerais modifier le crontab lui-même ... si on m'accordait les droits nécessaires pour :)
Voici un test simple qui abandonne un script bash sauf si nous sommes la nuit.
la source
/usr/bin/test
place de la[
commande intégrée du shell ?cron
exécutable par opposition à la crontab de l'utilisateur.-a
c'est déconseillé danstest
. En règle générale, vous utiliseriez:hour=$(date +%H); if [ "$hour" -gt 2 ] && [ "$hour" -lt 7 ]
(ouhour=`date +%H`
si vous deviez être compatible avec le shell Bourne, c'est-à-dire Solaris 10 et plus ancien et peut-être quelques rares unités SCO de nos jours)Pour arrêter le script le jour de la semaine, supprimez uniquement la ligne du jour:
la source
if [ "$DAYOFWEEK" -lt 7 ]
mieux?Tout d'abord, vous devez citer l'affectation DAYOFWEEK = "$ (date +% u)"
Et vous devez avoir des espaces de chaque côté des crochets [et].
Le point-virgule à la fin de la ligne est redondant.
la source
a=$(echo 1 2 3); echo $a;
a=$(echo "1 2 3"); echo $a
avec plusieurs espaces entre les chiffres (StackExchange ne me laisse pas en faire un simple copier-coller, malheureusement).