Как я делаю этот сценарий для получения типа ошибки, которую он возвращает (500,503,402, и т.д.), и добавьте это в сообщении?
#!/bin/bash
hostlist=(s-example1.us s-example.2.us)
for host in "${hostlist[@]}"; do
if nc -w 2 -z $host 80; then
echo "INFO: ssh on $host responding [Looks Good]"
else
echo "ERROR: ssh on $host not responding[Ooops something went
wrong]"
fi
done
$?
содержит код состояния последней выполненной команды. Таким образом, еще можно изменить Ваш блок, чтобы быть:
else
LAST_STATUS_CODE=$? # save the status code immediately, we don't want to accidentally overwrite it
echo "ERROR: ssh on $host not responding[Ooops something went wrong]"
echo "status code: $LAST_STATUS_CODE"
fi
Вы, кажется, перепутываете SSH, HTTP, статус выхода и коды состояния HTTP. Если Вы хотите коды состояния HTTP, используйте что-то как завихрение:
$ curl -LI google.com -s | grep 'HTTP/'
HTTP/1.1 302 Found
HTTP/1.1 200 OK
Затем:
#!/bin/bash
hostlist=(s-colin.coverhound.us s-joe.coverhound.us)
for host in "${hostlist[@]}"; do
status=$(curl -LI "$host" -s | grep 'HTTP/')
if [[ $status == *"200 OK"* ]]; then
echo "INFO: HTTP on $host responding [Looks Good]"
else
echo "ERROR: HTTP on $host not responding [Ooops something went wrong]"
printf "%s\n" "$status"
fi
done
Так, с hostlist=(google.com/teapot)
я добрался бы:
ERROR: HTTP on $host not responding [Ooops something went wrong]
HTTP/1.1 301 Moved Permanently
HTTP/1.1 418 I'm a Teapot