#!/bin/sh ################################################################################################ ## ## Nom: post_install_sid.sh ## ## Version: 0.3.1 ## ## Licence: WTFPL ## ################################################################################################ ## Vérification que le script est bien lancé en root if [ "${USER}" = "root" ]; then echo "Lancement du script" else echo "/!\\ Le script nécessite d'être root /!\\" exit 1 fi # ********************************************************************************************** # # Variables globales # # ----------------------------------------------------------- script_path=$(dirname $0) ## Choix du mode d'exécution du script: (cf fonction def_debug) ## Niveau 0 # Exécution automatique avec normalement aucune interaction avec l'utilisateur et peu de log ## Niveau 1 et 2 # Exécution automatique avec un peu plus d'information dans les logs ## Niveau 3 # Exécution manuelle avec tous les logs ## Niveau 4 # Reprise du niveau 3 sur la sortie standard ## Niveau 5 # Exécution automatique avecla sortie standard ## Niveau 6 # Mode debug mode_debug=5 ## Architecture de la distribution ARCH="" ## Options d'aptitude en fonction du niveau de debug OPTIONS="" # Default grub timeout grub_timeout='5' # Default user informations new_username=$(ls -1 /home | grep -v "lost+found" | tail -n 1) new_user_mail="${new_username}" # Strate 1 server from Paris Astronomical Observatory (obspm) # http://syrte.obspm.fr/informatique/ntp_infos.php ntp_server='ntp-p1.obspm.fr' # Load personnal informations (new_username, new_user_mail, …) and override some variables if [ -f ${script_path}/informations ]; then . ${script_path}/informations else printf '%b' "You should define a ${script_path}/informations file\n" printf '%b' "Or simply copy the template:\n" printf '%b' "cp ${script_path}/informations.template ${script_path}/informations\n" printf '%b' "Otherwise the script will use defaults values such as '${new_username}' as main user.\n" time=10 printf '%b' "The script will continue in ${time} seconds " while [ "${time}" -gt 0 ]; do printf '%b' "." time=$((time-1)) sleep 1 done clear fi # Fin des variables globales # ----------------------------------------------------------- # ********************************************************************************************** # ********************************************************************************************** # # Fichiers globaux # # ----------------------------------------------------------- # ## Répertoire de log log_dir="/home/${new_username}/log/`date +"%d"-"%m"-"%y"`" # !! Pour utiliser un répertoire de log, décommenter la ligne suivante: #mkdir -p $log_dir if [ -d ${log_dir} ]; then ## Fichier de log placé dans le répertoire de log fichier_log="${log_dir}/new_post_install.sh.log" ## Fichier de erreur placé dans le répertoire de log fichier_erreur="${log_dir}/new_post_install.sh.err" else ## Fichier de log "normal" fichier_log="new_post_install.sh.log" ## Fichier de erreur "normal" fichier_erreur="new_post_install.sh.err" fi ## Fichier qui reprend toutes les informations pour l'utilisateur à la suite de l'installation. INFORMATION="information.txt" # Fin des fichiers globaux # ----------------------------------------------------------- # ********************************************************************************************** # ********************************************************************************************** # # Fonctions globales # # ----------------------------------------------------------- ## Fonction d'affichage en fonction du mode debug choisi echod() { [ "${mode_debug}" -ge 5 ] && echo "\n(DEBUG) $*" ; } echok() { [ "${mode_debug}" -ge 3 ] && echo "(ok) $*" ; } echoi() { [ "${mode_debug}" -ge 2 ] && echo "(ii) $*" ; } echow() { [ "${mode_debug}" -ge 1 ] && echo "(!!) $*" ; } echnk() { [ "${mode_debug}" -ge 0 ] && echo "(EE) $*" ; } ## Redirection de la sortie standard (stdout) vers le fichier de log redirect_stdout() { # On test si le descripteur de fichier 6 existe déjà if [ ! "$(lsof -a -p $$ -d6 | grep 6)" ]; then # Si stdout n'est pas déjà redirigé # Sauvegarder la valeur de stdout dans le descripteur de fichier 6 exec 6>&1 # stdout remplacé par le fichier de log exec > ${fichier_log} echok "stdout redirigé" else echow "stdout déjà redirigé ..." fi } ## Restauration de stdout restore_stdout() { # Test si le descripteur de fichier 6 existe if [ "$(lsof -a -p $$ -d6 | grep 6)" ]; then echok "Restauration de stdout et fermeture du descripteur de fichier 6" # Restaurer stdout et fermer le descripteur de fichier #6 exec 1>&6 6>&- else echoi "Le descripteur de fichier 6 n'existe pas. stdout est normalement en place" fi } ## Redirection de la sortie d'erreur standard (stderr) vers le fichier d'erreur redirect_stderr() { # On test si le descripteur de fichier 7 existe déjà if [ ! "$(lsof -a -p $$ -d7 | grep 7)" ]; then # Sauvegarder la valeur de stderr dans le descripteur de fichier 7 exec 7>&2 # stderr remplacé par le fichier d'erreur exec 2> ${fichier_erreur} echok "stderr redirigé" else echow "stderr déjà redirigé" fi } ## Restauration de stderr restore_stderr() { # Test si le descripteur de fichier 7 existe if [ "$(lsof -a -p $$ -d7 | grep 7)" ]; then echok "Restauration de stderr et fermeture du descripteur de fichier 7" # Restaurer stderr et fermer le descripteur de fichier #7 exec 2>&7 7>&- else echoi "Le descripteur de fichier 7 n'existe pas. stderr est normalement en place" fi } ## Fonction de vérification du code retour de la commande précédemment exécutée # Affiche un message relatif au code retour, et peut sortir du script. # - Prototype : check_output "MESSAGE_RELATIF_À_LA_COMMANDE" check_output() { ## Vérification du code retour de la dernière commande case "${?}" in 0 ) ## Si 0, tout s'est bien passé echok "${1}\n" > "${fichier_erreur}" ## On vide le fichier d'erreur qui aurait pu récupérer des warnings ou autre # Appel de la fonction d'attente (appui sur une touche) attente ;; ## Pas d'erreur * ) ## Si différent de 0 ## On affiche le message relatif à l'erreur echnk "Erreur lors de: -> ${1} <-" echoi "Voir le fichier ${fichier_erreur} pour plus d'information." ## Et on arrête le script avec un code retour 1 echnk "/!\\ Arrêt du script /!\\ " exit 1; ;; esac } ## Fonction qui crée les fichiers passés en paramètres ## Si les fichiers existent déjà, ils sont supprimés puis recrées ## Prototype: create_file $1 [$2 $3 ... $x] ## $1: nom du premier fichier à créer create_file() { # Parcourir tous les arguments et les crée si nécessaire for fichier in $*; do if [ -f ${fichier} ]; then rm -f ${fichier} touch ${fichier} check_output "Suppression puis création du fichier ${fichier}" else touch ${fichier} check_output "Création du fichier ${fichier}" fi done } ## Fonction qui permet de redéfinir les fichiers de log # Prototype: change_log_file $1 # $1: nouveau nom du fichier de log change_log_file() { # Restauration des sorties standard restore_stdout restore_stdin # Redéfinition des fichiers de logs pour mieux correspondre à l'action en cours if [ -d ${log_dir} ]; then ## Fichier de log placé dans le répertoire de log fichier_log="${log_dir}/${1}.log" ## Fichier de erreur placé dans le répertoire de log fichier_erreur="${log_dir}/${1}.err" else ## Fichier de log "normal" fichier_log="${1}.log" ## Fichier de erreur "normal" fichier_erreur="${1}.err" fi # Création des fichiers de logs create_file ${fichier_log} ${fichier_erreur} # Rediriger les sorties standard redirect_stdout redirect_stderr } ## Fonction d'attente # Attend l'appui sur une touche si le mode debug le permet # Prototype: attente attente() { if [ "${mode_debug}" -ge 6 ]; then echod "Appuyer sur la touche 'Entrée' pour continuer ..." #read -s -n1 /dev/null 2> /dev/null dd bs=1 count=1 > /dev/null 2>&1 # Le problème avec la commande `read` est que les différents shell (sh, bash, zsh, ...) en ont une implémentation # différente. L'utilisation de `dd` est en revanche fonctionnelle partout. fi } ## Définition du niveau de debug ## Prototype: def_debug $1 ## $1: valeur comprise entre 0 et 2 pour déterminer le niveau de debug ## Niveau 0 # Exécution automatique avec normalement aucune interaction avec l'utilisateur et peu de log ## Niveau 1 et 2 # Exécution automatique avec un peu plus d'information dans les logs ## Niveau 3 # Exécution automatique avec tous les logs ## Niveau 4 # Reprise du niveau 3 sur la sortie standard ## Niveau 5 # Mode debug def_debug() { case "${1}" in 0) ## Niveau minimum avec le minimum de contenu dans les fichiers de logs # La sortie standard sera redirigée dans un fichier de log redirect_stdout # La sortie d'erreur sera redirigée dans un fichier d'erreur redirect_stderr # Aptitude en tout automatique OPTIONS="-y" # Ne pas afficher les changements sur les paquets lors des mises à jour sed -i 's/pager$/none/' /etc/apt/listchanges.conf ;; 1) ## Niveau bas avec seulement les erreurs et les warnings dans les logs redirect_stdout redirect_stderr # Aptitude en tout automatique OPTIONS="-y" # Ne pas afficher les changements sur les paquets lors des mises à jour sed -i 's/pager$/none/' /etc/apt/listchanges.conf ;; 2) ## Niveau intermédiaire avec les erreurs, les warnings et les informations redirect_stdout redirect_stderr # Pas d'options pour aptitude OPTIONS="-y" # Ne pas afficher les changements sur les paquets lors des mises à jour sed -i 's/pager$/none/' /etc/apt/listchanges.conf ;; 3) ## Niveau moyen avec presque tous les echos (sauf DEBUG) redirect_stdout redirect_stderr # Pas d'options pour aptitude OPTIONS="" ;; 4) ## Niveau élevé avec presque tous les echos (sauf DEBUG) sur la sortie standard redirect_stderr # Pas d'options pour aptitude OPTIONS="" ;; 5) OPTIONS="-y" # Ne pas afficher les changements sur les paquets lors des mises à jour sed -i 's/pager$/none/' /etc/apt/listchanges.conf ;; 6) ## Niveau debug avec tous les echos et les sorties non redirigées # Pas d'options pour aptitude OPTIONS="" echo "Mode debug" attente ;; *) ## Niveau non pris en compte echo "Erreur, le niveau choisi (${1}) n'est pas géré" esac } ## Fonction d'installation # Récupère la liste des paquets à installer et le type de ces paquets. # Prototype: ains "DESCRIPTION_PAQUET" paquet1 paquet2 ... paquetX # Les options sont définies en fonctions du niveau de debug # Utilisation de la fonction check_output pour vérifier que tout s'est bien passé ains() { ## On récupère la description DESCR_PAQUET="${1}" ## Décale la liste des paramètres, $2 devient $1, ... Permet de supprimer la description des paquet. shift ## Installation de la liste des paquets passées en paramètre aptitude ${OPTIONS} install $* ## Vérification que tout s'est bien passé check_output "${DESCR_PAQUET}" ## Nettoie les paquets téléchargés aptitude clean } ## Fonction de désinstallation # Récupère la liste des paquets à désinstaller et le type de ces paquets. # Prototype: arem "DESCRIPTION_PAQUET" paquet1 paquet2 ... paquetX # Les options sont définies en fonctions du niveau de debug # Utilisation de la fonction check_output pour vérifier que tout s'est bien passé arem() { ## On récupère la description DESCR_PAQUET="${1}" ## Décale la liste des paramètres, $2 devient $1, ... Permet de supprimer la description des paquet. shift ## Installation de la liste des paquets passées en paramètre aptitude ${OPTIONS} remove $* ## Vérification que tout s'est bien passé check_output "${DESCR_PAQUET}" ## Nettoie les fichiers de configuration des paquets aptitude ${OPTIONS} purge '~c' } ## Fonction qui récupère l'architecture de la distribution architecture() { ARCHI=$(uname -r) if [ `uname -r | grep amd64` ]; then ARCH="64" elif [ `uname -r | grep 86` ]; then ARCH="86" else echow "architecture inconnue: ${ARCHI}" fi } ## Fonction qui vérifie la présence d'un fichier seed pour l'argument passé en paramètre. # Si ce fichier existe, il sera donc appliqué. # Prototype: preconfig "NOM_PAQUET" preconfig() { if [ -f ${script_path}/seed/${1}.seed ]; then debconf-set-selections ${script_path}/seed/${1}.seed check_output "Préconfiguration de ${1}" else echow "Il n'existe aucun fichier seed pour ${1}." fi } # Fin des fonctions globales # ----------------------------------------------------------- # ********************************************************************************************** # ********************************************************************************************** # # Programme principale # # ----------------------------------------------------------- # Création des fichiers de logs create_file ${fichier_log} ${fichier_erreur} ${INFORMATION} # Définition du niveau de debug def_debug ${mode_debug} # Définition de l'architecture architecture ########################################################### ## Prerequisite ##### Installation ains "Prerequisite" debconf-utils lsof ##### Post-configuration preconfig locales preconfig keyboard ########################################################### ########################################################### #### Apt configuration ########################################################### ##### Pre-configuration ###### Load pre-seed to automatically restart services after an upgrade preconfig restart_no_asking ###### apt.conf.d cp -f ${script_path}/apt/apt.conf.d/* /etc/apt/apt.conf.d/ ###### sources.list.d ### Backup initial test -f /etc/apt/sources.list && mv /etc/apt/sources.list /etc/apt/sources.list.bkp rm -f /etc/apt/sources.list\~ ### Copy all local sources.list files cp -f ${script_path}/apt/sources-list.d/* /etc/apt/sources.list.d/ ###### preferences.d ### Backup initial test -f /etc/apt/preferences && mv /etc/apt/preferences /etc/apt/preferences.bkp ### Copy all local preferences files cp -f ${script_path}/apt/preferences.d/* /etc/apt/preferences.d/ aptitude update check_output "Update Debian repositories" # Restore the standard output to be sur to be able to install the Debian Multimedia Keyring restore_stdout restore_stderr ##### Add ains "Debian Multimedia Repository" deb-multimedia-keyring # Restore the standard output to the default choosen level def_debug ${mode_debug} ##### Post-Configuration aptitude update check_output "Update Debian repositories" ###### Set a variable to ensure to keep old config files when upgrading a package. export UCF_FORCE_CONFFOLD=1 ###### Force a full-upgrade of the system aptitude -y full-upgrade check_output "Force full-upgrade of the system" ########################################################### #### X11 Server ##### Pre-configuration preconfig x11-common ##### Installation ains "X11 Server" mesa-utils xorg ########################################################### ########################################################### #### Graphic Environment ##### Installation ains "Graphic Environment" alsa-utils gtk2-engines-cleanice herbstluftwm i3lock lxappearance nitrogen redshift rofi roxterm scrot suckless-tools terminator wmctrl xautolock xbacklight xclip ##### Remove arem "Purge: Graphic Environment" geoclue-2.0 modemmanager xscreensaver xscreensaver-data ##### Post-Configuration # Ensure to have an xautolock launch at boot time if [ ! "$(grep 'xautolock' /home/${new_username}/.xinitrc)" ]; then cat << EOF >> "/home/${new_username}/.xinitrc" xautolock -time 15 -locker 'i3lock --pointer win -d -e -t' & EOF fi ########################################################### ########################################################### #### Gnome tools ##### Installation ains "Gnome tools" evince etherape gedit gnome-calculator gparted nemo nemo-fileroller planner ##### Remove arem "Purge: Gnome tools" eog ########################################################### ########################################################### #### Dev tools ##### Installation ains "Dev tools" build-essential binutils cpp debconf-utils gcc g++ make ########################################################### ########################################################### #### Admin tools for cli ##### Pre-configuration preconfig hddtemp ##### Installation ains "Admin tools for cli" acpitool alien apticron apt-file apt-listbugs apt-rdepends apt-show-source apt-show-versions dctrl-tools debian-goodies dnsutils dstat ethtool git git-svn gpm hddtemp htop ifscheme iperf mlocate mercurial module-assistant ncdu netdiscover netselect-apt ngrep nmap ntp parted pastebinit perf-tools-unstable rsyslog strace sudo sysv-rc-conf tcpdump tree util-linux whois ##### Post-configuration ###### apt-file: Synchronize the package contents from their sources. apt-file update ###### Grub: Modify the default grub timeout if [ ! "$(grep "GRUB_TIMEOUT=${grub_timeout}" /etc/default/grub)" ]; then sed -i "s/^GRUB_TIMEOUT.*/GRUB_TIMEOUT=${grub_timeout}/" /etc/default/grub update-grub fi ###### Mlocate: Update the mlocate database updatedb ###### Modprobe: Ensure to disable system beep/buzzer cp ${script_path}/modprobe.d/blacklist-beep.conf /etc/modprobe.d/ # Ensure to blacklist dangerous modules (firewire, thunderbolt, …) cp ${script_path}/modprobe.d/blacklist-dma.conf /etc/modprobe.d/ ###### Ntp: Set a better NTP server. if [ ! "$(grep "server ${ntp_server}" /etc/ntp.conf)" ]; then sed -i "s/^server.*/server ${ntp_server}/g" /etc/ntp.conf # Restart NTP service to apply the new server systemctl restart ntp fi ###### Rsyslog: Enable Rsyslog in tty9 sed -i '/#daemon,mail.\*;/{:label;/^$/q;s/^#//;n;s/^#//;t label;}' /etc/rsyslog.conf sed -i 's/tty8/tty9/' /etc/rsyslog.conf ###### Sudo: Add default user to sudo group if [ ! "$(grep "^sudo:x:27:.*${new_username}" /etc/group)" ]; then adduser ${new_username} sudo fi ###### Fstrim: Ensure to enable TRIM if a SSD is available. # If fstrim is not already enable if [ ! "$(grep fstrim /etc/rc.local)" ]; then # For all hdd for path_drive in $(find /sys/block/ ! -name "dm-*" -type l); do IS_SSD=$(grep 0 ${path_drive}/queue/rotational) if [ ${IS_SSD} ]; then sed -i 's/\(^exit 0\)/# Run TRIM on every mountpath\nfstrim -a\n\n\1/' /etc/rc.local fi done fi ########################################################### ######################################################### #### UEFI tools ##### Installation uefi_add_pkg_list="efibootmgr efivar" # If grub-efi is available if [ "$(dpkg -l grub-efi)" ]; then ains "UEFI tools" efibootmgr efivar fi ######################################################### ########################################################### #### System tools for cli ##### Pre-configuration ##### Installation ains "System tools for cli" bsdmainutils colordiff cpio genisoimage keychain knockd lzip moreutils multitail myrepos ntfs-3g openssh-client openvpn physlock screen tmux udisks2 unrar unzip urlview vim-nox vim-doc vim-scripts vlock wakeonlan zsh zip ##### Remove arem "Purge: System tools for cli" bluetooth bluez network-manager vim-tiny ##### Post-configuration ###### Vim: set vim-nox as default editor. update-alternatives --set editor $(command -v vim.nox) ##### Openvpn: Disable to automatically start systemctl disable openvpn.service ###### ZSH: set as default shell ## For root chsh -s /bin/zsh rm -f ~/.bash* ## For new_username chsh -s /bin/zsh "${new_username}" mkdir -p /home/"${new_username}"/.zsh chown "${new_username}":"${new_username}" /home/"${new_username}"/.zsh ## For new users with adduser sed -i "s;/bin/bash;/bin/zsh;" /etc/adduser.conf ########################################################### ########################################################### #### Internet tools for cli ##### Installation ains "Internet tools for cli" axel finch lynx mat postfix weechat-curses ##### Post-configuration ###### Postfix # Ensure to forward root's mails to $new_user_mail if [ ! "$(grep "root: .*${new_user_mail}" /etc/aliases)" ]; then sed -i "s/^root: /root: ${new_user_mail} /" /etc/aliases newaliases fi # Ensure Postfix only listen on localhost if [ -f /etc/postfix/main.cf ] && [ !"$(grep 'inet_interfaces = localhost' /etc/postfix/main.cf)" ]; then sed -i 's/\(inet_interfaces\).*/\1 = localhost/' /etc/postfix/main.cf systemctl restart postfix fi ########################################################### ########################################################### #### Internet tools for X11 ##### Installation ains "Internet tools for X11" browser-plugin-freshplayer-pepperflash dwb filezilla icedove icedove-l10n-fr iceowl-extension firefox firefox-l10n-fr libjs-pdf luakit midori mumble pepperflashplugin-nonfree pidgin pidgin-otr pidgin-microblog rdesktop transmission xvnc4viewer ##### Remove arem "Purge: Internet tools for X11" flashplugin-nonfree flashplugin-nonfree-extrasound ##### Post-configuration # Ensure to install last flash version update-pepperflashplugin-nonfree --install ########################################################### ########################################################### #### Nvidia driver if [ "$(lspci | grep -i nvidia)" ]; then ##### Installation ains "Nvidia driver" linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') nvidia-kernel-dkms nvidia-xconfig ##### Post-configuration ## Backup previous xorg.conf file if exists if [ -f /etc/X11/xorg.conf ]; then mv /etc/X11/xorg.conf{,.bkp} fi ## Run the Nvidia configuration tool nvidia-xconfig --no-logo fi ########################################################### ########################################################### #### Wireless driver for BCM43 ## Support : carte wifi BCM43 ## Liste: broadcom-sta-dkms if [ "$(lspci | grep -i BCM43)" ]; then ##### Installation ains "Wireless driver for BCM43 " linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms ###### Post-configuration # Unload useless modules modprobe -r b44 b43 b43legacy ssb brcmsmac # Load the 'wl' module modprobe wl # Vérification du bon fonctionnement avec: #iwconfig fi ########################################################### ########################################################### #### Office tools for cli ##### Pre-configuration # Load preseed file preconfig cups ##### Installation ains "Office tools for cli" cups devtodo ghostscript gocr graphviz imagemagick imagemagick-doc odt2txt pdftk poppler-utils taskwarrior texinfo texlive texlive-latex-extra units vim-latexsuite xpdf ##### Remove arem "Purge: Office tools for cli" avahi-autopid avahi-daemon cups-browsed libdaemon0 libnss-mdns ##### Post-configuration # Add the standard user to lpadmin group to be able to manage Cups administration via webgui. adduser "${new_username}" lpadmin > /dev/null 2> "${fichier_erreur}" # cups needs samba! ########################################################### ########################################################### #### Office tools for X11 ##### Installation ains "Outils bureautique graphique" freeplane gprename key-mon libreoffice libreoffice-l10n-fr libreoffice-help-fr libreoffice-pdfimport fonts-linuxlibertine ttf-ancient-fonts verbiste verbiste-gnome xournal ########################################################### ########################################################### #### Multimedia tools for cli ##### Installation ains "Multimedia tools for cli" avinfo eyed3 ffmpeg mediainfo mkvtoolnix moc w32codecs ########################################################### ########################################################### #### Multimedia tools for X11 ##### Installation ains "Multimedia tools for X11" audacity easytag gimp gpicview inkscape mirage mkvtoolnix-gui smplayer rhythmbox vlc ########################################################### ########################################################### #### Games ##### Installation ains "Games" teeworlds teeworlds-server ########################################################### ########################################################### #### Network share ##### Installation ains "Network share" nfs-common ##### Remove arem "Purge: Network share" nfs-kernel-server samba ##### Post-configuration #### If nfs-kernel-server and samba are need or vital for the system, disable them anyway # Disable samba service if available by default if [ $(command -v samba) ]; then systemctl disable nmbd.service systemctl disable smbd.service systemctl disable samba.service fi # Disable nfs-kernel-server service if available by default if [ $(command -v nfsdcltrack) ]; then systemctl disable nfs-kernel-server.service fi ########################################################### ########################################################### #### Wireless tools for cli if [ "$(lspci | grep -i wireless)" ]; then ##### Installation ains "Wireless tools for cli" ifscheme wireless-tools wpasupplicant fi ########################################################### ########################################################### #### Wireless tools for X11 if [ "$(lspci | grep -i wireless)" ]; then ##### Installation ains "Wireless tools for X11" wpagui fi ########################################################### ########################################################### #### Miscellaneous useless packages ##### Installation ains "Miscellaneous useless packages" asr-manpages cmatrix cmatrix-xfont cowsay cowsay-off fortunes fortunes-bofh-excuses fortunes-debian-hints fortunes-fr fortunes-off funny-manpages linuxlogo sl ########################################################### ########################################################### #### Manpages / Documentation ##### Installation ains "Manpages" aptitude-doc-fr info manpages-fr manpages-fr-dev manpages-fr-extra ########################################################### # Restauration des sorties standard restore_stdout restore_stderr # Supprime le fichier d'erreur si il est vide [ -s ${fichier_erreur} ] && echo "Fichier erreur non vide" || rm ${fichier_erreur} # Supprime le fichier d'log si il est vide [ -s ${fichier_log} ] && echo "Fichier log non vide" || rm ${fichier_log} exit 0 # Fin de la boucle principale # ----------------------------------------------------------- # **********************************************************************************************