LINUX.ORG.RU

bash проверка строки


0

1

Сделал парсер whois для даты окончания срока регистрации домена, мне для сортировки надо формат даты поменять чтобы из 29-Oct-2013 стало 2013.Oct.29

expiration=`whois web2domains.com |grep "Expiration Date"| awk -F":" '{print $2}'|cut -f 1`
#expiration="29-Oct-2013"

if [[ $expiration == [0-9]*\-[a-zA-Z]*\-[0-9]* ]]; then
    echo "true"
    expiration=`echo "$expiration"| awk -F"-" '{print $3"."$2"."$1}'`
fi

echo $expiration web2domains.com

подскажите почему не срабатывает условие над строкой полученной из whois, а из тестовой строки срабатывает?

Centos 6

~# expiration=`whois web2domains.com |grep "Expiration Date"| awk -F":" '{print $2}'|cut -f 1`
~# echo $expiration
29-oct-2013 29-Oct-2013
alex_custov ★★★★★ ()
Последнее исправление: alex_custov (всего исправлений: 1)
Ответ на: комментарий от alex_custov

получается что так false в условии

expiration=`whois web2domains.com |grep "Expiration Date"| awk -F":" '{print $2}'|cut -f 1`
if [[ $expiration == [0-9]*\-[a-zA-Z]*\-[0-9]* ]]; then
    echo "true"
    expiration=`echo "$expiration"| awk -F"-" '{print $3"."$2"."$1}'`
fi
echo $expiration web2domains.com
29-Oct-2013 web2domains.com
а так true
expiration="29-Oct-2013"
if [[ $expiration == [0-9]*\-[a-zA-Z]*\-[0-9]* ]]; then
    echo "true"
    expiration=`echo "$expiration"| awk -F"-" '{print $3"."$2"."$1}'`
fi
echo $expiration web2domains.com
true
2013.Oct.29 web2domains.com

commeta ()
whois web2domains.com | grep "Expiration Date" | tail -1 | tr "-" " " | awk '{print $5"."$4"."$3}'

Но для сортировки эта дата не пойдёт. _Я_нварь будет после _А_преля.

anonymous ()
Ответ на: комментарий от anonymous

Все дело в том что ответы whois отличаются, у доменов ru рф например дата возвращается в формате YYYY.MM.DD, и только у некоторых com net есть такой формат DD-месяц-YYYY. В основном у меня все даты в пригодном для сортировки формате, поэтому я и хочу отловить DD-месяц-YYYY и привести к YYYY.MM.DD

вот полная версия скрипта

#!/bin/bash

/usr/local/ispmgr/sbin/mgrctl -m ispmgr wwwdomain|(
    while read line; do
	domain=`echo $line | cut -d\  -f1 | cut -d\= -f2`
	dlevel=`echo "$domain"| awk -F"." '{
	    if ( $3 != "" ) { print $2"."$3 }
	    if ( $4 != "" ) { print $3"."$4 }
	    if ( $3 == "" ) {print $1"."$2}}'`
	dzone=`echo "$dlevel"| cut -d\. -f2`
	domainip=`dig +short $domain| tail -n1`
	
	if [[ $domain != $dlevel ]]; then
	    dlevelip=`dig +short $dlevel| tail -n1`
	    dzone=$dlevel
	    
	    if [[ "$domainip" == "$dlevelip" ]]; then
		continue
	    fi
	fi
	
	expiration=""
	if [[ "$dzone" == "ru" || $dzone == "рф" ]]; then
		expiration=`whois -h whois.ripn.net $domain |grep "paid-till"| awk -F": " '{print $2}'| cut -f1`
	fi
	
	if [[ "$dzone" == "spb.ru" ]]; then
		expiration=`whois -h whois.nic.ru $domain |grep "paid-till"| awk -F": " '{print $2}'| cut -f1`
	fi
	
	if [[ "$dzone" == "com" || $dzone == "net" ]]; then
		expiration=`whois $domain |grep "Expiration Date"| awk -F": " '{print $2}'| cut -f1`
	fi
	
	if [[ "$expiration" == "" ]]; then
		echo "Domain: $domain Expiration Date not found"
	fi

	if [[ $expiration == [0-9]*\.[a-zA-Z]*\.[0-9]* ]]; then
	    echo "true"
	    expiration=`echo "$expiration"| awk -F"-" '{print $3"."$2"."$1}'`
	fi

	echo $expiration $domain
	
    done
)| sort

commeta ()
Ответ на: комментарий от commeta

В общем сделал рабочий вариант, скрипт берет из панели ispmanager список доменов, проверяет принадлежность поддоменов, и выводит отсортированный результат: список доменов у которых регистрация подходит к концу.

#!/bin/bash

/usr/local/ispmgr/sbin/mgrctl -m ispmgr wwwdomain|(
    while read line; do
	domain=`echo $line | cut -d\  -f1 | cut -d\= -f2`
	dlevel=`echo "$domain"| awk -F"." '{
	    if ($3 != ""){print $2"."$3}
	    if ($4 != ""){print $3"."$4}
	    if ($3 == ""){print $1"."$2}}'`
	dzone=`echo "$dlevel"| cut -d\. -f2`
	domainip=`dig +short $domain| tail -n1`
	
	if [[ $domain != $dlevel ]]; then
	    dlevelip=`dig +short $dlevel| tail -n1`
	    dzone=$dlevel
	    
	    if [[ "$domainip" == "$dlevelip" ]]; then
		continue
	    fi
	fi
	
	expiration=""
	if [[ "$dzone" == "ru" || $dzone == "рф" ]]; then
		expiration=`whois -h whois.ripn.net $domain |grep "paid-till"| awk '{print $2}'`
	fi
	
	if [[ "$dzone" == "spb.ru" ]]; then
		expiration=`whois -h whois.nic.ru $domain |grep "paid-till"| awk '{print $2}'`
	fi
	
	if [[ "$dzone" == "com" || $dzone == "net" ]]; then
		expiration=`whois $domain |grep "Expiration Date"| awk '{print $3}'`
	fi
	
	if [[ "$expiration" == "" ]]; then
		echo "Domain: $domain Expiration Date not found"
	fi

	if [[ $expiration == [0-9]*\-[a-zA-Z]*\-[0-9]* ]]; then
	    expiration=`echo "$expiration"| awk -F"-" '{
		if($2=="Jan")print $3".01."$1
		if($2=="Feb")print $3".02."$1
		if($2=="Mar")print $3".03."$1
		if($2=="Apr")print $3".04."$1
		if($2=="May")print $3".05."$1
		if($2=="Jun")print $3".06."$1
		if($2=="Jul")print $3".07."$1
		if($2=="Avg")print $3".08."$1
		if($2=="Sep")print $3".09."$1
		if($2=="Okt")print $3".10."$1
		if($2=="Nov")print $3".11."$1
		if($2=="Dec")print $3".12."$1
		}'`
	fi

	echo $expiration $domain
	
    done
)| sort

commeta ()
Ответ на: комментарий от commeta

if($2==«Jan»)print $3".01.«$1
...

date -d »$1 $2 $3" +%d.%m.%y

anonymous ()
Ответ на: комментарий от anonymous

благодарю, исправил

	if [[ $expiration == [0-9]*\-[a-zA-Z]*\-[0-9]* ]]; then
	    expiration=`echo "$expiration"| awk -F"-" '{print $1" "$2" "$3}'`
	    expiration=`date -d "$expiration" +%Y.%m.%d`
	fi

commeta ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.