web-dev-qa-db-ja.com

ドメインの有効期限の残りの日数を計算するBashスクリプト

こんにちは、ドメインの有効期限が切れる残りの日数を見つけるタスクがありました。 outputは残りの日数(整数)である必要があるので、引数としてドメインを渡すことができるこの方法を試しました

たとえば:-私のドメイン-www.xplosa.com

スクリプトファイル:-./ domain-exp.sh

メソッドの実行:-./ domain-exp.sh www.xplosa.com

#!/bin/bash

target=$1

# Get the expiration date
expdate="$(whois $1 | egrep -i 'Registrar Registration Expiration Date:' | head -1)"

# Turn it into seconds (easier to compute with)
expdate=("$expdate" +%s)

# Get the current date in seconds
curdate=$(date +%s)

# Print the difference in days
echo  ($expdate - $curdate) / 86400 

これは期待どおりの出力ではありませんでした。この感謝を事前に解決するために私を助けてください。

2
soldier

まず、有効期限の説明が「Expires on:」や「Expiry Date:」のようなものである場合、grepは機能しません。したがって、次のようなパターンでgrepを実行してみましょう:grep -iE 'expir.*date|expir.*on'。もちろん、これは関与する必要があるかもしれません。
head -1は結果を1行に制限するためのものです
grepは次のような出力になります:
Expiry Date: 2020-08-10T07:47:34Z
したがって、最後のWordのみを別のgrepで保持する必要があります:grep -oE '[^ ]+$'

秒への日付変換と最終的な計算にはいくつかの問題があります。以下の修正されたスクリプトでそれらを見つけてください

#!/bin/bash
target=$1
# Get the expiration date
expdate=$(whois $1 | grep -iE 'expir.*date|expir.*on' | head -1 | grep -oE '[^ ]+$')
# Turn it into seconds (easier to compute with)
expdate=$(date -d"$expdate" +%s)
# Get the current date in seconds
curdate=$(date +%s)
# Print the difference in days
echo $(((expdate-curdate)/86400))
5
cmak.fr