Я хотел бы знать, что не так с моим кодом? Что мне не хватает? Почему оператор 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