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

ipset имеет встроенный -счетчик ссылок. Таким образом, всякий раз, когда на него ссылается iptables , его счетчик ссылок увеличивается. Насколько я знаю, только ipset метанабор list:setи iptables ссылаются на ipset . Если вы не используете list:setили не изменяете его, вы можете напрямую запросить ipset(с помощью ipset list), чтобы узнать, ссылались ли на него iptables .

Пример:

# ipset create sshd hash:ip
# ipset list
Name: sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 88
References: 0
Number of entries: 0
Members:

# iptables -A INPUT -m set --match-set sshd src -j DROP

# ipset list sshd
Name: sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 88
References: 1
Number of entries: 0
Members:

Увеличился счетчик ссылок. Добавление новой команды iptablesс использованием этого набора увеличит его до 2. и т. д.

Выходные данные в формате XML могут помочь сценариям с правильными инструментами. Например:

# references=$(ipset -terse -output xml list | xmlstarlet sel -t -v '/ipsets/ipset[@name="sshd"]/header/references')
# echo $references
2
0
30.11.2020, 12:29
1 ответ

"^[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]\ [0-9][0-9]\:[0-9][0-9]\:[0-9][0-9]$"

кажется, работает как регулярное выражение grep для моей цели, но может быть более чистый способ

как указал танасисп, это не улавливает невозможные даты, поэтому тест с датой -d

if [[ ! $(date -d $(echo "2015:12:12"|sed -e 's!:!/!g')) ]] &>/dev/null ; then echo "not right"; fi

, который терпит неудачу по-разному, так как он, возможно, также принимает несколько раз :, если передается "12 :04 :15", он принимает как действительный... что привело меня к моему окончательному решению для проверки даты:

if [[ ! $(date -d $(echo "12:04:15"|sed -e 's!:!/!g')) ]] || [[ ! "12:04:15" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] &>/dev/null ; then echo "not right"; fi

, что в контексте дает:

mmedia=thispic.jpg
eexifdata=($(exiftool -f -n -p '$GPSLatitude,$GPSLongitude,$CreateDate,$ModifyDate' $mmedia 2>/dev/null|sed -e 's/,/ /g' -e 's!/!:!g'))
if  [[ ! $(date -d $(echo "${eexifdata[2]}"|sed -e 's!:!/!g')) ]] || [[ ! "${eexifdata[2]}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] &>/dev/null ; then # if date format is not acceptable
    eexifdata[2]="${eexifdata[3]}";eexifdata[3]="${eexifdata[4]}"; # then swap one position (exif is weird sometimes)
    if  [[ ! $(date -d $(echo "${eexifdata[2]}"|sed -e 's!:!/!g')) ]] || [[ ! "${eexifdata[2]}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] &>/dev/null ; then # if issue persists
        eexifdata[2]="$(date +%Y:%m:%d)" # set current date
        eexifdata[3]="$(date +%H:%M:%S)" # set current time
    fi
fi
0
18.03.2021, 22:46

Теги

Похожие вопросы