Я новичок с этим из сценариев в Bash, и я пишу один для небольшого PXE-сервера, который в основном выполняет проверку основных важных служб сервера и проверяет, запущены они или нет.
Дело в том, что после выполнения всех проверок с помощью if, что стоило мне понять, как это работает, я хотел бы добавить один, который различает тех, кто на самом деле работает, и тех, которые по разным причинам стоят, и тот же сценарий спрашивает пользователя, не хочет ли он снова попытаться запустить стоящие.
У меня есть следующий код:
#!bin/bash
# Comprobación de servicios e información sobre el sistema #
sleep 3s;
clear;
echo -n -e '\e[1;33mComprobando estado de los principales servicios... ';
sleep 1s;
echo -e '\e[1;32m¡LISTO!\n';
sleep 1s;
# Estado Server DHCP #
echo -n -e '\033[1;36m - Server DHCP - \e[0m';
dhcp=$(systemctl is-active isc-dhcp-server);
if [ $dhcp == "inactive" ]
then
echo -e ' [ \033[1;31m DEAD \e[0m ]\n';
elif [ $dhcp == "active" ]
then
echo -e ' [ \033[1;32m OK \e[0m ]\n';
fi
sleep 1s;
# Estado Server TFTP #
echo -n -e '\033[1;36m - Server TFTP - \e[0m';
tftpd=$(systemctl is-active tftpd-hpa);
if [ $tftpd == "inactive" ]
then
echo -e ' [ \033[1;31m DEAD \e[0m ]\n';
elif [ $tftpd == "active" ]
then
echo -e ' [ \033[1;32m OK \e[0m ]\n';
fi
sleep 1s;
# Estado Server Apache #
echo -n -e '\033[1;36m - Server Apache - \e[0m';
apache2=$(systemctl is-active apache2);
if [ $apache2 == "inactive" ]
then
echo -e ' [ \033[1;31m DEAD \e[0m ]\n';
elif [ $apache2 == "active" ]
then
echo -e ' [ \033[1;32m OK \e[0m ]\n';
fi
sleep 1s;
# Estado Server FTP #
echo -n -e '\033[1;36m - Server FTP - \e[0m';
vsftpd=$(systemctl is-active vsftpd);
if [ $vsftpd == "inactive" ]
then
echo -e ' [ \033[1;31m DEAD \e[0m ]\n';
elif [ $vsftpd == "active" ]
then
echo -e ' [ \033[1;32m OK \e[0m ]\n';
fi
sleep 1s;
# Estado Server WebMin #
echo -n -e '\033[1;36m - Server Webmin - \e[0m';
webmin=$(systemctl is-active webmin);
if [ $webmin == "inactive" ]
then
echo -e ' [ \033[1;31m DEAD \e[0m ]\n';
elif [ $webmin == "active" ]
then
echo -e ' [ \033[1;32m OK \e[0m ]\n';
fi
sleep 2s;
echo -n -e '\e[1;33mRecopilando información del sistema... ';
sleep 1s;
echo -e '\e[1;32m¡LISTO!\n';
screenfetch;
В иллюстративных целях я приложил изображение, чтобы показать, как оно выглядит после его выполнения:
Но я не знаю, как поднять это, учитывая мои плохие знания в написании сценариев.
Любая помощь приветствуется, заранее спасибо.
В любом из случаев ты можешь говорить:
dhcp=$(systemctl is-active isc-dhcp-server);
if [ $dhcp == "inactive" ]
then
read "¿Quieres iniciar el servicio? " si_no
if [ "$si_no" == "si" ]; then
systemctl start isc-dhcp-server
fi
fi
NГіtese конечно, что твой рукописный шрифт podrГ, - чтобы сокращаться используя функции:
Одна funciГіn с parГЎmetros определяется например как:
revisa_servicio () {
echo "$1";
}
И называется с revisa_servicio "bla" "ble"
(в этом случае imprimirГ - в "bla", что является первым parГЎmetro).
В твоем конкретном случае, podrГ-схвати использовать два parГЎmetros: один для услуги и другого для имени, которое у этого есть.
revisa_servicio () {
echo -n -e '\033[1;36m - Server "$2" - \e[0m';
estado_servicio=$(systemctl is-active "$1");
if [ $estado_servicio == "inactive" ]; then
echo -e ' [ \033[1;31m DEAD \e[0m ]\n';
elif [ $estado_servicio == "active" ]; then
echo -e ' [ \033[1;32m OK \e[0m ]\n';
fi
sleep 1s;
}
И llamarГ-схвати это например говоря 'revisa_servicio "isc-dhcp-server" "DHCP".
MГЎs обычно, podrГ-схвати определять ассоциативный array, чтобы сохранять весь info и asГ - повторять на этом:
declare -A servicios["TFTP"]="tftpd-hpa" servicios["DHCP"]="isc-dhcp-server"
for servicio in "${!servicios[@]}";
do
revisa_servicio "${servicios[$servicio]}" "$servicio"
done
Таким образом ты можешь помещать столько услуг, как ты захотел просто aГ±adiendo нового servicios["nombre_del_servicio"]="utilidad-en-systemctl"
.