Script bash "LIENS-MORTS"
#!/bin/bash #----------------------------------------------------------------------- # # Site 'ERMAIA - 14-03-2026 - Copie libre (sous licence GNU) - # # Vérifier la bonne santé d'un lien qui pointe # sur un site Internet externe # #----------------------------------------------------------------------- # # echo ; echo > /tmp/FichierContenant2Interlignes.txt # VERT="\\033[1;32m" NORMAL="\\033[0;39m" ROUGE="\\033[1;31m" ROSE="\\033[1;35m" BLEU="\\033[1;34m" BLANC="\\033[0;02m" BLANCLAIR="\\033[1;08m" JAUNE="\\033[1;33m" CYAN="\\033[1;36m" # # Dépendance(s): # # Nécessite 'DIALOG' if ! [ `which dialog` ] then echo; echo " Le fichier 'DIALOG' n'existe pas (j'ai cherché dans '/usr/bin/') --> Installer le paquet "; echo echo -e "$ROUGE" "Erreur fatale" "$NORMAL" exit 1 fi # Nécessite 'BEEP' (si l'on veut un bip sonore pour signaler un lien qui est mort) if ! [ `which beep` ] then echo; echo -e "$VERT" " Le fichier 'beep' n'existe pas (j'ai cherché dans '/usr/bin/') --> Installer le paquet. " "$NORMAL"; echo # sleep 1 fi # Nécessite 'TRASH-PUT' (si l'on veut avoir la possibilité de mettre à la corbeille un fichier 'log' devenu inutile) if ! [ `which trash-put` ] then echo; echo -e "$VERT" " Le fichier 'trash-put' n'existe pas (j'ai cherché dans '/usr/bin/') --> Installer le paquet 'trash-cli'. " "$NORMAL"; echo # sleep 1 fi # Usage if [[ $1 == "--help" ]] then echo -e "$VERT" cat <
/etc/liensmorts.conf # # Configuration du script '/usr/bin/liensmorts' # # silence=0 # --> désactivation [0] ou activation [1] d'un bip sonore (pour signaler les liens morts) # FichierConfig=/etc/liensmorts.conf # --> si le chemin, ou le nom du fichier de configuration était # modifié, il est AUSSI nécessaire de modifier les lignes # 164, 165, 166 du script. # FichierLog=/var/log/liensmorts.log # --> modifier le chemin, ou le nom, du fichier ".log", si nécessaire. # EditeurTexte=/usr/bin/nvim # --> éditeur de texte pour lire un fichier 'log' (.. n'importe lequel). # # # # Liste des pages du site -hors ligne- dont les liens qui pointent sur des sites Internet sont à vérifier # [indiquer le chemin complet] # # # Le nombre de pages à vérifier n'est pas limité - le script lira jusqu'au bout, sans perdre patience. # Le script présume qu'une ligne commençant par "page_" est le chemin d'une page html qui est à vérifier.# #page_1=/Commune/Site_Ermaia/Ermaion/index.html # #page_2=/Commune/Site_Ermaia/Ermaion/TecHT.html # #page_3=/Commune/Site_Ermaia/Ermaion/T2150cds.html # #page_4=/Commune/Site_Ermaia/Ermaion/SecuritePompe.html # #page_5=/Commune/Site_Ermaia/Ermaion/PubOscillo_LERES_T7.html # #page_6=/Commune/Site_Ermaia/Ermaion/RTA_Direction_Fonctionnement-1.html # #page_7=/Commune/Site_Ermaia/Ermaion/RTA_Direction_Fonctionnement-2.html # #page_8=/Commune/Site_Ermaia/Ermaion/pagesTechniques.html # #page_9=/Commune/Site_Ermaia/Ermaion/Droit/Droit-consommation.html # #page_10=/Commune/Site_Ermaia/Ermaion/Droit/Droit-bornage.html # #page_11=/Commune/Site_Ermaia/Ermaion/Droit/Droit-assurances.html # #page_12=/Commune/Site_Ermaia/Ermaion/Informatique/CliquerCopier_Script-MontreFST.html # #page_13=/Commune/Site_Ermaia/Ermaion/Informatique/CliquerCopier_Script-MONTER.html # #page_14=/Commune/Site_Ermaia/Ermaion/Informatique/CliquerCopier_Script-CHROOTER.html # # .... etc .. # EOF echo -e "$NORMAL" } # function NettoyerBrouillons { rm /tmp/brouillon.txt 2> /dev/nul rm /tmp/brouillon-2.txt 2> /dev/nul rm /tmp/brouillon-2.txt 2> /dev/nul rm /tmp/brouillon-3.txt 2> /dev/nul rm /tmp/brouillon-4.txt 2> /dev/nul rm /tmp/brouillon-5.txt 2> /dev/nul } # # Nécessite un script de configuration '/etc/liensmorts.conf' ; s'il n'existe pas, il est créé "blanc". if test ! -e /etc/liensmorts.conf then echo; echo -e "$VERT" " Le fichier de configuation '/etc/liensmorts.conf' n'existe pas ; je le crée ; il convient d'y copier-coller les chemins des pages html dont il faut vérifier les liens. " "$NORMAL"; echo CreerFichierConfig fi # # # Récupérer un paramètre de ligne de commande VoirLog="" EditConf="" if [ $# -ne 0 ] then if echo $* | grep --ignore-case --no-messages --quiet --regexp=--log --regexp=-l then VoirLog="--log" else if echo $* | grep --ignore-case --no-messages --quiet --regexp=--edcfg --regexp=-c then EditConf="--edcfg" else echo -e "$VERT" " Paramètre inconnu --> -l --log -c --edcfg --help " "$NORMAL" exit 0 fi fi fi # NettoyerBrouillons # source /etc/liensmorts.conf # if [ -s $FichierLog ]; then echo "Fichier 'log' déjà créé et utilisé" else echo -e "$VERT" "Je crée '"$FichierLog"' avec un en-tête " "$NORMAL" cat <
$FichierLog 'LIENS MORTS' 'Tableau de chasse' ==================================== EOF echo fi # if [[ $VoirLog == "--log" ]] then $EditeurTexte $FichierLog ; echo $? # && \ # Boîte de menu 'Dialog' Options : 'conserver' / 'mettre à la poubelle' / 'supprimer', puis quitter ; # fichtemp=`tempfile 2>/dev/null` || fichtemp=/tmp/test$$ trap "rm -f $fichtemp" 0 1 2 5 15 dialog --backtitle "Quel sort réserve-t-on à ce fichier 'log' ?" \ --title "$FichierLog" --clear \ --radiolist "Choisir ici : " 11 61 5 \ "Conserver" "$FichierLog" ON\ "Poubelle" "$FichierLog" off\ "Supprimer" "$FichierLog" off 2> $fichtemp valret=$? choix=`cat $fichtemp` if [[ $valret -eq 0 ]] then case $choix in "Conserver") echo echo "'$choix'" exit 0 ;; "Poubelle") echo echo "'$choix'" trash -v $FichierLog ;; "Supprimer") echo echo "'$choix'" rm -v $FichierLog ;; esac exit 0 fi echo $valret exit $valret fi # if [[ $EditConf = "--edcfg" ]] then $EditeurTexte $FichierConfig ; echo $? exit 0 fi # # # ping -c 2 www.orange.fr # Vérification de la connexion de l'ordinateur (bon, c'est quand même un préalable ..) if [ $? -eq 0 ] then echo echo -e "$VERT" " La connexion de l'ordinateur au réseau a été vérifiée " "$NORMAL" echo # # Boucle 'while' lisant et exécutant la liste des pages du 'FichierConfig' # NbrLienMort=0 num=1 # numéro de la page du site à travailler cf. fichier 'FichierConfig' --> 'page_num' page="page_"$num echo $page > /tmp/brouillon1.txt PageCH=`cat /tmp/brouillon1.txt` # redéfinir la variable 'page' comme étant une variable 'chaîne' (elle était devenue une variable contenant un entier) cat /tmp/brouillon1.txt Longueur=${!PageCH} length=${#Longueur} while [ $length != 0 ] # tester la fin de la liste des pages du 'FichierConfig' ( = chaîne vide) do echo ${!PageCH} # PageTravailler=" Page à travailler --> "${!PageCH} cat ${!PageCH} | grep --color "https://" >> /tmp/brouillon.txt # travailler les deux types de page : "https://" et "http://" cat ${!PageCH} | grep --color "http://" >> /tmp/brouillon.txt # cat /tmp/brouillon.txt | awk 'BEGIN { FS="=" } {print($2)}' > /tmp/brouillon-2.txt # Mise en forme : récupérer le signifiant cat /tmp/brouillon-2.txt | awk 'BEGIN { FS="\"" } {print($2)}' > /tmp/brouillon-3.txt cat /tmp/brouillon-3.txt | grep --color "https://" >> /tmp/brouillon-4.txt cat /tmp/brouillon-3.txt | grep --color "http://" >> /tmp/brouillon-4.txt # NbrLignes=`cat /tmp/brouillon-4.txt | wc -l` # cat /tmp/FichierContenant2Interlignes.txt /tmp/brouillon-4.txt > /tmp/brouillon-5.txt echo "Nombre de liens à vérifer = "$NbrLignes echo # if [ $NbrLignes -ne 0 ] then # boîte de texte dialog --backtitle "$PageTravailler" --colors --color-mode 2 --aspect 9 --cursor-off-label --exit-label " Suivant --" --scrollbar --erase-on-exit --title "\Zu\Zb\Z7 Nombre de liens à vérifer = $NbrLignes" \ --textbox "/tmp/brouillon-5.txt" 0 0 ; CodeRetour=$? # if [ $CodeRetour -eq 255 ] then echo -e "$VERT" " FIN du script : Touche 'Echap' appuyée " "$NORMAL" exit $? fi fi # NbrLignes=`cat /tmp/brouillon-4.txt | wc -l` echo "Nombre de liens à vérifer = "$NbrLignes echo # Fichier à travailler Fichier="/tmp/brouillon-4.txt" #initialisation du compteur i=0 Zero=0 while IFS= read Ligne; do echo echo echo -e "$VERT" " "$Ligne "$NORMAL" wget --spider --tries=3 --timeout=20 --force-html --base=URL $Ligne ; CodeRetour=$? if [[ $CodeRetour -eq 0 ]] then echo -e "$VERT" " Code retour = "$CodeRetour "$NORMAL" else echo -en "$ROUGE" echo " Code erreur = "$CodeRetour echo -en "$JAUNE" case "$CodeRetour" in # indiquer la signification du n° de code Erreur de la commande 'wget --spider' (cf 'man wget') "1" ) echo " Code d'erreur générique." ;; "2" ) echo " Erreur d'analyse - par exemple, lors de l'analyse des options de la ligne de commande, des fichiers .wgetrc ou .netrc..." ;; "3" ) echo " Erreur d'entrées/sorties du fichier." ;; "4" ) echo " Échec du réseau." ;; "5" ) echo " Échec de la vérification SSL." ;; "6" ) echo " Échec de l'authentification du nom d'utilisateur ou du mot de passe." ;; "7" ) echo " Erreurs de protocole." ;; "8" ) echo " Le serveur a émis une réponse d'erreur." ;; esac echo -e "$NORMAL" # if test $silence -eq 1 ; then beep ; fi # bip sonore avertissant qu'un lien-mort est trouvé # echo >> $FichierLog echo >> $FichierLog echo $PageTravailler >> $FichierLog echo " * "`date`" * " >> $FichierLog echo " ------------------------------" >> $FichierLog echo $Ligne >> $FichierLog echo >> $FichierLog wget --spider --tries=2 --timeout=5 --force-html --base=URL $Ligne -a $FichierLog echo >> $FichierLog ((NbrLienMort++)) echo echo " Nombre de lien(s) mort(s) : "$NbrLienMort echo # fi # incrementation du compteur i=$(($i+1)) done < "$Fichier" ((num++)) NettoyerBrouillons page="page_"$num echo $page > /tmp/brouillon1.txt PageCH=`cat /tmp/brouillon1.txt` cat /tmp/brouillon1.txt Longueur=${!PageCH} length=${#Longueur} done # # echo echo -e "$VERT" " ========= Fin ========= " "$NORMAL" echo echo echo " NbrLienMort = "$NbrLienMort" =" echo -e "$NORMAL" echo # if [ $NbrLienMort -gt $Zero ] if [ -s "$FichierLog" ] then # boîte de texte dialog --colors --color-mode 2 --aspect 9 --exit-label " -Fin- " --scrollbar --no-mouse --title "\Zu\Zb\Z7 Récapitulatif des liens morts Enregistré sur : $FichierLog " \ --textbox "$FichierLog" 0 0 ; CodeRetour=$? # if [ $CodeRetour -eq 255 ] then echo -e "$VERT" " FIN du script : Touche 'Echap' appuyée " "$NORMAL" exit $? fi fi else echo -e "$ROUGE" " Erreur réseau " "$VERT" " La machine n'est pas connectée au réseau : Vérifier la connectivité " "$NORMAL" echo fi # exit 0 # #-----------------------------FIN------------------------------------ #
Copier
Captures d'écran - Script "LIENS-MORTS"