J'ai un script shell qui accepte deux paramètres de date et doit valider deux paramètres dans le format DD-MM-AAAA.
.... ......... p> Obtenir des dates non valides, mais si je le fais avec date "+% y-% m- % D "Puis il validait bien, s'il vous plaît laissez-moi savoir n'importe quel moyen de valider le format d'arguments de date comme DDMMyyyy. P> p>
3 Réponses :
Arguments à exemple: p> pour calculer la différence entre deux dates (En jours), vous pouvez utiliser: p> Date -d code> ne peut pas être fourni dans le format DD-MM-AAAAAYY. Avant d'utiliser
date -d code>, vous devez convertir vos paramètres de date en format que
date -d code> peut gérer. Les travaux suivants, en convertissant les deux paramètres de date au format yyyymmdd:
./datediff_test.sh 30-07-2020 28-07-2020
2
Merci pour l'aide maintenant, je passe ces paramètres pour calculer la différence de dates, mais obtenir des formats de date non valides tout en calculant à DATADIFFF () Funcion., Dates DIFF Fonction ci-dessous. ...... datrodiff () {## Calculer la différence de dates fdate = $ (date -d "$ date1" "+% s") sdate = $ (date -d "$ date2" "+% s" ) Période = $ ((((60 * 60 * 24)) datrodiff = $ (($ {fdate} - $ {sdate} - $ {sdate}) / ($ {sdate}) / ($ {sdate}))) echo $ datrodiff Aidez-vous à nouveau à calculer la date Différence du format DDMMyyyy uniquement.
Vous devez vous assurer que les paramètres de date sont convertis en format YYYYMMDD avant d'exécuter les commandes code> de la date code>. Je mettrai à jour ma réponse pour montrer comment calculer la différence entre deux dates.
Merci pour l'aide.
Pas de problème, s'il vous plaît upvote ma réponse si vous sentez que cela résout votre problème.
Votre problème principal est que, tandis que Vous devez également valider que vous avez le bon nombre d'entrées ainsi que d'utiliser ( note: strong> Si vous n'utilisez pas BASH, vous devrez remplacer le em> em> Ajouter un script court pour vérifier l'entrée: p> La fonction fonctionne comme vous l'avez l'intention, par exemple p> ou dans le cas d'une date invalide: p > date code> traitera une large gamme de formats avec
-d code> il ne prendra pas de valeurs séparées par un trait d'union comme
DD-MM-AAAAAA CODE> ou
MM-DD-AAAAAYY CODE>. Dans un format délimité
date code> attend
mm / jays / aaaa code>. Donc, vous devrez reformater votre date dans ce format avant de tenter la conversion avec
Date -d code>.
local Code> Variables dans votre fonction. Ajout des validations et en utilisant
awk code> pour un reformat rapide des arguments, vous pouvez faire: p>
avec un tuyau.) p>
$ ./chkdates.sh 21-4-1999 32-5-1999
date2 invalid
return 1
@tomptz, merci pour l'aide et le code ci-dessous fonctionne.
.... #! /bin/bash convert_to_seconds() { day="$(cut -d'-' -f1 <<<$1)" month="$(cut -d'-' -f2 <<<$1)" year="$(cut -d'-' -f3 <<<$1)" echo "$(date "+%s" -d $year$month$day)" } fdate="$(convert_to_seconds $1)" sdate="$(convert_to_seconds $2)" period=$((60*60*24)) datediff=$(((${fdate} - ${sdate})/${period})) echo $datediff ....
Pas de problème, s'il vous plaît upvote ma réponse ci-dessous si vous le sentez que cela résout votre problème.
Dans votre fonction Reformate
1 $ code> et
2 $ code> à
AAAAYY-MM-DD code> Avant d'appeler
Date code>
Quel est le format d'arguments qui sont transmis comme
1 $ code> et
2 $ code>?
Vous devez utiliser
-ne code> pour tester l'inégalité numérique,
! = Code> teste la chaîne inégalité. (NIT) Vous n'avez pas besoin de citer des variables à l'intérieur
[[...] code> Vous devez avec
[...] code> et
test code>. Soyez cohérent dans votre utilisation de noms variable Gardant, par exemple.
$ is_valid1 code> et
$ {is_valid2} code> semble gênant cependant parfaitement bien.
@ Naidu5: Pourquoi fournissez-vous un format de date, qui est uniquement destiné à une mise en forme d'une date d'écriture à STDOUT, si vous déménageez ensuite le stdout. Sinon, votre approche n'est pas fausse; Il valide juste pour tout format b> quel que
date code> accepte et devrait produire dates non valides i> si l'une des dates fournies n'est pas décodable par
Date code>. Mais le message d'erreur que vous impression est trompeur. Il devrait être à la place: une de vos dates est invalide, mais je ne vous dirai pas qui i>. En outre, je ne jetterais pas Sterrr tout en déboguant le script, car cela pourrait fournir des informations supplémentaires ce qui ne va pas.
@ Naidu5: Regardez la page code> Data CODE> Man pour le paragraphe intitulé chaîne de date i>. Il décrit grossièrement, quel format est attendu pour spécifier la date.