Как сделать этот скрипт для захвата возвращаемого типа ошибки (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:
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:
$ 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
$? содержит код состояния последнего запуска команды. Таким образом, вы можете изменить свой блок else:
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:
$ 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