Я хотел бы знать, что не так с моим кодом? Что мне не хватает? Почему оператор IF работает правильно? Почему он показывает только один выход? Почему заявление elif работает? Я пытаюсь разместить 3 сервера: www.ee, www.eu и www.com, а затем снова разместить их, чтобы определить, есть ли у них адрес IPv6 или почтовый сервер.

РЕДАКТИРОВАТЬ: он должен работать так:

1) Создать скрипт с именем nimed.sh

2) На входе хост выполняет .ee; .Евросоюз; .com хосты.

3) Если хост не существует, выведите "Host not found"

4) Адрес хоста сначала отобразит соответствующий адрес сервера электронной почты, который он нашел. (Use commands sort, awk, tail or head) . Необходимо удалить точки в конце предложения хозяина. Мол, это показывает так:?.Com. (удаление точки =?.com)

5) Если почтовый сервер не найден, выведите "mail server not found"

6) Если почтовый сервер был найден, запросите IP-адрес почтового сервера с помощью команды host.

7) Если почтовый сервер получил адрес IPv6, выведите "found IPv6" , если нет - "IPv6 not found"

Это то, что мне нужно сделать, и я застрял в части 7. Это школьное упражнение, чтобы выучить bash, выполняя упражнения. Это необязательно, не обязательно.

#!/bin/bash

m1="has address"
m2="has IPv6 address"
m3="mail is handled by 0 ."
m4="found IPv6"
m5="IPv6 not found"
m6="mail server not found"
###########################################################################################################################
host "$(host www.ee | sort | grep "mail is handled" | head -1 | awk '{print $7}')" >> www.all.txt
#first line shows this to www.all.txt
#aspmx.l.google.com has address 108.177.14.26
#aspmx.l.google.com has IPv6 address 2a00:1450:4010:c03::1b
host "$(host www.eu | sort | grep "mail is handled" | head -1 | awk '{print $7}')" >> www.all.txt
#second line shows this to www.all.txt
#mail.www.eu has address 46.105.44.68
host "$(host www.com | sort | grep "mail is handled" | head -1 | awk '{print $7}')" >> www.all.txt
#third line shows this to www.all.txt
#ASPMX.L.GOOGLE.com has address 108.177.14.26
#ASPMX.L.GOOGLE.com has IPv6 address 2a00:1450:4010:c03::1b
file="www.all.txt" #and this file has this in total:
#aspmx.l.google.com has address 108.177.14.26
#aspmx.l.google.com has IPv6 address 2a00:1450:4010:c03::1b
#mail.www.eu has address 46.105.44.68
#ASPMX.L.GOOGLE.com has address 108.177.14.26
#ASPMX.L.GOOGLE.com has IPv6 address 2a00:1450:4010:c03::1b
while read line #now this is where it gets messy. I don't know what to do-
#with line variable
do
    if grep -q "$m2" $file #if string 'has IPv6 address' is in www.all.txt
    then
        awk 'NR==1 {print $1}' #go to line 1 and print the first text
# aspmx.l.google.com
        echo "${m4}" #print 'Found IPv6'
    elif grep -q "$m1" $file; then #else if string 'has address' is in
# www.all.txt then
        awk 'NR==2 {print $1}' #go to line 2 and print the first text
        echo "${m5}" #print 'IPv6 not found'
    elif grep -q "$m3" $file; then #if string 'mail is handled by 0 .'
#is in www.all.txt then
        echo "${m6}" #print 'mail server does not exist'
    else #if none of the above was correct then
        echo "${m6}" #mail server does not exist and
        echo "${m5}" #IPv6 not found
    fi #end the if-elif-else statement
done < $file #end the while loop

Файл, который он создает:

kristen@kristen-virtual-machine:~/Desktop$ ./nimed.sh
aspmx.l.google.com
found IPv6
kristen@kristen-virtual-machine:~/Desktop$ ls
koopia.sh  nimed.sh  TEST.sh  www.all.txt
kristen@kristen-virtual-machine:~/Desktop$ cat www.all.txt 
aspmx.l.google.com has address 64.233.161.26
aspmx.l.google.com has IPv6 address 2a00:1450:4010:c0e::1b
mail.www.eu has address 46.105.44.68
ASPMX.L.GOOGLE.com has address 64.233.161.26
ASPMX.L.GOOGLE.com has IPv6 address 2a00:1450:4010:c0e::1b
kristen@kristen-virtual-machine:~/Desktop$

ТЕСТ 1: Успех

Correct program output
--- Input ---

 www.ee


--- Program output ---

aspmx.l.google.com
found IPv6


--- Expected output (text)---

aspmx.l.google.com
found IPv6

ТЕСТ 2: Сбой

Incorrect program output
--- Input ---

 www.eu


--- Program output ---

aspmx.l.google.com
Found IPv6


--- Expected output (text)---

mail.www.eu
Didn't find IPv6

1 ответ1

0

Какое-то время я работал. Я сделал одну серьезную ошибку и неправильно прочитал текст. Ну, это было одно простое простое упражнение, когда я узнал, что мне нужно read :D.

Вот ответ на мой вопрос:

#!/bin/bash

m1="has address"
m2="has IPv6 address"
m3="mail is handled by 0 ."
m4="on IPv6"
m5="ei ole IPv6"
m6="mailiserverit pole"
m7="NXDOMAIN"
f="www.all.txt"
read -p "Sisesta host: " hostname
host $hostname | sort > $f
if grep -q "$m3" $f; then
        echo "$m6"
        echo "$m5"
elif grep -q "$m2" $f; then
        awk 'NR==3 {print $7}' $f
        echo "$m4"
elif host "$(host $hostname | sed 's/\.$//' | tail -1 | awk '{print $7}')" > www.all.txt && grep -q "mx-eu.mail.am0.yahoodns.net" $f; then
        awk 'NR==1 {print $1}' $f
        echo "$m5"
elif grep -q "$m7" $f; then
        echo "hosti pole"
else
        host "$(host $hostname | sed 's/\.$//' | sort | awk 'NR==2 {print $7}')" > $f
                if grep -q "$m2" $f; then
                        awk 'NR==1 {print $1}' $f
                        echo "$m4"
                elif grep -q "$m1" $f; then
                        awk 'NR==1 {print $1}' $f
                        echo "$m5"
fi
        fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .