bonjour,
Fatigué de refaire à la mimine des installations à droite et à gauche j'ai écrit un petit script qui me permet d'installer en masse les principaux logiciels.
Le principe est un shell qui lit dans son en-tête (ou dans un fichier de config spécifique) les logiciels à installer (supprimer).
3 modes de fonctionnement:
- traitement de tout le fichier
- traitement d'appli passées en paramètres
- vérification de ce qui est installé
A distinguer, les logiciels que je qualifie de "simples" installé via un "apt install" et les logiciels "complexes" nécessitant un wget etc...
Le problème que je rencontre est le suivant:
- si je lance lance en mode "tout":
BASH_Multi_Installation_Origine.sh
j'ai des erreurs qui abortent toutes les installations "simples"
- si je lance en mode applications spécifiées
BASH_Multi_Installation_Origine.sh partclone audacity banshee
ça marche.
Quand je suis le processus de traitement je ne vois pas la différence entre les 2 traitements:
- dans les 2 cas les lignes de définitions sont stockées dans un fichier temporaire
- dans le 1er cas on traite toutes les lignes de ce fichier ( while read -r ligne)
- dans le 2ème cas on traite une ligne greppée (awk en fait) et après on part sur les même fonctions.
Je ne pige pas.
Log quand c'est KO:
---> installation (désinstallation) de: partclone - install
sudo apt install -y partclone
stty: 'entrée standard': Ioctl() inapproprié pour un périphérique
Traceback (most recent call last):
File "/usr/local/bin/apt", line 71, in <module>
rows, columns = os.popen('stty size', 'r').read().split()
ValueError: not enough values to unpack (expected 2, got 0)
!!!!!! Paquet absent !!!!!!!!
Log quand c'est OK:
---> installation (désinstallation) de: partclone - install
sudo apt install -y partclone
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Lecture des listes de paquets…
Construction de l'arbre des dépendances…
Lecture des informations d'état…
Les paquets supplémentaires suivants vont être installés :
nilfs-tools
Les NOUVEAUX paquets suivants seront installés :
nilfs-tools partclone
0 mis à jour, 2 nouvellement installés, 0 à enlever et 327 non mis à jour.
Il est nécessaire de prendre 448 ko dans les archives.
Après cette opération, 2 033 ko d'espace disque supplémentaires seront utilisés.
Réception de:1 http://archive.ubuntu.com/ubuntu xenial/universe amd64 nilfs-tools amd64 2.2.3-2 [117 kB]
Réception de:2 http://archive.ubuntu.com/ubuntu xenial/universe amd64 partclone amd64 0.2.86-1 [330 kB]
448 ko réceptionnés en 1s (412 ko/s)
Sélection du paquet nilfs-tools précédemment désélectionné.
(Lecture de la base de données...
(Lecture de la base de données... 5%
(Lecture de la base de données... 10%
(Lecture de la base de données... 15%
(Lecture de la base de données... 20%
(Lecture de la base de données... 25%
(Lecture de la base de données... 30%
(Lecture de la base de données... 35%
(Lecture de la base de données... 40%
(Lecture de la base de données... 45%
(Lecture de la base de données... 50%
(Lecture de la base de données... 55%
(Lecture de la base de données... 60%
(Lecture de la base de données... 65%
(Lecture de la base de données... 70%
(Lecture de la base de données... 75%
(Lecture de la base de données... 80%
(Lecture de la base de données... 85%
(Lecture de la base de données... 90%
(Lecture de la base de données... 95%
(Lecture de la base de données... 100%
(Lecture de la base de données... 205943 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../nilfs-tools_2.2.3-2_amd64.deb ...
Dépaquetage de nilfs-tools (2.2.3-2) ...
Sélection du paquet partclone précédemment désélectionné.
Préparation du dépaquetage de .../partclone_0.2.86-1_amd64.deb ...
Dépaquetage de partclone (0.2.86-1) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.5-1) ...
Paramétrage de nilfs-tools (2.2.3-2) ...
Paramétrage de partclone (0.2.86-1) ...
Traitement des actions différées (« triggers ») pour libc-bin (2.23-0ubuntu9) ...
--------------installation (désinstallation) partclone OK ---------------\n
Le shell:
#!/bin/bash
# Script d'installation automatique de programmes
# destiné à une première installation
########################################################################
#
# ZONE de DECLARATION des PAQUETS a installer
#
# Une ligne de déclaration DOIT avoir le format suivant:
# - Flag début de ligne: #%
# Séparateur 1 ou + espaces
# - Nom du logiciel: nom du logiciel sans espace
# Séparateur 1 ou + espaces
# - Type d'installation: 'simple' ou 'complexe'
# - Action: 'install' ou 'remove' ou 'no-install'
# - Flag de vérification "V" ou non "N" d'installation du logiciel
#
#
# TYPIQUEMENT IL NE FAUT MODIFIER QUE LE CHAMP 3 : "install" ou "remove" ou "no-install"
#
# exemple: #% pingus simple install
# #% pidgin simple remove
# #% konquest simple no-install
# #% etcher complexe install
#
# pingus sera installé
# pidgin sera désinstallé
# konquest ne sera ni installé ni supprimé
# etcher sera installé
#
# syntaxe 1 : BASH_Multi_Installation_Origine.sh
# Installation de tout ce qui est déclaré à installer ou supprimer dans ce shell
# ou bien en enregistrant toutes les lignes entre:
# # DEBUT des déclarations des logiciels
# et
# # FIN des déclarations des logiciels
# dans un fichier de config: Multi_installation.cfg (par exemple)
# et de modifier la ligne de déclaration du fichier de config.
#
# syntaxe 2 : BASH_Multi_Installation_Origine.sh appli_1 [ applis_2 .... appli_n ]
# Installation(dés-inst) applications passées en paramètre qui doivent figurer dans le shell
# ou le fichier de config déclaré avec l'action souhaitée.
#
# syntaxe 3 : BASH_Multi_Installation_Origine.sh verification
# Vérification des programmes installés des applis ayant le flag "V" dans le fichier de config.
#
#
# Version: 1.0 25/02/2017
# 2.0 14/02/2018
# Contrôle plus sérieux des paramètres
# 2.1 16/02/2018
# Ajout Etcher (créateur liveusb UEFI)
# 3.0 21/02/2018
# Abandon du lancement en mode sudo.
# Possibilité d'installer des applications passées en paramètre
# 3.1 Mise à jour de MkvToolnixGUI
# 3.2 23/02/2018
# Ajout bannière avertissement début de programme
# 3.3 Ajout mode verification
# 3.4 Correction erreur dans Etcher
# 3.5 Revision de la fonction verification
# Ajout du flag de vérification
# 3.6 Modification des commentaires pour utiliser ou non
# un fichier propre de configuration.
# 3.7 Correction de bug et autres petites améliorations
# 3.8 Correction de bug et évolution des déclarations
# Le champ action devient obligatoire : instal / no-install / remove
# Bug en mode sans paramètre le fichier de config était forcement le shell.
# Auteur: Ivanovich - JC
########################################################################
# DEBUT des déclarations des logiciels
########################################################################
# Etat des paquets du : 14/02/2018
########################################################################
# # REC=recommandé
# # DEF=installé par défaut par le système
# # OPT=selon les choix de chacun
#% partclone simple install V # REC Outil de sauvegarde de partition (vivement recommandé)
#% transmission simple install V # DEF client BitTorrent installé par défaut sur Ubuntu
#% audacious simple no-install V # OPT lecteur audio
#% banshee simple install V # OPT lecteur audio
#% pavucontrol simple no-install V # DEF PulseAudio VolUme Control) est un outil graphique de contrôle simplifié
#% alsa-utils simple no-install V # DEF contrôleur de volume très complet (version graphique terminal)
#% sysinfo simple no-install V # DEF utilitaire donnant des informations sur le système
#% localepurge simple install V # REC est un outil simple qui permet de supprimer automatiquement les langues inutiles d'un paquet installé
#% alacarte simple install V # OPT éditeur de menu
#% dconf-editor simple no-install V # OPT éditeur des variables de configuration
#% etcher complexe install N # REC utilitaire de création d'une live USB boot UEFI
#% multisystem complexe install V # REC créateur de liveusb (censé booter en UEFI)
#% teamviewer complexe install V # REC outil de prise de contrôle à distance
#--------- Outils de maintenance --------------
#% testdisk simple install V # OPT outil de récupération de partition et de fichiers effacés par erreur dont photorec
#% gparted simple install V # REC outil de partitionnement des disques
#--------- Communication ----------------------
#% pidgin simple remove V # DEF est un client de messagerie instantanée multi-protocoles
#% skype simple no-install V # OPT logiciel propriétaire de téléphonie, de vidéophonie et de clavardage par Internet.
#--------- Bureautique ------------------------
#% geany simple install V # REC petit éditeur de texte polyvalent mais orienté programmation
#% gedit simple no-install V # DEF petit éditeur alternatif (moins bien que geany)
#% xsane simple no-install V # DEF conçu pour l'acquisition d'images avec votre scanner
#% pdfshuffler simple no-install V # OPT petit logiciel permettant d'effectuer diverses modifications de PDF
#% ttf-mscorefonts-installer complexe install V # OPT polices compatibles microsoft office
#% fontes_interessantes complexe install N # OPT un lot de fontes intéressantes notamment pour les BD
#--------- Video ------------------------------
#% mkvtoolnix-gui complexe install V # REC ensemble de logiciels GUI pour la création et la modification de fichiers mkv
# # comprend: mkvinfo mkvpropedit mkvextract mkvmerge
#% mediainfo simple install V # REC logiciel permettant de recueillir des informations techniques et des tags sur les fichiers vidéo et audio
#% libav-tools simple install V # REC fournit des outils et des bibliothèques multiplate-formes pour convertir, manipuler et diffuser
# # un large éventail de formats et de protocoles multimédias
# # avconv fait partie du paquet libav-tools
#% ffmpeg simple no-install V # application de lecture et encodage de vidéo
#% x264 simple no-install V # DEF codec pour le h264
#% kdenlive simple install V # REC logiciel de montage vidéo pour l'environnement de bureau KDE
#% qarte complexe install V # OPT application graphique permettant de télécharger des vidéos sur ARTE
#--------- Photo ------------------------------
#% gimp-plugin-registry simple install V # REC contient un certains nombre de scripts pour Gimp
#% digikam complexe install V # REC gestionnaire de photos libre très complet pour l'environnement de bureau KDE
#% hugin simple no-install V # OPT logiciel d'aide à la conception de panoramas à partir de plusieurs photos
#--------- Audio ------------------------------
#% audacity simple install V # REC application libre multiplate-forme d'enregistrement et d'édition audio très complète
# # changer ds les préférences le répertoire de travail /var/tmp par def
# # car il y peut y avoir un risque de saturation de "/" ex: /media/s2_videos/.audacity_temp/
#--------- Multimedia -------------------------
#% smplayer simple install V # REC media player
#% vlc simple install V # REC media player
#
#% plex complexe install V # OPT serveur multimedia compatible chromecast
#% verification complexe install N # doit être mis en install pour etre effectuée
#% appli_test complexe no-install N # fonction servant aux tests du shell (enlever install si pas en période de test)
########################################################################
# FIN des déclarations des logiciels
########################################################################
#--constantes---
NO_ARGS=0
ERREUR_OPTION=65
# 1 - Utilisation du shell comme fichier de config
# ou
# 2 - d'un fichier créé
#
# 1 - Décommenter ci-dessous pour utiliser le shell comme fichier de config
#FIC_CONFIG=$0
# 2 - Décommenter ci-dessous pour déclarer un fichier de config commun (exemple ci-dessous)
#FIC_CONFIG=$HOME/Multi_installation.cfg
# 2 - Décommenter ci-dessous pour déclarer un fichier propre à cette installation (exemple)
FIC_CONFIG=$HOME/home_commun/scripts/Multi_Installation_mint18.3.cfg
#FIC_CONFIG=$HOME/home_commun/scripts/Multi_Installation_Debian.cfg
F_TEMP=/tmp/Multi_Installation_Origine.tmp
FIC_INST_KO=/tmp/Multi_Installation_Origine_Non_Installe.txt
sudo chown $USER.$USER ${F_TEMP}
sudo chown $USER.$USER ${FIC_INST_KO}
echo > ${FIC_INST_KO}
F_LOG=/var/log/Multi_Installation_Origine.log
if ! [[ -e ${F_LOG} ]]
then
sudo touch ${F_LOG}
fi
sudo chown $USER.$USER ${F_LOG}
R_DL=/tmp/
#
# installations Simples ----------------------------------------------
#
install_remove_simple() {
if [ ${ACTION} = "install" -o ${ACTION} = "remove" ]
then
echo ""
echo "---> installation (désinstallation) de: ${PAQUET} - ${ACTION}"
echo "---> installation (désinstallation) de: ${PAQUET} - ${ACTION}" 1>>${F_LOG} 2>>${F_LOG}
echo "sudo apt ${ACTION} -y ${PAQUET}" 1>>${F_LOG} 2>>${F_LOG}
sudo apt ${ACTION} -y ${PAQUET} 1>>${F_LOG} 2>>${F_LOG}
if (( $? != 0 ))
then
echo "!!!!!! Paquet absent !!!!!!!!" 1>>${F_LOG} 2>>${F_LOG}
else
echo "--------------installation (désinstallation) ${PAQUET} OK ---------------\n"
echo "--------------installation (désinstallation) ${PAQUET} OK ---------------\n" 1>>${F_LOG} 2>>${F_LOG}
fi
fi
}
#
# Installations complexes --------------------------------------------
#
qarte() {
# - Arte
sudo add-apt-repository -y ppa:vincent-vandevyvre/vvv 1>>${F_LOG} 2>>${F_LOG}
sudo apt update 1>>${F_LOG} 2>>${F_LOG}
sudo apt install -y qarte 1>>${F_LOG} 2>>${F_LOG}
}
multisystem(){
# - Multisystem (alias Multiboot)
sudo apt-add-repository -y 'deb http://liveusb.info/multisystem/depot all main' 1>>${F_LOG} 2>>${F_LOG}
wget -q http://liveusb.info/multisystem/depot/multisystem.asc -O- | sudo apt-key add - 1>>${F_LOG} 2>>${F_LOG}
sudo apt-get update 1>>${F_LOG} 2>>${F_LOG}
sudo apt install -y multisystem 1>>${F_LOG} 2>>${F_LOG}
}
mkvtoolnix-gui(){
# - MKVtoolnix-gui
wget -q -O - https://www.bunkus.org/gpg-pub-moritzbunkus.txt | sudo apt-key add - 1>>${F_LOG} 2>>${F_LOG}
sudo sh -c 'echo "deb http://www.bunkus.org/ubuntu/xenial/ ./" >> /etc/apt/sources.list' 1>>${F_LOG} 2>>${F_LOG}
sudo apt-get update 1>>${F_LOG} 2>>${F_LOG}
sudo apt-get install mkvtoolnix mkvtoolnix-gui 1>>${F_LOG} 2>>${F_LOG}
}
digikam(){
# - DigiKam 5
sudo add-apt-repository -y ppa:philip5/extra 1>>${F_LOG} 2>>${F_LOG}
sudo apt-get update 1>>${F_LOG} 2>>${F_LOG}
sudo apt install -y digikam5 1>>${F_LOG} 2>>${F_LOG}
}
ttf-mscorefonts-installer(){
# - ttf-mscorefonts-installer
# Erreur en fin mais semble bon - erreur sur arial32
echo "\n---> Installation de: ttf-mscorefonts-installer" 1>>${F_LOG} 2>>${F_LOG}
sudo apt install -y ttf-mscorefonts-installer 1>>${F_LOG} 2>>${F_LOG}
}
fontes_interessantes(){
# - fontes_interessantes
# fonte pour les bulles BD: http://www.dafont.com
# Mad Midnight Marker
# Awesome as fuck
# Black Kids
# Dk the cats whiskers
# edson comics
# Gilles comics handwriting
# I Hate Comic Sans
# Komika Display
echo " Installer les fontes suivantes:
font pour les bulles BD: http://www.dafont.com
Mad Midnight Marker
Awesome as fuck
Black Kids
Dk the cats whiskers
edson comics
Gilles comics handwriting
I Hate Comic Sans
Komika Display"
}
teamviewer(){
# - TeamViewer
cd $HOME/Téléchargements 1>>${F_LOG} 2>>${F_LOG}
if [[ -e teamviewer_amd64.deb ]]
then
# Fichier déjà téléchargé (?)
echo "Fichier teamviewer_amd64.deb déjà présent dans $HOME/Téléchargements" 1>>${F_LOG} 2>>${F_LOG}
echo "Utilisation de ce fichier"
else
wget http://download.teamviewer.com/download/teamviewer_amd64.deb 1>>${F_LOG} 2>>${F_LOG}
fi
CR=$?
if (( $CR == 0 ))
then
sudo /usr/bin/gdebi $HOME/Téléchargements/teamviewer_amd64.deb 1>>${F_LOG} 2>>${F_LOG}
else
erreur $CR "Teamviewer"
fi
}
plex(){
# - Serveur Multimedia Plex
cd $HOME/Téléchargements 1>>${F_LOG} 2>>${F_LOG}
if [[ -e plexmediaserver_1.10.1.4602-f54242b6b_amd64.deb ]]
then
# Fichier déjà téléchargé (?)
echo "Fichier plexmediaserver_1.10.1.4602-f54242b6b_amd64.deb déjà présent dans $HOME/Téléchargements" 1>>${F_LOG} 2>>${F_LOG}
echo "Utilisation de ce fichier" 1>>${F_LOG} 2>>${F_LOG}
else
wget https://downloads.plex.tv/plex-media-server/1.10.1.4602-f54242b6b/plexmediaserver_1.10.1.4602-f54242b6b_amd64.deb 1>>${F_LOG} 2>>${F_LOG}
fi
CR=$?
if (( $CR == 0 ))
then
sudo /usr/bin/gdebi $HOME/Téléchargements/plexmediaserver_1.10.1.4602-f54242b6b_amd64.deb 1>>${F_LOG} 2>>${F_LOG}
else
erreur $CR "Plex MediaServeur"
fi
}
etcher(){
# - Etcher
echo "L'application Etcher va se lancer en fin d'installation pour installer une icône de démarrage" 1>>${F_LOG} 2>>${F_LOG}
echo "Message: Should a desktop file for /opt/etcher-1.3.1-x86_64.AppImage be installed?" 1>>${F_LOG} 2>>${F_LOG}
echo "Il suffira de quitter l'application à ce stade après avoir accepté." 1>>${F_LOG} 2>>${F_LOG}
echo "L'application Etcher va se lancer en fin s'installation pour installer une icône de lancement" >> ${F_LOG}
echo "Il suffira de quitter l'application à ce stade après avoir accepté." >> ${F_LOG}
echo
cd $HOME/Téléchargements 1>>${F_LOG} 2>>${F_LOG}
if [[ -e etcher-1.3.1-linux-x86_64.zip ]]
then
# Fichier déjà téléchargé (?)
echo "Fichier etcher-1.3.1-linux-x86_64.zip déjà présent dans $HOME/Téléchargements" 1>>${F_LOG} 2>>${F_LOG}
echo "Utilisation de ce fichier" 1>>${F_LOG} 2>>${F_LOG}
else
wget https://github.com/resin-io/etcher/releases/download/v1.3.1/etcher-1.3.1-linux-x86_64.zip
fi
CR=$?
if (( $? == 0 ))
then
sudo unzip -d /opt -o ./etcher-1.3.1-linux-x86_64.zip 1>>${F_LOG} 2>>${F_LOG}
sudo rm /opt/etcher-1.3.1-linux-x86_64.zip 1>>${F_LOG} 2>>${F_LOG}
sudo chown $USER.$USER /opt/etcher-1.3.1-x86_64.AppImage 1>>${F_LOG} 2>>${F_LOG}
echo "Lancement de Etcher pour la 1ère fois" 1>>${F_LOG} 2>>${F_LOG}
/opt/etcher-1.3.1-x86_64.AppImage
else
erreur $CR "Etcher" 1>>${F_LOG} 2>>${F_LOG}
fi
}
#
# erreur -------------------------------------------------------------
#
erreur(){
echo "!!!"
case $1 in
8)
echo "!!! Le paquet $2 n'a pas été touvé ou erreur dans l'adresse !!!"
echo "!!! Le paquet $2 n'a pas été touvé ou erreur dans l'adresse !!!" 1>>${F_LOG} 2>>${F_LOG}
;;
*)
echo "!!! Erreur: "$ERREUR
echo "!!! Erreur: "$ERREUR 1>>${F_LOG} 2>>${F_LOG}
esac
echo "!!!"
}
#
# test ---------------------------------------------------------------
#
appli_test(){
echo "HOME: " $HOME
cd $HOME/Téléchargements
pwd
sudo apt remove -y pidgin
}
#
# verification--------------------------------------------------------
#
verification(){
##% smplayer simple install # REC media player
echo "====================================================================="
echo "| ATTENTION: Certaines applications ne sont pas vérifiées parce-que |"
echo "| le flag de vérification a été mis à NON parce-que leur nom |"
echo "| d'installation n'est pas leur nom de paquet ou leur nom global |"
echo "| d'installation inclus un ensemble de paquets non vérifiable. |"
echo "====================================================================="
Liste_a_installer=$( awk ' /^#%/ { if ($4 == "install" && $5 == "V") { liste = liste " " $2}}
END{ print liste}' $FIC_CONFIG )
Liste_a_installer_non_verifie=$( awk ' /^#%/ { if ($4 == "install" && $5 == "N") { liste = liste " " $2}}
END{ print liste}' $FIC_CONFIG )
echo "Liste des applications à installer ----> " ${Liste_a_installer} 1>>${F_LOG} 2>>${F_LOG}
echo "Liste des applications à installer mais non vérifiées ----> " ${Liste_a_installer_non_verifie} 1>>${F_LOG} 2>>${F_LOG}
for appli in ${Liste_a_installer}
do
dpkg --get-selections | grep ^$appli 1>>NULL 2>>NULL
if (( $? != 0 ))
then
etat="non-installée"
echo $appli >> ${FIC_INST_KO}
else
etat="installée"
fi
echo $appli $etat | awk '{ chaine = $1 "----------------------------"
printf "%-30.30s-----------------> %-15s\n" , chaine ,$2 }'
done
}
#
# traiter une ligne --------------------------------------------------
#
traiter_une_ligne(){
echo "DECLARATION: " ${DECLARATION}
PAQUET=$(echo ${DECLARATION} | awk '{ print $2 }')
TYPE=$(echo ${DECLARATION} | awk '{ print $3 }')
ACTION=$(echo ${DECLARATION} | awk '{ print $4 }')
echo "Logiciel: ${PAQUET} - TYPE: ${TYPE} - ACTION: ${ACTION}"
if [ ${TYPE} = "simple" ]
then
# installation simple
if [ x${ACTION} = "xinstall" -o x${ACTION} = "xremove" -o x${ACTION} = "xno-install" ]
then
if [ x${ACTION} = "xno-install" ]
then
echo "---> Installation simple - Pas d'installation demandée pour ${PAQUET} !!!"
echo "---> Installation simple - Pas d'installation demandée pour ${PAQUET} !!!" 1>>${F_LOG} 2>>${F_LOG}
else
install_remove_simple
fi
else
echo "--------------Action non conforme pour le paquet: ${PAQUET} --> ${ACTION} ---------------\n"
echo "--------------Action non conforme pour le paquet: ${PAQUET} --> ${ACTION} ---------------\n" 1>>${F_LOG} 2>>${F_LOG}
fi
else
if [ ${TYPE} = "complexe" ]
then
if [ x${ACTION} = "xinstall" ]
then
# installation complexe
echo "---> Installation complexe: ${PAQUET}"
echo "---> Installation complexe: ${PAQUET}" 1>>${F_LOG} 2>>${F_LOG}
${PAQUET}
else
if [ x${ACTION} = "xno-install" ]
then
echo "---> Installation complexe - Pas d'installation demandée pour ${PAQUET} !!!"
echo "---> Installation complexe - Pas d'installation demandée pour ${PAQUET} !!!" 1>>${F_LOG} 2>>${F_LOG}
else
echo "---> Installation complexe - Pas d'action ou action non implémentée: ${ACTION} !!!"
echo "---> Installation complexe - Pas d'action ou action non implémentée: ${ACTION} !!!" 1>>${F_LOG} 2>>${F_LOG}
fi
fi
else
echo "---> Type d'installation : " ${TYPE} " inconnu ou non implémentée pour ${PAQUET}!!!"
echo "---> Type d'installation : " ${TYPE} " inconnu ou non implémentée pour ${PAQUET}!!!" 1>>${F_LOG} 2>>${F_LOG}
fi
fi
}
#
# main ----------------------------------------------------------------
#
echo "--------Lancement de $0 ----------------------" 1>>${F_LOG} 2>>${F_LOG}
date 1>>${F_LOG} 2>>${F_LOG}
id | grep '(root)' 1>>${F_LOG}
if (( $? == 0 ))
then
echo "!!!"
echo "!!! Vous ne devez pas lancer le shell en mode root "
echo "!!!"
exit 1
fi
grep '^#%' ${FIC_CONFIG} > ${F_TEMP}
# ouverture d'un terminal pour lire en tail le log
echo "" 1>>${F_LOG} 2>>${F_LOG}
echo "======================= Nouveau lancement du shell ===========================" 1>>${F_LOG} 2>>${F_LOG}
echo " $0" 1>>${F_LOG} 2>>${F_LOG}
echo "======================= Nouveau lancement du shell ===========================" 1>>${F_LOG} 2>>${F_LOG}
echo "" 1>>${F_LOG} 2>>${F_LOG}
gnome-terminal --geometry=120x50 -x tail -f ${F_LOG} &
echo " ======================================================================" 1>>${F_LOG} 2>>${F_LOG}
echo " | ATTENTION TOUTES LES SORTIES DES EXECUTIONS DES COMMANDES SE FERONT|" 1>>${F_LOG} 2>>${F_LOG}
echo " | DANS CE TERMINAL. IL EST CONSEILLE D'ARRANGER VOS FENETRES POUR QUE|" 1>>${F_LOG} 2>>${F_LOG}
echo " | CETTE FENETRE NE RECOUVRE PAS LA FENETRE DE LANCEMENT. |" 1>>${F_LOG} 2>>${F_LOG}
echo " | |" 1>>${F_LOG} 2>>${F_LOG}
echo " | EN EFFET SI DES QUESTIONS ATTENDANT UNE SAISIE SONT POSEES VOUS |" 1>>${F_LOG} 2>>${F_LOG}
echo " | DEVREZ FAIRE CETTE SAISIE DANS LA FENETRE DE LANCEMENT. |" 1>>${F_LOG} 2>>${F_LOG}
echo " | |" 1>>${F_LOG} 2>>${F_LOG}
echo " | AVEZ-VOUS COMPRIS? ENTREZ OUI (O|o) |" 1>>${F_LOG} 2>>${F_LOG}
echo " ======================================================================" 1>>${F_LOG} 2>>${F_LOG}
echo "" 1>>${F_LOG} 2>>${F_LOG}
read reponse
if [ x$reponse != "xo" ] && [ x$reponse != "xO" ]
then
echo " Pas de confirmation au message d'entrée !!! " 1>>${F_LOG} 2>>${F_LOG}
exit 1
fi
echo "A SAVOIR: Utilisation comme fichier de configuration de: "${FIC_CONFIG} 1>>${F_LOG} 2>>${F_LOG}
if [ $# -eq "$NO_ARGS" ] # Pas d'arguments = mode toutes les applications
then
while read -r ligne
do
DECLARATION=$ligne
traiter_une_ligne
done < ${F_TEMP}
else
# au moins 1 argument soit au moins une appli à traiter
# on est en mode appli par appli
Nb_arg=$#
# echo "Nb_arg: " $Nb_arg
while (( $Nb_arg >= 1 ))
do
appli=$1
echo "appli: " $appli
awk '/^#%/ {print $2}' ${F_TEMP} | grep $appli
if (( $? == 0 ))
then
DECLARATION=$(awk -v application=$1 '/^#%/ { if( $2 == application ){ print $0 } }' ${F_TEMP})
traiter_une_ligne
else
echo "!!!"
echo "!!! Application non trouvée: ${appli} !!!"
echo "!!! Application non trouvée: ${appli} !!!" 2>>${F_LOG}
echo "!!!"
fi
shift
(( Nb_arg -= 1 ))
done
fi
#rm ${F_TEMP}
exit 0
Merci aux courageux qui se pencheront sur mon petit problème.