Nouvelle version BETA, encore avec l'aide de Daniel Vergeylen :
Source :
#!/bin/bash
# Script créé par Jean-Lux avec l'aide de Daniel Vergeylen sous licence GPL
# 2.8 - Version BETA - Cette version du script n'est peut-être pas complètement terminé.
# Affectation des variables pour le diagnostique
majdepot="Non demandé"
majlogiciel="Non demandé"
dependance="Non demandé"
autoremove="Non demandé"
purgecache="Non demandé"
peripherique1="Non demandé"
peripherique2="Non demandé"
corbeille="Non demandé"
sysfichier="Non demandé"
# Fonction de vérification des arrêts des processus en cours par l'utilisateur
function check ()
{
if pidof $processus > /dev/null ; then
echo "Arret de la $appellation, soit par instruction de l'utilisateur, soit à cause d'une erreur inconnue"
kill $PID
if [ "$varcheck" = "majdepot" ] ; then
majdepot="Échec "
elif [ "$varcheck" = "majlogiciel" ] ; then
majlogiciel="Échec "
elif [ "$varcheck" = "dependance" ] ; then
dependance="Échec "
elif [ "$varcheck" = "autoremove" ] ; then
autoremove="Échec "
elif [ "$varcheck" = "purgecache" ] ; then
purgecache="Échec "
elif [ "$varcheck" = "peripherique1" ] ; then
peripherique1="Échec "
elif [ "$varcheck" = "peripherique2" ] ; then
peripherique2="Échec "
else echo "pas de variable à mettre à jour"
fi
else
echo "La $appellation s'est déroulée avec succès"
if [ "$varcheck" = "majdepot" ] ; then
majdepot=Succès
elif [ "$varcheck" = "majlogiciel" ] ; then
majlogiciel=Succès
elif [ "$varcheck" = "dependance" ] ; then
dependance=Succès
elif [ "$varcheck" = "autoremove" ] ; then
autoremove=Succès
elif [ "$varcheck" = "purgecache" ] ; then
purgecache=Succès
elif [ "$varcheck" = "peripherique1" ] ; then
peripherique1=Succès
elif [ "$varcheck" = "peripherique2" ] ; then
peripherique2=Succès
else echo "pas de variable à mettre à jour"
fi
fi
}
# Fonction de lancement des processus
function lance_p ()
{
nom_process=$1
shift
$nom_process $* &
while pidof $nom_process > /dev/null
do
echo .
done
}
## INFOS
zenity --info --title='INFOS' --text="Ce script se charge de mettre à jour votre système et de supprimer les fichiers/paquets inutiles, il est recommandé de l'exécuter au moins une fois par mois."
## Verification des permissions root
if [ "$USER" != "root" ] ; then
zenity --error --text="Les droits d'administrateur n'ont pas été octroyés pour ce script. Veuillez le relancer avec les permissions root!" --title="Accès refusé"
exit
fi
## Affichage de la liste des actions
ACT=$(zenity --list --checklist --width 495 --height 316 \
--title "Sélectionner les opérations à effectuer" \
--text "Veuillez sélectionnez les opérations à effectuer :" \
--column "À faire ?" --column "Description" \
TRUE "Mettre à jour les dépôts" \
TRUE "Mettre à jour les paquets/logiciels installés" \
TRUE "Supprimer complètement les paquets/logiciels inutiles" \
TRUE "Supprimer TOUS les fichiers inutiles du cache d'APT" \
TRUE "Vider la corbeille" \
FALSE "Mise à jour de l'index des périphériques" \
FALSE "Vérifier les dépendances" \
FALSE "Vérifier le disque dur au prochain démarrage de l'ordinateur" );
if [ "${PIPESTATUS[0]}" != "0" ]; then
exit
fi
## Vérification de la connexion Internet
case "$ACT" in
"Mettre à jour les dépôts" | "Mettre à jour les paquets/logiciels installés" | "Mise à jour de l'index des périphériques" ) ping google.fr -c 3 | zenity --progress --text="Test de la connexion internet en cours..." --pulsate --auto-close
if [ "${PIPESTATUS[0]}" != "0" ]; then
zenity --error --text="Aucune connexion Internet n'a été détectée. Veuillez vérifier vos connexions. Ce script va maintenant s'interrompre." --title="Erreur : Pas de connexion Internet"
exit
fi;;
esac
## Exécution des opérations demandées
# Mise a jour des dépôts
echo "$ACT" | grep "Mettre à jour les dépôts" >/dev/null
if [ "$?" = 0 ] ; then
appellation="Mise à jour des dépots"
lance_p apt-get update | zenity --progress --text="$appellation" --pulsate --auto-close
PID=$(pidof apt-get)
processus="apt-get"
varcheck="majdepot"
check
fi
# Mise à jour des logiciels
echo "$ACT" | grep "Mettre à jour les paquets/logiciels installés" >/dev/null
if [ "$?" = 0 ] ; then
appellation="Mise à jour des paquets/logiciels installés"
lance_p apt-get dselect-upgrade -y --force-yes | zenity --progress --text="$appellation" --pulsate --auto-close
PID=$(pidof apt-get)
processus="apt-get"
varcheck=majlogiciel
check
fi
# Vérification des dépendances
echo "$ACT" | grep "Vérifier les dépendances" >/dev/null
if [ "$?" = 0 ] ; then
appellation="Vérification des dépendances des paquets"
lance_p apt-get check -y --force-yes | zenity --progress --text="$appellation" --pulsate --auto-close
PID=$(pidof apt-get)
processus="apt-get"
varcheck=dependance
check
fi
# Suppression des paquets considérés comme INUTILES
echo "$ACT" | grep "Supprimer complètement les paquets/logiciels inutiles" >/dev/null
if [ "$?" = 0 ] ; then
appellation="suppression complète des paquets inutiles"
lance_p apt-get autoremove --purge -y --force-yes| zenity --progress --text="$appellation" --pulsate --auto-close
PID=$(pidof apt-get)
processus="apt-get"
varcheck=autoremove
check
fi
# Suppression des fichiers inutiles dans le cache
echo "$ACT" | grep "Supprimer TOUS les fichiers inutiles du cache d'APT" >/dev/null
if [ "$?" = 0 ] ; then
appellation="Suppression des fichiers inutiles du cache d'APT"
lance_p apt-get clean | zenity --progress --text="$appellation" --pulsate --auto-close
PID=$(pidof apt-get)
processus="apt-get"
varcheck=purgecache
check
fi
# Vidage de la Corbeille
echo "$ACT" | grep "Vider la corbeille" >/dev/null
if [ "$?" = 0 ] ; then
rm -r $HOME/.Trash | zenity --progress --text="Vidage de la corbeille..." --pulsate --auto-close
if [ "${PIPESTATUS[0]}" != "0" ]; then
corbeille=Echec
else
corbeille=Succès
fi
fi
# Mise à jour de l'index des périphériques
echo "$ACT" | grep "Mise à jour de l'index des périphériques" >/dev/null
if [ "$?" = 0 ] ; then
appellation="1ère phase de mise à jour de l'index des périphériques"
lance_p update-pciids 2>&1 | sed -u 's/.*\ \([0-9]\+%\)\ \+\([0-9.]\+\ [KMB\/s]\+\)$/\1\n# Vitesse du téléchargement = \2/' | zenity --progress --text="$appellation" --auto-close
PID=$(pidof update-pciids)
processus="update-pciids"
varcheck=péripherique1
check
fi
# Mise à jour de l'index des périphériques (suite)
echo "$ACT" | grep "Mise à jour de l'index des périphériques">/dev/null
if [ "$?" = 0 ] ; then
appellation="2ème phase de la mise à jour de l'index des périphériques
lance_p update-usbids 2>&1 | sed -u 's/.*\ \([0-9]\+%\)\ \+\([0-9.]\+\ [KMB\/s]\+\)$/\1\n# Vitesse du téléchargement = \2/' | zenity --progress --text="$appellation" --auto-close
PID=$(update-usbids)
processus="update-usbids""
varcheck=péripherique2
check
fi
# Vérification du système de fichier
echo "$ACT" | grep "Vérifier le disque dur au prochain démarrage de l'ordinateur">/dev/null
if [ "$?" = 0 ] ; then
cd /
touch /forcefsck
if [ "${PIPESTATUS[0]}" != "0" ]; then
sysfichier="Non Programmé"
else
sysfichier="Programmé"
fi
zenity --info --text="Vous avez planifié une vérification du système de fichier, cette vérification s'exécutera au prochain démarrage d'Ubuntu !" --title="Vérification du système de fichier"
fi
## FIN
zenity --list --width 512 --height 405 --title "Liste des résultats des opérations effectuées." --text="Résultats des Opérations demandées:\nCe script a été fait par Jean-Lux avec l'aide de Daniel Vergeylen, sous Licence GPL.\n"\
--column="Résultat" --column="Opérations" \
"$majdepot" "Mettre à jour les dépôts" \
"$majlogiciel" "Mettre à jour les paquets/logiciels installés" \
"$autoremove" "Supprimer complètement les paquets/logiciels inutiles" \
"$purgecache" "Supprimer TOUS les fichiers inutiles du cache d'APT" \
"$corbeille" "Vider la corbeille" \
"$peripherique1" "Mise à jour de l'index des périphériques 1ère partie" \
"$peripherique2" "Mise à jour de l'index des périphériques 2ème partie" \
"$dependance" "Vérifier les dépendances" \
"$sysfichier" "Vérifier le disque dur au prochain démarrage de l'ordinateur"
---
Résolution des bugs et nouveautés de la version 2.8 BETA :
1) Correction du bug d'annulation dans les fenêtres Zenity sous forme de fonctions lance et check. En effet, en utilisant une fonction "lance", qui lance le processus demandé, ainsi qu'en récupérant son PID (le numéro du processus), il devient possible de l'annuler lors de l'appui sur annuler de l'utilisateur. Je résume. On part d'une fonction "lance", qui démarre le processus demandé, et on suit avec une fonction "check", qui vérifie que l'utilisateur n'interromp pas le processus. Le Tour est joue!
2) Vérification de la connexion internet uniquement lorsque les opérations demandées nécessitent internet. Quand un utilisateur veut faire un clean, il n'a pas besoin d'internet, il ne faut donc tester la connexion lors des mises à jour. Vous trouverez ce changement sous forme d'une commande "case - esac" qui vérifie tout ça.
3) Mise en place d'un diagnostique et d'une fenêtre récapitulative reprenant les opérations effectuées avec succès ou non. C'est la partie la plus "fun". Par assignation de variable une fois le processus terminé, on enregistre s'il s'est bien déroulé ou non. Ensuite, en fin de script, on récapitule ce qui a bien été ou non.
4) Mise en place du texte sous forme de variables pour permettre une traduction en langue étrangère (Anglais, Allemand,...). Globalement, j'ai placé les textes sous forme de variables, ce qui est plus facile à changer lors de modifications, que ce soit pour le texte en lui même, ou pour une traduction.
---
Pour finaliser cette version, un nettoyage du code sera peut-être nécessaire 😉.
@++