Иногда необходимо быстро проверить доступность устройства в сети зная его ip адрес. Данный скрипт является оберткой для команды ping и предназначен для оптимизации взаимодействий с консолью.
Рассмотрим следующий скрипт:
#!/bin/bash
if [ -n "$1" ]
then
if [[ $1 =~ ^((([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))[\.]){3}(([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))$ ]]
then
targetIP=$1
else
if [[ $1 =~ ^(([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5])) ]]
then
myIP=$(hostname --ip-address)
targetIP=${myIP%.*}.$1
else
echo "Не корректно задан IP адрес в подсети 255.255.255.0"
fi
fi
else
echo "Не задан IP адрес компьютера"
fi
if [ -n "$targetIP" ]
then
echo "Проверяется доступность адреса: "$targetIP
if ping -W 1 -c 1 $targetIP > /dev/null
then
echo "Доступен"
else
echo "Не доступен"
fi
fi
В данном скрипте много внимания уделено интерфейсу и проверкам ошибок ввода.
В bash флаг -n проверяет что строка имеет не нулевую длину, следовательно с помощью конструкции if [ -n «$1» ] можно проверить задан ли пользователем параметр под номером 1, в нашем случае это ip адрес.
Конструкция if [[ $1 =~ ^((([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))[\.]){3}(([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))$ ]] проверяет корректность введенного ip адреса с помощью регулярного выражения: выражение должно иметь 3 части из чисел от 0 до 255 с точкой и одну часть из чисел от 0 до 255 без точки.
Если ip адрес задан не по описанному выше формату проводится проверка ввода на соответствие диапазону от 0 до 255. В таком случае определяется собственный ip адрес, что бы выделить адрес подсети и прикрепить заданное число к нему.
Команда ping -W 1 -c 1 $targetIP > /dev/null отключает вывод ping (переводит на /dev/null), а аргументы -W задает таймаут на ожидание ответа и -c задает количество отправляемых пакетов.
В случае успеха выводится сообщение о доступности машины.